Bonjour !
Je souhaite créer une macro variable ayant une autre macro variable en paramètre.
Voici le code et ce qu'il fait :
Mon problème vient du call symput.
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
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33 /* Création de la macro variable mv contenant la liste des noms de mes tables */ %let mv=; %MACRO liste_tab (var=); %let mv=%str(&mv.METHODO_&var/); %MEND ; %liste_tab (var=FRE_GAU_NB); %liste_tab (var=SOE_GAU_NB); %liste_tab (var=VAR1_TEST); %liste_tab (var=VAR2_TEST); %put &mv; /* Macro programme pour créer une macro variable par nom de table */ %MACRO test_liste; *%global mv nomTab test tab tab1 tab2 tab3 tab4 tab5 lng ; data _null_; %let i=0; %do %while (%length(&mv) NE 0) ; /* Tant que ma liste &mv n'est pas vide */ %let i = %eval(&i+1); /* Compteur i */ %let nomTab = %scan(&mv,1,'/'); /* &nomTab contient le nom de la 1ère table de la liste &mv */ call symput ("tab"!!left(&i),&nomTab); /* &&tab&i contiendra le nom récupéré par &nomTab */ %let lng = %length(&nomTab); /* Longueur du nom récupéré dans &nomTab */ %let mv = %substr(&mv,&lng.+2); /* Mise à jour de la liste &mv (j'en retire le nom de la table scanné par &nomTab) */ %end; run; %MEND ; %test_liste ;
A la fin de ma macro %test_liste, je devrais avoir :
&tab1 = FRE_GAU_NB
&tab2 = SOE_GAU_NB
&tab3 = VAR1_TEST
&tab4 = VAR2_TEST
Or, ces 4 macros programmes sont égales à un point.
Je ne comprends pas pourquoi mais le paramètre &nomTab dans le call symput bloque la création correcte de mes macros var. J'obtiens l'erreur suivante (au niveau du call):
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 call symput ("tab"!!left(&i),&nomTab); ---- 180 ERROR 180-322: Statement is not valid or it is used out of proper order.
J'ai essayé avec call symputx également, mais ce n'est pas mieux.
Si quelqu'un comprend l'erreur et a une idée de comment la régler, je suis intéressée !
Partager