Publicado el :
Macro EXTERNA

Macro DBMSlist - Consulta de base de datos por lotes

Este código también está disponible en: Deutsch English Français
En espera de validación
Esta macro automatiza el proceso de 'chunking'. Primero, cuenta el número total de observaciones en el conjunto de datos de origen (`dsn`). Luego, itera por bloques (tamaño definido por `bitesize`). En cada iteración, crea una tabla temporal (`gwhxxxx2`), llama a dos macros externas (`%MakeList` para formatear la lista de valores, y `%RunQuery` para ejecutar la consulta SQL) y agrega los resultados en la tabla de destino (`newdsn`) a través de `PROC APPEND`. El script también gestiona un modo de prueba para ejecutar solo una iteración.
Análisis de datos

Type : EXTERNA


La macro espera un conjunto de datos de entrada a través del parámetro `dsn`. Genera tablas temporales (`gwhxxxx1` macro var, `gwhxxxx2`, `gwhxxxx3`) y una tabla final especificada por `newdsn`.

1 Bloque de código
PROC SQL
Explicación :
Cuenta el número total de registros en el conjunto de datos de origen para determinar el número de pasadas necesarias. Detiene la ejecución si la tabla está vacía.
¡Copiado!
1PROC SQL noprint;
2 select count(*) into :gwhxxxx1
3 from &dsn;
4QUIT;
5 
6%IF &gwhxxxx1=0 %THEN %DO;
7 %put ====== WARNING: INPUT DATA SET &dsn is empty, macro ends =======;
8 %goto exit;
9%END;
2 Bloque de código
DATA STEP Data
Explicación :
Bucle principal: calcula el número de pasadas, extrae un subconjunto de datos (chunk) en `gwhxxxx2` y llama a las macros auxiliares (no definidas aquí) `%MakeList` y `%RunQuery` para procesar este lote.
¡Copiado!
1%let totpass=%sysevalf(&gwhxxxx1/&bitesize, ceil);
2%IF &test=no %THEN %DO j=1 %to &gwhxxxx1 %BY &bitesize;
3 %let p=%sysevalf(&j/&bitesize, ceil);
4 %put ================= Starting pass &p of &totpass ==================;
5
6 DATA gwhxxxx2;
7 SET &dsn (firstobs=&j obs=%eval(&j+&bitesize-1));
8 RUN;
9 
10 %MakeList(mylist, gwhxxxx2, &column, &vtype);
11 %RunQuery(&dbname, gwhxxxx3, &query);
12 
13 /* ... Logique d'accumulation ... */
14%END;
3 Bloque de código
DATA STEP / PROC APPEND Data
Explicación :
Lógica de agregación: inicializa la tabla de salida (`newdsn`) en la primera iteración y agrega los resultados (`gwhxxxx3` devuelto por `%RunQuery`) en las iteraciones siguientes a través de `PROC APPEND`.
¡Copiado!
1%IF &j=1 %THEN %DO;
2 DATA &newdsn;
3 SET gwhxxxx3;
4 RUN;
5%END;
6%ELSE %DO;
7 PROC APPEND base=&newdsn DATA=gwhxxxx3;
8 RUN;
9%END;
Este material se proporciona "tal cual" por We Are Cas. No hay garantías, expresas o implícitas, en cuanto a la comerciabilidad o idoneidad para un propósito particular con respecto a los materiales o el código contenidos en este documento. We Are Cas no es responsable de los errores en este material tal como existe ahora o existirá, ni We Are Cas proporciona soporte técnico para el mismo.
Información de copyright : Garth W. Helf, 2001 "Can't Relate? A Primer on Using SAS With Your Relational Database", SUGI 27 Paper 155-27