Publicités

SAS possède une puissante fonctionnalité de programmation appelée Macros qui nous permet d’éviter les sections de code répétitives et de les réutiliser au besoin. Elle permet également de créer des variables dynamiques dans le code qui peuvent prendre des valeurs différentes pour différentes instances d’exécution du même code. Les macros peuvent également être déclarées pour des blocs de code qui seront réutilisés plusieurs fois de la même manière que les variables macro. Nous verrons les deux dans les exemples ci-dessous.

Variables macro

Ce sont les variables qui détiennent une valeur qui sera utilisée encore et encore par un programme SAS. Elles sont déclarées au début d’un programme SAS et appelées plus tard dans le corps du programme. Elles peuvent avoir une portée globale ou locale.

Variable macro globale

Elles sont appelées variables macro globales car tout programme SAS disponible dans l’environnement SAS peut y accéder. En général, ce sont les variables attribuées par le système auxquelles de multiples programmes ont accès. Un exemple général est la date système.

Exemple

Vous trouverez ci-dessous un exemple de la variable SAS appelée SYSDATE qui représente la date système. Envisagez un scénario visant à imprimer la date système dans le titre du rapport SAS chaque jour où le rapport est généré. Le titre affichera la date et le jour actuels sans que nous ayons à coder de valeurs pour eux. Nous utilisons l’ensemble de données SAS intégré appelé CARS disponible dans la bibliothèque SASHELP.

proc print data = sashelp.cars;where make = 'Audi' and type = 'Sports' ; TITLE "Sales as of &SYSDAY &SYSDATE";run;

Lorsque le code ci-dessus est exécuté, nous obtenons la sortie suivante.

Variable locale de la macro

Ces variables sont accessibles par les programmes SAS dans lesquels elles sont déclarées comme faisant partie du programme. Elles sont généralement utilisées pour fournir différents varaibels aux mêmes instructions SAS sl qu’elles puissent traiter différentes observations d’un ensemble de données.

Syntaxe

Les variables locales sont décalquées avec la syntaxe ci-dessous.

% LET (Macro Variable Name) = Value;

Ici, le champ Valeur peut prendre n’importe quelle valeur numérique, texte ou date selon les besoins du programme. Le nom de la variable Macro est n’importe quelle variable SAS valide.

Exemple

Les variables sont utilisées par les instructions SAS en utilisant le caractère & ajouté au début du nom de la variable. Le programme ci-dessous nous donne toutes les observations de la marque ‘Audi’ et du type ‘Sports’. Dans le cas où nous voulons le résultat d’une marque différente, nous devons changer la valeur de la variable make_name sans changer aucune autre partie du programme. Dans le cas de programmes d’apport, cette variable peut être référencée encore et encore dans n’importe quelle instruction SAS.

%LET make_name = 'Audi';%LET type_name = 'Sports';proc print data = sashelp.cars;where make = &make_name and type = &type_name ; TITLE "Sales as of &SYSDAY &SYSDATE";run;

Lorsque le code ci-dessus est exécuté, nous obtenons le même résultat que le programme précédent. Mais changeons le nom du type en ‘Wagon’ et exécutons le même programme. Nous obtiendrons le résultat ci-dessous.

Programmes macro

La macro est un groupe d’instructions SAS qui est référencé par un nom et pour l’utiliser dans le programme n’importe où, en utilisant ce nom. Elle commence par une déclaration %MACRO et se termine par une déclaration %MEND.

Syntaxe

Les variables locales sont déclarées avec la syntaxe ci-dessous.

# Creating a Macro program.%MACRO <macro name>(Param1, Param2,….Paramn);Macro Statements;%MEND;# Calling a Macro program.%MacroName (Value1, Value2,…..Valuen);

Exemple

Le programme ci-dessous décalque un groupe de staemnets SAT sous une macro nommée ‘show_result’ ; Cette macro est appelée par d’autres déclarations SAS.

%MACRO show_result(make_ , type_);proc print data = sashelp.cars;where make = "&make_" and type = "&type_" ;TITLE "Sales as of &SYSDAY &SYSDATE";run;%MEND;%show_result(BMW,SUV);

Lorsque le code ci-dessus est exécuté, nous obtenons la sortie suivante.

Macros couramment utilisées

SAS possède de nombreuses instructions MACRO qui sont intégrées dans le langage de programmation SAS. Elles sont utilisées par d’autres programmes SAS sans les déclarer explicitement.Les exemples courants sont les suivants – terminer un programme lorsqu’une certaine condition est remplie ou capturer la valeur d’exécution d’une variable dans le journal du programme. Voici quelques exemples.

Macro %PUT

Cette instruction macro écrit des informations de texte ou de variable macro dans le journal SAS. Dans l’exemple ci-dessous, la valeur de la variable ‘today’ est écrite dans le journal du programme.

data _null_;CALL SYMPUT ('today',TRIM(PUT("&sysdate"d,worddate22.)));run;%put &today;

Lorsque le code ci-dessus est exécuté, nous obtenons la sortie suivante.

Macro %RETURN

L’exécution de cette macro entraîne la fin normale de la macro en cours d’exécution lorsque certaines conditions sont évaluées comme étant vraies. Dans l’exemple ci-dessouslorsque la valeur de la variable « val » devient 10, la macro se termine sinon elle continue.

%macro check_condition(val); %if &val = 10 %then %return; data p; x = 34.2; run; %mend check_condition; %check_condition(11) ;

Lorsque le code ci-dessus est exécuté, nous obtenons la sortie suivante.

Macro %END

Cette définition de macro contient une boucle %DO %WHILE qui se termine, au besoin, par une instruction %END. Dans l’exemple ci-dessous, la macro nommée test prend une entrée utilisateur et exécute la boucle DO en utilisant cette valeur d’entrée.La fin de la boucle DO est obtenue par l’instruction %end tandis que la fin de la macro est obtenue par l’instruction %mend.

%macro test(finish); %let i = 1; %do %while (&i <&finish); %put the value of i is &i; %let i=%eval(&i+1); %end;%mend test;%test(5)

Lorsque le code ci-dessus est exécuté, nous obtenons la sortie suivante.

Publicités

.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée.