IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)

FAQ SASConsultez toutes les FAQ

Nombre d'auteurs : 14, nombre de questions : 232, dernière mise à jour : 20 décembre 2012 

 
OuvrirSommaireMacro LangageMacrovariables

Pour récupérer le nombre d'observations, il faut utiliser l'option NOBS dans l'instruction SET.
Pour créer une macrovariable, il faut utiliser la fonction CALL SYMPUT.

 
Sélectionnez

options symbolgen ;
 
data _null_;
set sashelp.class nobs=nobs ;
call symput ("nbobs",nobs);
run;
 
%put "Le nombre d'observations de la table est :" &nbobs ; 
Créé le 10 octobre 2008  par SAS

La fonction "SYSGET" permet de récupérer le contenu d'une variable d'environnement Système. Voici un exemple où l'on récupère le nom de l'utilisateur (variable Windows "USERNAME") dans une variable SAS.

 
Sélectionnez

data _null_;
length MONUSER $50;
MONUSER=sysget(trim("USERNAME"));
put MONUSER=;
run; 

Le principe est le même pour les variables Unix :

 
Sélectionnez

MAVARIABLE=sysget(trim("$HOME")); 
Créé le 10 octobre 2008  par SAS

La macrovariable SYSDATE renvoie la date système courante en utilisant le format DATE7.
La date système "January 5, 2000" sera donc codée "05JAN00".
Exemple :

 
Sélectionnez

data _null_ ;
date = input("&sysdate",date7.) ;
put date ddmmyy8. ;
run ;

Résultat : 05/01/00

Avec le passage à l'an 2000, lorsque l'option YEARCUTOFF n'est pas positionnée, cela peut engendrer des problèmes si des tests sont réalisés par rapport à cette date.
En effet, sans le positionnement de YEARCUTOFF, la valeur de l'exemple précédent sera interprétée comme la date 05/01/1900.
Pour que la valeur renvoyée par SYSDATE soit interprétée correctement, il suffit de positionner l'option YEARCUTOFF à une valeur qui vous convient.

Exemple :

 
Sélectionnez

options yearcutoff = 1920 ;
data _null_ ;
date = input("&sysdate",date7.) ;
put date ddmmyy10. ;
run ;

Résultat : 05/01/00

À partir des versions 6.12 TS060 et 6.09E TS470, vous pouvez aussi utiliser la macrovariable SYSDATE9 qui retourne l'année sur quatre digits.

Créé le 10 octobre 2008  par SAS
 
Sélectionnez

DATA t;
input a $;
cards;
a
b
c
;
run;
%macro cration_macro_var;
DATA _null_; SET t;
call symput('var'||left(trim(_n_)),a);
call symput('nb_ligne',_n_);
run;
%do i =1 %TO &nb_ligne;
    %put Valeur &i &&var&i..;
%end;
%mend;
%cration_macro_var;
Créé le 27 mai 2008  par bahraoui

La fonction %SYMDEL permet la suppression d'une macrovariable spécifique. Le code ci-dessous explicite cette notion :

 
Sélectionnez

%LET test=Bonjour;/*Déclaration et initialisation de la macrovariable test*/
%PUT &test;/*Affichage de la macrovariable test*/
%PUT _USER_;/*On liste les macrovariables de l'utilisateur*/
%SYMDEL test;/*Suppression de la macrovariable test*/
%PUT _USER_;/*On liste les macrovariables de l'utilisateur*/
Créé le 27 mai 2008  par fafabzh6

En exécutant la ligne ci-dessous vous listerez toutes les macrovariables de votre session, c'est-à-dire les macrovariables de l'utilisateur et les macrovariables automatiquement générées par SAS.

 
Sélectionnez

%PUT _ALL_;
Créé le 27 mai 2008  par fafabzh6

En exécutant la ligne ci-dessous vous listerez les macrovariables générées automatiquement par SAS.

 
Sélectionnez

%PUT _AUTOMATIC_;
Créé le 27 mai 2008  par fafabzh6

En exécutant la ligne ci-dessous vous listerez les macrovariables créées par l'utilisateur.

 
Sélectionnez

%PUT _USER_;
Créé le 27 mai 2008  par fafabzh6

Les macrovariables n'ont qu'un seul type : le type caractère. L'exemple suivant illustre cette notion :

 
Sélectionnez

