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.
Note : É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)' */
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
commande = '%jig(' || strip(memname) || ')';
6
7
/* Exécution immédiate de cette commande */
8
call execute(commande);
9
RUN;
3. Analyse de la syntaxe CALL EXECUTE
Dans la solution proposée par WeAreCas, vous noterez une syntaxe un peu complexe :
Demande de connaître SQL et la méta-programmation.
Le conseil technique : 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.
Wichtiger Haftungsausschluss
Die auf WeAreCAS.eu bereitgestellten Codes und Beispiele dienen Lehrzwecken. Es ist zwingend erforderlich, sie nicht blind in Ihre Produktionsumgebungen zu kopieren. Der beste Ansatz besteht darin, die Logik zu verstehen, bevor sie angewendet wird. Wir empfehlen dringend, diese Skripte in einer Testumgebung (Sandbox/Dev) zu testen. WeAreCAS übernimmt keine Verantwortung für mögliche Auswirkungen oder Datenverluste auf Ihren Systemen.
SAS und alle anderen Produkt- oder Dienstleistungsnamen von SAS Institute Inc. sind eingetragene Marken oder Marken von SAS Institute Inc. in den USA und anderen Ländern. ® zeigt die Registrierung in den USA an. WeAreCAS ist eine unabhängige Community-Site und nicht mit SAS Institute Inc. verbunden.
Diese Website verwendet technische und analytische Cookies, um Ihre Erfahrung zu verbessern.
Mehr erfahren.