Bonjour,
J'essaie d'automatiser un code qui permet, à partir d'une liste de variable de faire différents calculs.

Dans mon cas:
La table Table_Com contient une colonne age (de 0 a 120), et une colonne lx_TD contenant des valeurs associées à chaque age.
Je crée 120 macros variables (lxtd1, lxtd2,...) à partir des 120 ages.
Je voudrais dans un array créer des nouvelles variables à partir de ces macros variables.
J'ai plusieurs calculs à faire plus ou moins simples à partir de ces 120 macros variables, par exemple je voudrais ensuite créer une variable qui dépend de deux indices différents:
qi=lxtd(i+1)/lxtdi. Voila pourquoi je voudrais passer par une boucle et non pas faire 120 cas pour chaque calcul.

Dans l'exemple qui suit j'essaie simplement d'attribuer à 120 nouvelles variables les 120 macros variables existantes, mais ça ne fonctionne pas.

Code SAS:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
data Table_Com;
set Table_Com;
call symput(COMPRESS("lxtd"!!age), lx_TD);
run;
 
 
%macro a();
data Table_test;
set Table;
array lx(120);
 
		%do i=1 %to 120;
		lx(i)=&&lxtd&i.;
		/*lx(i)=symget("lxtd"!!LEFT(&i.));*/
		%end;
 
run;
%mend;

Voila le message d'erreur:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
NOTE: Ligne générée par la variable macro "I".
1     &lxtd118.
      -
      386
       --------
       201
AVERTISSEMENT: Référence symbolique apparente LXTD118 non traitée.
NOTE: Ligne générée par la variable macro "I".
Pouvez m'aider ou m'indiquer quelques pistes s'il vous plaît?

Merci.