h1

Répéter une procédure plusieurs fois avec du langage macro

janvier 12, 2009

Alors qu’il existe les arrays pour répéter une action sur plusieurs variables, la méthode pose ses limites lorsqu’il s’agit de répéter des procédures en changeant seulement quelques noms de variables. Dans ce cas, il est possible d’utiliser le langage macro ou d’automatiser l’écriture du programme dans un DATA _NULL_.

Quand vous avez beaucoup de code à exécuter le langage macro sera beaucoup plus lisible que le DATA _NULL_ allourdi par les instructions PUT. De plus vous pourrez continuer à utiliser le DATA _NULL_ à d’autres fins dans la macro. Voici une illustration de cette méthode très puissante qu’est le langage macro.

1. Créer des macros variables

Créer une macro variable par valeur à faire varier dans la macro : Le but du jeu est de créer une macro variable pour chacune des variables contenues dans le data set SASHELP.CLASS. Ces macros variables auront un nom bien particulier VAR + un numéro allant de 1 à 5 (nombre total de variables dans le data set: NAME, AGE, SEX, HEIGHT, WEIGHT). En d’autres termes, on aura :

  • &VAR1.=NAME
  • &VAR2.=AGE
  • &VAR3=SEX
  • &VAR4=HEIGHT
  • &VAR5=WEIGHT

Connaître le nombre total de variables pour définir une boucle : Le but sera ensuite de remplacer dans une boucle (loop), le nombre. Afin de définir cette boucle, il faut extraire la valeur de fin (5). On la sauvegardera dans une macro variable :

  • &TOT.=5
data _null_;
   set sashelp.vcolumn (keep  = libname memname name
                        where = (upcase(libname)='SASHELP' and
                                 upcase(memname)='CLASS'))
                       end=eof;
   call symput(compress('var' || put(_N_,best.)),name);
   if eof then call symputx('tot',_N_);
run;

Voir les valeurs prises par toutes les macro variables : Pour voir ces macro variables et leur valeurs dans la log, utilisez l’instruction %PUT.

%put _all_;

Créer une macro variable : CALL SYMPUT (et CALL SYMPUTX) est une des trois méthodes pour créer une macro variable. Vous pouvez vous reporter à l’article « 3 méthodes pour construire des macro variables sans macro » pour approfondir le sujet.

Accéder aux méta données (metadata) : Ici, j’ai choisi d’utiliser le dictionnaire COLUMN en passant par une vue afin d’y accéder directement à partir d’une étape data. Pour plus d’informations, sur son équivant DICTIONARY.COLUMNS, consultez l’article « Les 2 dictionnaires SAS les plus utilisés : TABLES et COLUMNS« .

2. Créer la macro

A présent, notre macro TEST contient une boucle allant de 1 à 5. A chaque exécution de la procédure PROC PRINT une variable différente sera donnée.

%macro test;
   %do i=1 %to &tot.;
      proc print data=sashelp.class;
      var &&var&i.;
      run;
    %end;
%mend test;
%test;

3. A vous de jouer

De la même manière vous pouvez imprimer les données du data set SASHELP.CLASS pour chacun des valeurs des noms des étudiants (variable NAME). A vous d’essayer.

Laisser un commentaire

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l'aide de votre compte WordPress.com. Déconnexion / Changer )

Image Twitter

Vous commentez à l'aide de votre compte Twitter. Déconnexion / Changer )

Photo Facebook

Vous commentez à l'aide de votre compte Facebook. Déconnexion / Changer )

Photo Google+

Vous commentez à l'aide de votre compte Google+. Déconnexion / Changer )

Connexion à %s

%d blogueurs aiment cette page :