Un macro-programme présente donc la syntaxe suivante :
L'appel de la macro s'effectue alors comme suit :
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.
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".
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 :
Exemple :
%let toto = je m'appelle toto ;
%let titi = 2 ;
Voici quelques exemples parmi les variables système les plus utiles :
Sysdate | Date et heure courante |
Syslast | Nom de la dernière table utilisée |
Syserr | Code du type d'erreur rencontré |
Syslibrc | 0 si le libname s'est bien exécuté |
Sysver | Version de SAS utilisée |