Macro-fonctions

Les fonctions SAS usuelles ne sont pas accessibles dans le cadre d'un macro-programme. Il faut avoir recours aux macro-fonctions.

On peut retenir qu'en règle générale, préfixer un mot-clé ou une fonction SAS par le caractère % permet de trouver leur equivalent en macro-langage.

Macro-fonctions de manipulation de chaîne de caractères

%str()Masque les caractères spéciaux
%nrstr()Masque les caractères spéciaux, y compris % et &
%length()Retourne la longueur de l'argument
%index(), %scan(), %substr() et %upcase()fonctionnent comme leurs équivalents en langage SAS usuel (voir le paragraphe correspondant dans la partie "étape data").
%qscan(), %qsubstr() et %qupcasepermettent en outre d'ignorer les caractères réservés % et & (ils sont considérés comme des caractères normaux et donc non interprétés).

Macro-fonctions d'évaluation numérique

%eval() force la chaîne de caractères passée en argument à être interprétée comme une opération arithmétique à résultat entier.

Exemples :
%let un = 1 ;
%let deux = 2 ;
%eval (1+2) Retourne 3
%eval (&un+&deux) Retourne 3
%eval (&un*2) Retourne 2
%eval (&un/&deux) Retourne 0 = partie entière du résultat

%sysevalf() force la chaîne de caractères passée en argument à être interprétée comme une opération arithmétique. Un deuxième argument, facultatif, permet de convertir le résultat en entier ou en booléen.

Exemples :
%sysevalf (&un/&deux) Retourne 0,5
%sysevalf(5/2,floor) Retourne 2 = partie entière de 2,5
%let toto = %sysevalf(&un/&deux)+&un Affecte à la macro-variable toto le texte "0,5+1"
%sysevalf(&toto) Retourne 1,5 résultat de l'opération

La macro-fonction %sysfunc()

Plus généralement, toutes les fonctions SAS peuvent être utilisées dans un macro-programme à condition de passer leur appel en argument de la macro-fonction %sysfunc().

Exemples :
%upcase("toto") est équivalent à %sysfunc(upcase("toto")).
%sysfunc(int(ranuni(0)*100)) tire un entier entre 0 et 100.