Macro-programmes et macro-variables

Syntaxe générale d'un macro-programme

Un macro-programme présente donc la syntaxe suivante :

%macro nom_de_la_macro (liste_arguments) ;

Blocs d'instructions

%mend ;

L'appel de la macro s'effectue alors comme suit :

%nom_de_la_macro (liste-arguments) ;

Appel d'une macro-variable

Les macros utilisent des macro-variables.
Une macro-variable n'est pas inféodée à une table.
Soit x une macro-variable. Le contenu de x est récupéré en écrivant : &x.
Le point peut être omis s'il n'y a pas d'ambiguité.

Supposons que l'on ait dix macro-variables mv1, mv2,... mv10 et que l'on veuille effectuer le même traitement sur les 10. On voudrait pouvoir faire une boucle finie, et donc pouvoir appeler les différents mvi. Mais dans ce contexte, i est aussi une macro-variable !
Quelles sont les possibilités ?
&mvi. Appelle la macro-variable de nom mvi, qui n'existe pas.
&mv.i Si la macro-variable mv existait, par exemple valant toto, écrire &mv.i reviendrait à écrire totoi.
&mv&i. Le &i. permet bien de récupérer la valeur de i ; mais le &mv renvoie à une macro-variable mv qui n'existe pas.
La solution est : &&mv&i.

Les macro-variables contiennent du texte

Une macro-variable est toujours et partout une chaîne de caractères.

Si l'on souhaite utiliser sa valeur numérique (à supposer qu'il s'agisse d'une variable à caractère numérique), il faudra forcer l'interprétation en ayant recours à des macro-fonctions d'évaluation des nombres.
Parmi ces macro-fonctions, on retiendra :
%eval() qui permet d'interpréter la chaîne de caractères comme un entier.
%sysevalf() qui permet d'interpréter la chaîne de caractères comme un nombre réel.
Ces deux macro-fonctions sont détaillées dans le paragraphe "les macro-fonctions".

Déclaration et affectation d'une macro-variable

Les macro-variables sont :

Dans ce dernier cas, il existe une instruction réservée à la déclaration et à l'affectation simultanées d'une macro-variable : %let.
La syntaxe est la suivante :

%let ma_macro_variable = mon_texte ;

Exemple :
%let toto = je m'appelle toto ;
%let titi = 2 ;

Les macro-variables système

Voici quelques exemples parmi les variables système les plus utiles :

SysdateDate et heure courante
SyslastNom de la dernière table utilisée
SyserrCode du type d'erreur rencontré
Syslibrc0 si le libname s'est bien exécuté
SysverVersion de SAS utilisée