SAS - Macros

SAS a une fonction de programmation puissante appelée Macrosce qui nous permet d'éviter les sections de code répétitives et de les utiliser encore et encore en cas de besoin. Cela permet également de créer des variables dynamiques dans le code qui peuvent prendre différentes valeurs 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 macro-variables. Nous verrons les deux dans les exemples ci-dessous.

Variables macro

Ce sont les variables qui contiennent une valeur à utiliser encore et encore par un programme SAS. Ils sont déclarés au début d'un programme SAS et rappelés ultérieurement dans le corps du programme. Ils peuvent avoir une portée globale ou locale.

Variable macro globale

Elles sont appelées variables macro globales car elles sont accessibles par n'importe quel programme SAS disponible dans l'environnement SAS. En général, ce sont les variables affectées par le système auxquelles accèdent plusieurs programmes. Un exemple général est la date système.

Exemple

Voici un exemple de la variable SAS appelée SYSDATE qui représente la date système. Envisagez un scénario pour 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 ne codions aucune valeur 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 macro locale

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

Syntaxe

Les variables locales sont décalé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 une variable SAS valide.

Exemple

Les variables sont utilisées par les instructions SAS 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». Au cas où nous voulons le résultat dedifferent make, nous devons changer la valeur de la variable make_namesans changer aucune autre partie du programme. En cas de programmes bring, cette variable peut être référencée encore et encore dans toutes les instructions 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 la même sortie que le programme précédent. Mais changeons letype name à 'Wagon'et exécutez le même programme. Nous obtiendrons le résultat ci-dessous.

Programmes de macros

Macro est un groupe d'instructions SAS référencées par un nom et permettant de l'utiliser dans un programme n'importe où, en utilisant ce nom. Il commence par une instruction% MACRO et se termine par une instruction% 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écale un groupe de staemnets SAT sous une macro nommée 'show_result'; Cette macro est appelée par d'autres instructions 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 a de nombreuses instructions MACRO qui sont intégrées dans le langage de programmation SAS. Ils sont utilisés par d'autres programmes SAS sans les déclarer explicitement. Les exemples courants sont - la fin d'un programme lorsqu'une condition est remplie ou la capture de la valeur d'exécution d'une variable dans le journal du programme. Voici quelques exemples.

Macro% PUT

Cette instruction macro écrit du texte ou des informations sur les variables macro dans le journal SAS. Dans l'exemple ci-dessous, la valeur de la variable «aujourd'hui» 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% RETOUR

L'exécution de cette macro entraîne l'arrêt normal de la macro en cours d'exécution lorsque certaines conditions sont évaluées comme vraies. Dans l'exemple ci-dessous, lorsque 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 un %DO %WHILEboucle qui se termine, selon les besoins, 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 via l'instruction% end tandis que la fin de la macro est atteinte via 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.