Recuperar la lista de nombres: Utilizar las vistas de diccionario (SASHELP.VTABLE) para listar automticamente todo lo que se encuentra en una biblioteca.
Generar el cdigo dinmicamente: Utilizar la instruccin CALL EXECUTE en un Paso de Datos para lanzar la macro para cada nombre encontrado.
2. El Cdigo Paso a Paso
Paso 0: Definir la Macro de procesamiento
Este es el cdigo que el usuario quiere ejecutar para una sola tabla.
%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;
Nota: SASHELP.VTABLE contiene los metadatos de todas las tablas activas (nombre, nmero de observaciones, fecha de creacin, etc.).
Paso 2: La automatizacin (CALL EXECUTE)
Aqu es donde ocurre la magia. Recorremos la lista creada en el paso 1, y para cada fila, construimos un comando de texto que llama a 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. Anlisis de la sintaxis CALL EXECUTE
En la solucin propuesta por WeAreCas, notars una sintaxis un poco compleja:
No olvide que para que un MERGE funcione, todas sus tablas (las 50!) deben estar previamente ordenadas por la variable clave (ID). Si no es as, deber aadir un PROC SORT dentro de su macro %jig antes del paso de Datos.
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.