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!
proc sql noprint;
select count(*) into :gwhxxxx1
from &dsn;
quit;
%if &gwhxxxx1=0 %then %do;
%put ====== WARNING: Input data set &dsn is empty, macro ends =======;
%goto exit;
%end;
1
PROC SQL noprint;
2
select count(*) into :gwhxxxx1
3
from &dsn;
4
QUIT;
5
6
%IF &gwhxxxx1=0 %THEN %DO;
7
%put ====== WARNING: INPUTDATASET &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.
%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!
%if &j=1 %then %do;
data &newdsn;
set gwhxxxx3;
run;
%end;
%else %do;
Proc append base=&newdsn data=gwhxxxx3;
run;
%end;
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
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.