La macro `%mp_testjob` está diseñada para probar el rendimiento o mantener una sesión activa. Inicializa una biblioteca temporal en WORK y luego entra en un bucle condicionado por la duración de ejecución deseada (parámetro `duration`). En cada iteración, genera un conjunto de datos voluminoso (1 millón de observaciones) con valores aleatorios, lo agrega a través de PROC SUMMARY, lo enriquece a través de PROC SQL y lo ordena a través de PROC SORT. Incluye una pausa de 5 segundos entre ciclos. Finalmente, limpia los conjuntos de datos y libera la biblioteca.
Análisis de datos
Type : CREATION_INTERNE
Los datos se generan algorítmicamente (función `ranuni`) dentro de la macro. Sin dependencias de datos externas.
1 Bloque de código
Macro Variable
Explicación : Inicialización del cronómetro y creación de un espacio de trabajo temporal (carpeta y libref) único para aislar los datos de la prueba.
¡Copiado!
%let start_tm=%sysfunc(datetime());
%let duration=%sysevalf(&duration);
/* create a temporary library in WORK */
%let lib=%mf_getuniquelibref();
%let dir=%mf_getuniquename();
%mf_mkdir(%sysfunc(pathname(work))/&dir)
libname &lib "%sysfunc(pathname(work))/&dir";
1
%let start_tm=%sysfunc(datetime());
2
%let duration=%sysevalf(&duration);
3
4
/* create a temporary library in WORK */
5
%let lib=%mf_getuniquelibref();
6
%let dir=%mf_getuniquename();
7
%mf_mkdir(%sysfunc(pathname(work))/&dir)
8
LIBNAME &lib "%sysfunc(pathname(work))/&dir";
2 Bloque de código
DATA STEP Data
Explicación : Generación de un conjunto de datos voluminoso (1M de líneas) que contiene números aleatorios y una cadena de caracteres repetida, sin compresión para maximizar la E/S.
¡Copiado!
data &lib..&ds1(compress=no );
do x=1 to 1000000;
randnum0=ranuni(0)*3;
randnum1=ranuni(0)*2;
bigchar=repeat('A',300);
output;
end;
run;
1
DATA &lib..&ds1(compress=no );
2
DO x=1 to 1000000;
3
randnum0=ranuni(0)*3;
4
randnum1=ranuni(0)*2;
5
bigchar=repeat('A',300);
6
OUTPUT;
7
END;
8
RUN;
3 Bloque de código
PROC SUMMARY Data
Explicación : Ejecución de un procedimiento de estadística descriptiva para consumir CPU y memoria en los datos generados.
¡Copiado!
proc summary ;
class randnum0 randnum1;
output out=&lib..&ds2;
run;quit;
1
PROC SUMMARY ;
2
class randnum0 randnum1;
3
OUTPUT out=&lib..&ds2;
4
RUN;QUIT;
4 Bloque de código
PROC SQL Data
Explicación : Uso de SQL para crear una nueva tabla ordenada con una columna calculada adicional, probando el rendimiento del motor SQL.
¡Copiado!
proc sql;
create table &lib..&ds3 as
select *, ranuni(0)*10 as randnum2
from &lib..&ds1
order by randnum1;
quit;
1
PROC SQL;
2
create TABLE &lib..&ds3 as
3
select *, ranuni(0)*10 as randnum2
4
from &lib..&ds1
5
order BY randnum1;
6
QUIT;
5 Bloque de código
PROC SORT
Explicación : Ordenación del conjunto de datos resultante para probar el rendimiento de la ordenación (E/S intensiva).
¡Copiado!
proc sort data=&lib..&ds3;
by descending x;
run;
1
PROC SORTDATA=&lib..&ds3;
2
BY descending x;
3
RUN;
6 Bloque de código
DATA STEP
Explicación : Pausa de 5 segundos en la ejecución para simular un tiempo de espera o reducir la presión continua sobre el sistema.
¡Copiado!
data _null_;
call sleep(5,1);
run;
1
DATA _null_;
2
call sleep(5,1);
3
RUN;
7 Bloque de código
PROC DATASETS
Explicación : Limpieza final: eliminación de todas las tablas creadas en la biblioteca temporal y liberación de la asignación de la biblioteca.
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.
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.