Bonjour à toutes et à tous,
Je n'arrive pas à récupérer le retour d'un macroprogramme dans une macrovariable.
Je souhaite la liste de toutes les tables qui commencent par la chaine "TFU_DATE_VJ0_". Après le dernier underscore j'ai un nombre, éventuellement composé de plusieurs chiffres.
J'ai donc écrit la macro suivante (à qui je fournis le modèle du nom des tables qui m'intéressent) :
(J'ai aussi essayé de supprimer les guillemets autour de &NomListe. dans la dernière instruction avant le %MEND ; mais ça ne change rien au résultat.)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 %MACRO ListeTable(NomTable); %LET Nom = %SYSFUNC(TRANWRD(&NomTable.,_,\_)); %LET Nom1 = %SYSFUNC(CAT(&Nom.,\_%)); PROC SQL NOPRINT ; SELECT CATT("Db.",MEMNAME," (IN=dans",MEMNAME,")") INTO :NomListe SEPARATED BY ' ' FROM SASHELP.VSTABLE WHERE libname = upcase("DB") AND MEMNAME LIKE upcase("&Nom1.") ESCAPE "\"; QUIT ; "&NomListe"; %MEND ListeTable;
La liste des tables est stockée dans la macrovariable &NomListe. Pour écrire ce code je me suis appuyé sur le faq, notamment la question suivante :
http://sas.developpez.com/faq/sas/?p...-macrovariable
Ensuite dans un autre macroprogramme, j'ai écrit :
Le résultat est le suivant :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 %LET ListeTableVJ0 = %ListeTable(TFU_DATE_VJ0); %PUT VJ0 &ListeTableVJ0.;
VJ0 PROC SQL NOPRINT ; SELECT CATT("Db.",MEMNAME," (IN=dans",MEMNAME,")") INTO :NomListe SEPARATED BY ' ' FROM SASHELP.VSTABLE
WHERE libname = upcase("DB") AND MEMNAME LIKE upcase("TFU\_DATE\_VJ0\_%") ESCAPE "\"; QUIT ; "&NomListe";
Il recopie tout le contenu du macroprogramme %ListeTable sans me donner le résultat du PROC SQL.
J'ai beau chercher, je coince... Avez-vous une idée pour que ça marche enfin ? Merci d'avance !
Bonne journée
Laurent
Partager