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.
%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 %qupcase | permettent 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). |
%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
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.