Annonce

Bienvenue sur le site support des ouvrages :
SAS - Introduction au décisionnel : méthode et maîtrise du langage
(1ère édition - épuisée)
SAS - Introduction pratique : du data management au reporting (2ème édition - épuisée)
SAS - Introduction au décisionnel : du data management au reporting (3ème édition - épuisée (hélas...))

la réponse à la question "mais où trouver la 3ème édition ?" est précisée ici


Retrouvez dans ce tiré à part, la préface écrite par Mouloud Dey, Directeur Business solutions et marchés émergents, SAS France,
l’introduction générale ainsi que le plan complet de l’ouvrage

#1 28-02-2018 07:11:35

SAS-SR
Administrateur
Lieu: Université d'Orléans
Date d'inscription: 01-09-2008
Site web

[archive] On fait la course ?

Bonjour

Pour réaliser une même tâche, on a toujours avec SAS plusieurs façons de faire. Mais si ces différentes façons sont équivalentes en termes de résultat final, elles ne le sont pas forcément dans l'utilisation de vos ressources et nous allons voir cela au moyen de ce sujet des beaux mercredis.

Nous allons nous amuser cette semaine avec deux tables : GIGA et MINI. Si vous êtes un fervent lecteur de mes ouvrages, ces noms doivent vous dire quelque chose... et je me dis que donner un peu de corps à ces tables au moyen d'un sujet des beaux mercredis ne peut qu'aider...

le programme suivant crée les deux tables - tout ce que vous avez à faire, c'est préciser la bibliothèque permanente dans laquelle vous allez enregistrer ces deux tables. Il ne faut pas que ces tables soient présentes dans votre bibliothèque WORK.

Code:

LIBNAME lib "chemin vers votre bibliothèque" ;

DATA lib.giga(DROP=j) 
     lib.minib(KEEP=id x2);
   ARRAY x(100) ;
   DO id=1 TO 10000000 ;
      DO j=1 TO 100 ;
         x(j)=rand("uniform");
      END;
   IF x3<0.10 THEN OUTPUT lib.minib ;
   OUTPUT lib.giga;
   END;
RUN;

PROC SORT DATA=lib.minib OUT=lib.mini(DROP=x2);
   BY x2;
RUN;

PROC SORT DATA=lib.giga;
   BY x1;
RUN;

PROC DELETE DATA=lib.minib;RUN;

OPTION NOREPLACE ;

L'objectif est simple : il faut construire une table MINI2, extrait de GIGA. Dans la table MINI2, vous ne devez retrouver que les observations qui ont leur identifiant (variable ID) présents dans la table MINI.

Je vois au moyen quatre façons d'obtenir ce résultat et c'est pour pouvoir comparer les performances de ces différentes méthodes que je vous demande d'activer l'option globale NOREPLACE (voir section 5.6.2, ED3) : quelle que soit la méthode, vous partirez donc toujours des mêmes tables GIGA et MINI puisque vous n'êtes plus, via NOREPLACE, autorisé à les remplacer.

Ainsi, si vous avez besoin de trier vos tables, vous devrez impérativement utiliser l'option OUT de PROC SORT. Si vous ne le faites pas, vous aurez dans votre journal le message suivant :

Code:

2695
2696  proc sort data=lib.giga;
2697  by ID ;
2698  run;

WARNING: Table LIB.GIGA non remplacée car de l'option NOREPLACE.

Amusez vous à effectuer cette extraction au moyen de plusieurs méthodes (et ne postez pas vos solutions dans le forum !)

Les tables sont de dimensions conséquentes... vous le constaterez quand vous exécuterez le programme donné dans ce post et verrez, à coup sûr, des différences de fonctionnement entre une approche "standard" et d'autres approches...

amusez vous bien

Ce sujet est maintenant archivé - seuls les utilisateurs inscrits de www.sas-sr.com peuvent consulter l'intégralité du sujet et les réponses aux questions posées.
pour vous identifier, suivez ce lien
pour vous inscrire, suivez ce lien

Hors ligne

 

Pied de page des forums

Propulsé par FluxBB
Traduction par FluxBB.fr
Flux RSS