Die Namensliste abrufen: Verwenden Sie die Wörterbuchansichten (SASHELP.VTABLE), um automatisch alles aufzulisten, was sich in einer Bibliothek befindet.
Den Code dynamisch generieren: Verwenden Sie die Anweisung CALL EXECUTE in einem Data Step, um das Makro für jeden gefundenen Namen auszuführen.
2. Der Code Schritt für Schritt
Schritt 0: Das Verarbeitungs-Makro definieren
Dies ist der Code, den der Benutzer für eine einzelne Tabelle ausführen möchte.
%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 */
4
MERGE excelsheetdata datdir.&name;
5
BY ID;
6
RUN;
7
%mend jig;
3. Analyse der CALL EXECUTE Syntax
In der von WeAreCas vorgeschlagenen Lösung werden Sie eine etwas komplexe Syntax feststellen:
Erfordert Kenntnisse in SQL und Metaprogrammierung.
Der technische Tipp: Vergessen Sie nicht, dass für ein funktionierendes MERGE alle Ihre Tabellen (die 50!) zuvor nach der Schlüsselvariablen (ID) sortiert sein müssen. Ist dies nicht der Fall, müssen Sie eine PROC SORT in Ihr Makro %jig einfügen.
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;
Hinweis: SASHELP.VTABLE enthält die Metadaten aller aktiven Tabellen.
Note : Schritt 2: Die Automatisierung (CALL EXECUTE)
Hier geschieht die Magie. Wir durchlaufen die in Schritt 1 erstellte Liste, und für jede Zeile wird ein Textbefehl erstellt, der das Makro aufruft.
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;
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.