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.
Avertissement important
Les codes et exemples fournis sur WeAreCAS.eu sont à but pédagogique. Il est impératif de ne pas les copier-coller aveuglément sur vos environnements de production. La meilleure approche consiste à comprendre la logique avant de l'appliquer. Nous vous recommandons vivement de tester ces scripts dans un environnement de test (Sandbox/Dev). WeAreCAS décline toute responsabilité quant aux éventuels impacts ou pertes de données sur vos systèmes.
SAS et tous les autres noms de produits ou de services de SAS Institute Inc. sont des marques déposées ou des marques de commerce de SAS Institute Inc. aux États-Unis et dans d'autres pays. ® indique un enregistrement aux États-Unis. WeAreCAS est un site communautaire indépendant et n'est pas affilié à SAS Institute Inc.
Ce site utilise des cookies techniques et analytiques pour améliorer votre expérience.
En savoir plus.