logo

Macro : Incrémenter une macro-variable

J’ai une macro-variable i à laquelle je voudrais ajouter 1. Quand j’écris %let i=&i+1 ; je n’obtiens pas le résultat recherché (j’ai 3+1 comme valeur de i au lieu de 4). Que faire ?

Il ne faut pas perdre de vue qu’une macro-variable ne contient jamais QUE DU TEXTE. Alors quand on dit à SAS quelque chose comme %let i = &i + 1 ; pour lui ce ne sont que les caractères ‘+’ et ‘1’ ajoutés à la fin d’une chaîne de caractères.
Aussi, pour le forcer à faire les opérations, il existe deux fonctions : %EVAL et %SYSEVALF. La première ne travaille que sur des entiers, et renvoie des résultats entiers. C’est pour cela que la seconde existe, elle travaille sur les nombres réels (à virgule).

Pour juste incrémenter un compteur, la première suffit largement.

%let i = %eval (&i + 1) ;