FAQ SASConsultez toutes les FAQ
Nombre d'auteurs : 13, nombre de questions : 308, dernière mise à jour : 5 avril 2016 Ajouter une question
Cette F.A.Q., qui traite de tout type de questions portant sur l'outil SAS, a été réalisée à partir des contributions des membres des forums sas de developpez.com en vue de répondre à des questions fréquemment posées par les utilisateurs et grâce à SAS France qui a bien voulu nous donner accès à ses sources.
Si vous désirez contribuer à l'amélioration de cette F.A.Q., vous pouvez participer au billet de participation à l'enrichissement de la faq SAS , ou contacter le responsable SAS , ou contacter un des responsables de l'équipe Business Intelligence .
Nous espérons que cette F.A.Q. saura répondre à un maximum de vos questions. Nous vous souhaitons une bonne lecture.
L'équipe SAS de developpez.com remercie les contributeurs actuels : ash_rmy , bahraoui , datametric , fafabzh6 , Fleur-Anne.Blain , green_fr , oncle_pete , raf64flo , rastoix , s_a_m et steelspirit .
L'équipe SAS de developpez.com remercie aussi claudeLeloup et jacques_jean pour leurs relectures attentives de la F.A.Q. dans le but de chasser les fautes d'orthographes.
- À quoi sert une macrovariable ?
- Quelle est la liste des macrovariables créées automatiquement par SAS
- Comment supprimer une macrovariable ?
- Comment afficher la valeur d'une macrovariable ?
- Quel est le type d'une macrovariable ?
- Comment récupérer le nombre d'observations d'une table dans une macrovariable ?
- Comment utiliser les variables d'environnement système dans un programme SAS ?
- Comment utiliser la macrovariable SYSDATE ?
- Comment créer des macrovariables à partir d'une table SAS ?
- Comment lister toutes les macrovariables de votre session ?
- Comment lister les macrovariables créées automatiquement par SAS ?
- Comment connaître les macrovariables créées par un utilisateur ?
- Comment stocker les valeurs d'une macrovariable dans une table ?
- Comment lister les noms des tables d'une bibliothèque dans une macrovariable ?
- Comment exécuter une procédure SAS à partir d'une macrovariable ?
- Comment stocker des caractères spéciaux dans une macrovariable ?
- Comment faire un calcul à l'aide de macrovariables ?
- Quelle sont les fonctions permettant de récupérer des informations sur les macrovariables dans une étape DATA?
Une macrovariable sert à stocker une information pour pouvoir la réutiliser. Une macrovariable peut être initialisée par un %LET ou par un CALL SYMPUT dans une table.
Code sas : | Sélectionner tout |
1 2 3 | %LET maVar=base; PROC PRINT data=&maVar; RUN; |
Code sas : | Sélectionner tout |
1 2 3 4 | DATA res; SET base; CALL SYMPUT('MaVar'_N_,var); RUN; |
Il est important de signaler que les macrovariables sont des valeurs stockées en mémoire et non pas dans des tables.
La fonction %SYMDEL permet la suppression d'une macrovariable spécifique. Le code ci-dessous explicite cette notion :
Code sas : | Sélectionner tout |
1 2 3 4 5 | %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*/ |
L'instruction %PUT permet d'afficher la valeur d'une macrovariable dans la fenêtre log.
Code sas : | Sélectionner tout |
1 2 | %LET maVar = Hello World; %PUT &maVar; |
Les macrovariables n'ont qu'un seul type : le type caractère. L'exemple suivant illustre cette notion :
Code sas : | Sélectionner tout |
1 2 3 4 | %LET v1=20; %LET v2=10; %LET v3=&v1-&v2; %PUT &v3; |
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.
Code sas : | Sélectionner tout |
1 2 | %let macrovariable = %NRSTR(&exemple); %put ¯ovariable; |
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.
Code sas : | Sélectionner tout |
1 2 3 4 5 6 7 8 | options symbolgen ; data _null_; set sashelp.class nobs=nobs ; call symput ("nbobs",nobs); run; %put "Le nombre d'observations de la table est :" &nbobs ; |
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.
Code sas : | Sélectionner tout |
1 2 3 4 5 | data _null_; length MONUSER $50; MONUSER=sysget(trim("USERNAME")); put MONUSER=; run; |
Code sas : | Sélectionner tout |
MAVARIABLE=sysget(trim("$HOME"));
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 :
Code sas : | Sélectionner tout |
1 2 3 4 | data _null_ ; date = input("&sysdate",date7.) ; put date ddmmyy8. ; run ; |
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 :
Code sas : | Sélectionner tout |
1 2 3 4 5 | options yearcutoff = 1920 ; data _null_ ; date = input("&sysdate",date7.) ; put date ddmmyy10. ; run ; |
À 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.
L'instruction CALL SYMPUT permet, dans une étape DATA, de créer des macrovariables à partir des données stockées dans une des variables de l'étape DATA.
Code sas : | Sélectionner tout |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | DATA t; INPUT a $; CARDS; a b c ; RUN; %MACRO creation_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; %creation_macro_var; |
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.
Code sas : | Sélectionner tout |
%PUT _ALL_;
En exécutant la ligne ci-dessous vous listerez les macrovariables générées automatiquement par SAS.
Code sas : | Sélectionner tout |
%PUT _AUTOMATIC_;
En exécutant la ligne ci-dessous vous listerez les macrovariables créées par l'utilisateur.
Code sas : | Sélectionner tout |
%PUT _USER_;
L'instruction symget permet ce genre de manipulation. L'exemple suivant explicite son fonctionnement :
Code sas : | Sélectionner tout |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | 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(); |
À 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 :
Code sas : | Sélectionner tout |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | 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; |
Code sas : | Sélectionner tout |
1 2 3 4 5 6 7 8 | 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; |
On récupère les sorties dans des macrovariables :
Code sas : | Sélectionner tout |
1 2 | %put Liste des TABLE &liste ; %put Nombre de TABLE &nb_table; |
À l'aide de la macrofonction %str() vous pouvez stocker votre procédure SAS dans une macrovariable pour ensuite l'exécuter. Par exemple :
Code sas : | Sélectionner tout |
1 2 3 4 5 6 7 8 9 | DATA base; input v1; cards; 1 2 ; RUN; %LET test = %str(PROC PRINT DATA=base NOOBS;RUN;); &test; |
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.
Code sas : | Sélectionner tout |
1 2 | %LET test=%str(Hello;); %PUT &test; |
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 :
Code sas : | Sélectionner tout |
1 2 3 4 5 6 | %LET v1=15; %LET v2=10; %LET v3=%EVAL(&v1-&v2); %PUT &v3; %LET v4=%SYSEVALF(&v1/&v2); %PUT &v4; |
Proposer une nouvelle réponse sur la FAQ
Ce n'est pas l'endroit pour poser des questions, allez plutôt sur le forum de la rubrique pour çaLes 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 © 2024 Developpez Developpez LLC. Tous droits réservés Developpez LLC. Aucune reproduction, même partielle, ne peut être faite de ce site et 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.