Recuperar la lista de nombres: Usar las vistas de diccionario (SASHELP.VTABLE) para listar automáticamente todo lo que se encuentra en una biblioteca.
Generar el código dinámicamente: Usar la instrucción CALL EXECUTE en un Data Step para ejecutar la macro para cada nombre encontrado.
2. El Código Paso a Paso
Paso 0: Definir la Macro de procesamiento
Este es el código 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.
Note : Paso 2: La automatización (CALL EXECUTE)
Aquí es donde ocurre la magia. Recorremos la lista creada en el paso 1, y para cada línea, construimos un comando textual que llama a 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. Análisis de la sintaxis CALL EXECUTE
En la solución propuesta por WeAreCas, notará una sintaxis un tanto compleja:
El consejo técnico: No olvide que para que un MERGE funcione, todas sus tablas (¡las 50!) deben estar previamente ordenadas por la variable clave (ID). Si este no es el caso, deberá agregar un PROC SORT dentro de su macro %jig.
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.