Créer une macro variable à partir d'une macro variable
Bonjour !
Je souhaite créer une macro variable ayant une autre macro variable en paramètre.
Voici le code et ce qu'il fait :
Code:
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 ; |
Mon problème vient du call symput.
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:
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 ! :)