top of page

MACRO-VARIABLES

Contrairement aux langages de programmation classiques, les macro-variables ne peuvent stocker que du texte. L'utilisation des guillemets n'est donc pas nécessaire.

De plus, le nom de macro-variables n'est pas sensible à la case (pas de différence entre les lettres minuscules et majuscules).

Il existe deux méthodes pour créer des macro-variables :

- Avec la macro-fonction %LET.

%LET maVar1=Stid; /* Le texte Stid est stocké dans la macro-variable maVar1. */

%LET maVar2=2017-2018; /* Le texte 2017-2018 est stocké dans la macro-variable maVar2. */

%LET maVar3=var1; /* Le contenu de la variable var1 est stocké dans la macro-variable maVar1. */

- Avec l'instruction CALL SYMPUT dans une étape DATA.

DATA _NULL_; /* Création d'une table nommée _NULL_ qui est temporaire (non stockée). */

SET table1; /* Copie des données de la table1 dans la table _NULL_. */

CALL SYMPUT("maVar1",var1); /* La macro-variable nommée maVar1 est égale à la dernière valeur prise par la variable nommée var1. */

RUN;

Si l'on veut créer autant de macro-variables qu'il y a d'individus dans une table, on utilise l'instruction COMPRESS.

DATA _NULL_;

SET table1;

CALL SYMPUT(COMPRESS("maVar"||_N_),var1); /* Concaténation de la macro-variable maVar avec un compteur d'individu (_N_). La macro-variable maVar1 sera égale à la valeur prise par le premier individu de la table pour la variable var1. maVar2 sera égale au deuxième individu, etc ... */

RUN;

Une macro-variable peut stocker une concaténation (fusion) de macro-variables. On doit alors mettre le caractère & devant le nom des macro-variables.

Pour la concaténation d'une macro-variable et d'un mot, on doit mettre un point entre la macro-variable et le mot. Par contre, pour la concaténation d'un mot et d'une macro-variable, on ne met pas de point.

%LET maVar1=Stid;

%LET maVar2=2017-2018;

%LET maVar3=&maVar1&maVar2; /* Le texte Stid2017-2018 est stocké dans la macro-variable nommée maVar3. */

%LET maVar4=&maVar1.Bonjour; /* Le texte StidBonjour est stocké dans la macro-variable nommée maVar4. */

%LET maVar4=Bonjour&maVar1; /* Le texte BonjourStid est stocké dans la macro-variable nommée maVar4. */

Pour afficher le texte contenu dans une macro-variable, on utilise la macro-fonction %PUT.

Il ne faut pas oublier le caractère & devant le nom de la macro-variable.

%PUT &maVar1; /* Affiche Stid (contenu de la macro-variable maVar1). */

À savoir : l'affichage des macro-variables et macro-programmes se fait dans le journal.

Pour supprimer une macro-variable, on utilise la macro-fonction %SYMDEL.

%SYMDEL maVar1;

Pour afficher dans le journal toutes les macro-variables crées avec leur contenu, on utilise

l'instruction _USER_.

%PUT _USER_;

Pour afficher dans le journal toutes les macro-variables présentes de base dans SAS, on utilise

l'instruction _AUTOMATIC_.

%PUT _AUTOMATIC_;

%PUT _ALL_; /* Instruction _USER_ + instruction _AUTOMATIC_ (les deux à la fois). */

Une macro-variable peut avoir deux types de portée :

- Portée locale : une macro-variable créée dans un macro-programme (avec l'instruction %LET par exemple) est de portée locale. C'est-à-dire qu'elle ne peut être utilisée uniquement dans le macro-programme.

- Portée globale : une macro-variable créée à l'extérieur d'un macro-programme est de portée globale. C'est-à-dire qu'elle peut être utilisée soit dans le macro-programme soit en dehors du macro-programme.

Pour déclarer une macro-variable en portée globale, on utilise la macro-fonction %GLOBAL.

%MACRO progA;

%GLOBAL maVar1; /* La déclaration de la macro-variable nommée maVar1 en portée globale se fait avant sa création (%LET). */

%LET maVar1=Statistique descriptive;

%PUT &maVar1;

%MEND progA;

Pour déclarer une macro-variable en portée locale, on utilise la macro-fonction %LOCAL.

bottom of page