Récupérer la liste des noms : Utiliser les vues dictionnaires (SASHELP.VTABLE) pour lister automatiquement tout ce qui se trouve dans une bibliothèque.
Générer le code dynamiquement : Utiliser l'instruction CALL EXECUTE dans un Data Step pour lancer la macro pour chaque nom trouvé.
2. Le Code Pas à Pas
Étape 0 : Définir la Macro de traitement
C'est le code que l'utilisateur veut exécuter pour une seule table.
%macro jig(name);
data datdir.NEW_&name;
/* Attention : les deux tables doivent être triées par ID au préalable */
merge excelsheetdata datdir.&name;
by ID;
run;
%mend jig;
1
%macro jig(name);
2
DATA datdir.NEW_&name;
3
/* Attention : les deux tables doivent être triées par ID au préalable */
proc sql;
create table liste_tables as
select memname
from sashelp.vtable
where libname='DATDIR' /* Nom de la lib en MAJUSCULES */
and memname like 'DATA_%'; /* Filtre optionnel si besoin */
quit;
1
PROC SQL;
2
create TABLE liste_tables as
3
select memname
4
from sashelp.vtable
5
where LIBNAME='DATDIR'/* Nom de la lib en MAJUSCULES */
6
and memname like 'DATA_%'; /* Filtre optionnel si besoin */
7
QUIT;
Note : SASHELP.VTABLE contient les métadonnées de toutes les tables actives (nom, nombre d'observations, date de création, etc.).
Étape 2 : L'automatisation (CALL EXECUTE)
C'est ici que la magie opère. On parcourt la liste créée à l'étape 1, et pour chaque ligne, on construit une commande textuelle qui appelle la macro.
data _null_;
set liste_tables;
/* Construction de la chaîne : '%jig(TABLE_1)' */
/* On utilise STRIP pour enlever les espaces inutiles du nom */
commande = '%jig(' || strip(memname) || ')';
/* Exécution immédiate de cette commande */
call execute(commande);
run;
1
DATA _null_;
2
SET liste_tables;
3
4
/* Construction de la chaîne : '%jig(TABLE_1)' */
5
/* On utilise STRIP pour enlever les espaces inutiles du nom */
6
commande = '%jig(' || strip(memname) || ')';
7
8
/* Exécution immédiate de cette commande */
9
call execute(commande);
10
RUN;
3. Analyse de la syntaxe CALL EXECUTE
Dans la solution proposée par WeAreCas, vous noterez une syntaxe un peu complexe :
Ne fonctionne pas pour un MERGE complexe (jointure).
Dictionnaires + Call Execute
Entièrement automatique, flexible.
Demande de connaître SQL et la méta-programmation.
N'oubliez pas que pour qu'un MERGE fonctionne, toutes vos tables (les 50 !) doivent être préalablement triées par la variable clé (ID). Si ce n'est pas le cas, vous devrez ajouter une PROC SORT à l'intérieur de votre macro %jig avant l'étape Data.
Aviso importante
Los códigos y ejemplos proporcionados en WeAreCAS.eu son con fines educativos. Es imperativo no copiarlos y pegarlos ciegamente en sus entornos de producción. El mejor enfoque es comprender la lógica antes de aplicarla. Recomendamos encarecidamente probar estos scripts en un entorno de prueba (Sandbox/Dev). WeAreCAS no acepta ninguna responsabilidad por cualquier impacto o pérdida de datos en sus sistemas.
SAS y todos los demás nombres de productos o servicios de SAS Institute Inc. son marcas registradas o marcas comerciales de SAS Institute Inc. en los EE. UU. y otros países. ® indica registro en los EE. UU. WeAreCAS es un sitio comunitario independiente y no está afiliado a SAS Institute Inc.
Este sitio utiliza cookies técnicas y analíticas para mejorar su experiencia.
Saber más.