%LET v1=20;
%LET v2=10;
%LET v3=&v1-&v2; 
%PUT &v3;

La macrovariable "v3" est égale à la chaine de caractères 20-10 et non à 10 (l'opération 20-10).

Le caractère "&" étant un caractère privilégié de SAS, il faut utiliser une fonction spécifiant que le texte rentré dans la macrovariable comporte un caractère spécial. La macrofonction %nstr() permet ce genre de manipulation.

 
Sélectionnez

%let macrovariable = %NRSTR(&exemple);
%put &macrovariable;
Créé le 27 mai 2008  par fafabzh6

L'instruction symget permet ce genre de manipulation. L'exemple suivant explicite son fonctionnement :

 
Sélectionnez

DATA base;
INPUT var1 var2;
cards ;
10 11
15 22
;
RUN;
%MACRO test();
DATA base2;
SET base;
CALL SYMPUT (COMPRESS("mavar"||left(put(_N_,4.))),var1);
varId=symget("mavar"||left(put(_N_,4.)))+2;
RUN;
%MEND test;
%test();
Créé le 1er mars 2008  par fafabzh6

L'instruction %PUT permet d'afficher la valeur d'une macrovariable dans la fenêtre log.

 
Sélectionnez

%LET maVar = Hello World;
%PUT &maVar;

On aura alors Hello World d'affiché dans la fenêtre log.

Créé le 1er mars 2008  par fafabzh6

À l'aide du programme ci-dessous vous pourrez lister les noms des tables contenues dans la bibliothèque test2. Créons tout d'abord la bibliothèque et les tables :

 
Sélectionnez

LIBNAME test2 "C:/";
 
DATA test2.b1;
INPUT X1 X2;
CARDS;
0 1 
2 4 
;
RUN;
DATA test2.b2;
INPUT X3 X4;
CARDS;
2 5 
6 3 
;
RUN;

Pour identifier les noms des tables et leur nombre procédez comme suit :

 
Sélectionnez

proc sql noprint;;
SELECT trim(libname)||"."||trim(memname) INTO :liste separated BY ' '
FROM sashelp.vstable
WHERE libname = upcase("Test2");
SELECT count(*) INTO :nb_table 
FROM sashelp.vstable
WHERE libname = upcase("Test2");
quit;

Remarque : la description des tables est contenue dans sashelp.vstable.

On récupère les sorties dans des macrovariables :

 
Sélectionnez

%put Liste des TABLE &liste ;
%put Nombre de TABLE &nb_table;
Créé le 15 novembre 2011  par bahraoui

À l'aide de la macrofonction %str() vous pouvez stocker votre procédure SAS dans une macrovariable pour ensuite l'exécuter. Par exemple :

 
Sélectionnez

DATA base;
input v1;
cards;
1 
2
;
RUN;
%LET test = %str(PROC PRINT DATA=base NOOBS;RUN;);
&test;
Mis à jour le 15 juillet 2008  par fafabzh6

Les caractères ";" et "'"étant des caractères privilégiés de SAS, il faut utiliser une fonction spécifiant que le texte rentré dans la macrovariable comporte un caractère spécial. La macrofonction %str() permet ce genre de manipulation.

 
Sélectionnez

%LET test=%str(Hello;);
%PUT &test;
Créé le 27 mai 2008  par fafabzh6

Le type des macrovariables étant le texte, il faut préciser à SAS lorsque vous voulez que celui-ci fasse le calcul demandé. Les macrofonctions %EVAL() et %SYSEVALF() permettent cette manipulation.

La différence entre les deux se situe au niveau du résultat de l'opération. Si celui-ci est un nombre entier vous utiliserez %EVAL() sinon vous utiliserez %SYSEVALF(). L'exemple suivant illustre cette notion :

 
Sélectionnez

%LET v1=15;
%LET v2=10;
%LET v3=%EVAL(&v1-&v2);
%PUT &v3;
%LET v4=%SYSEVALF(&v1/&v2);
%PUT &v4;
Créé le 27 mai 2008  par fafabzh6
  

Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright © 2011 Developpez Developpez LLC. Tous droits réservés Developpez LLC. Aucune reproduction, même partielle, ne peut être faite de ce site ni de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.