Todos los datos utilizados en este script se generan internamente o se crean dinámicamente. El programa `testprog` se escribe en un archivo temporal. El conjunto de datos `work.inputjobs` se crea a través de un paso DATA en el script. Las salidas (`work.results`, `myjoblog`) también son productos de la ejecución interna del script.
1 Bloque de código
DATA STEP Data
Explicación : Este bloque crea un archivo SAS temporal llamado `testprog` y escribe un programa SAS en él. Este programa interno es un simple paso DATA que genera números aleatorios y observaciones basadas en macro-variables (`¯ovar1`, `¯ovar2`) e información de contexto (`&_program`, `&flow_id`). El archivo `testprog` servirá como fuente de código para los jobs SAS definidos posteriormente, permitiendo una ejecución parametrizable y reutilizable.
¡Copiado!
filename testprog temp;
data _null_;
file testprog;
put '%put this is job: &_program;'
/ '%put this was run in flow &flow_id;'
/ 'data ;'
/ ' rval=rand("uniform");'
/ ' rand=rval*¯ovar1;'
/ ' do x=1 to rand;'
/ ' y=rand*¯ovar2;'
/ ' output;'
/ ' end;'
/ 'run;'
;
run;
1
filename testprog temp;
2
DATA _null_;
3
file testprog;
4
put '%put this is job: &_program;'
5
/ '%put this was run in flow &flow_id;'
6
/ 'data ;'
7
/ ' rval=rand("uniform");'
8
/ ' rand=rval*¯ovar1;'
9
/ ' do x=1 to rand;'
10
/ ' y=rand*¯ovar2;'
11
/ ' output;'
12
/ ' end;'
13
/ 'run;'
14
;
15
RUN;
2 Bloque de código
Macro mv_createjob
Explicación : Estas dos llamadas a la macro `%mv_createjob` registran los programas SAS en `testprog` como dos jobs ejecutables distintos, llamados `demo1` y `demo2`, en la ruta `/Public/temp`. Este paso es crucial para preparar las tareas que serán orquestadas posteriormente por la macro `mv_jobflow`. Estos jobs están ahora listos para ser referenciados y ejecutados dentro de un flujo de trabajo.
Explicación : Este paso DATA construye el conjunto de datos `work.inputjobs`, que es la fuente de entrada para la macro `%mv_jobflow`. Define un contexto de ejecución ('SAS Job Execution compute context') y especifica los detalles para varias ejecuciones de los jobs `demo1` y `demo2` dentro de dos flujos (`flow_id` 1 y 2). Para cada job, se definen diferentes valores de `macrovar1` y `macrovar2`, parametrizando así las ejecuciones individuales de los jobs en el flujo.
¡Copiado!
data work.inputjobs;
_contextName='SAS Job Execution compute context';
do flow_id=1 to 2;
do i=1 to 4;
_program='/Public/temp/demo1';
macrovar1=10*i;
macrovar2=4*i;
output;
i+1;
_program='/Public/temp/demo2';
macrovar1=40*i;
macrovar2=44*i;
output;
end;
end;
run;
1
DATA work.inputjobs;
2
_contextName='SAS Job Execution compute context';
3
DO flow_id=1 to 2;
4
DO i=1 to 4;
5
_program='/Public/temp/demo1';
6
macrovar1=10*i;
7
macrovar2=4*i;
8
OUTPUT;
9
i+1;
10
_program='/Public/temp/demo2';
11
macrovar1=40*i;
12
macrovar2=44*i;
13
OUTPUT;
14
END;
15
END;
16
RUN;
4 Bloque de código
Macro mv_jobflow
Explicación : Este bloque es el paso de ejecución principal del flujo de trabajo. La macro `%mv_jobflow` se llama con `work.inputjobs` como fuente de las definiciones de tareas. Se configura para ejecutar los jobs con un máximo de 2 jobs concurrentes (`maxconcurrency=2`), almacenar los resultados en el conjunto de datos `work.results`, y generar un archivo de log detallado llamado `myjoblog`. La opción `raise_err=1` está activada para que cualquier error de job sea reportado por el código de retorno del sistema. Los mensajes `%put` muestran el valor de `syscc` antes y después de la ejecución del flujo.
Explicación : Este paso DATA lee el contenido del archivo `myjoblog`, que es generado por la macro `%mv_jobflow` y contiene los detalles de la ejecución del flujo de jobs (estado, errores, etc.). Luego muestra cada línea de este archivo directamente en el log SAS. Esto permite una inspección post-ejecución completa del desarrollo y los resultados del flujo de trabajo.
¡Copiado!
data _null_;
infile myjoblog;
input; put _infile_;
run;
1
DATA _null_;
2
INFILE myjoblog;
3
INPUT; put _infile_;
4
RUN;
6 Bloque de código
Macro mp_assert
Explicación : Este bloque utiliza la macro `%mp_assert` para realizar una verificación post-ejecución. Evalúa la condición `&syscc eq 0`, lo que significa que el código de retorno del sistema debe ser cero, indicando que todo el flujo de jobs se ejecutó sin errores. El parámetro `desc` proporciona una descripción textual de la aserción, útil para la depuración y el reporte de pruebas.
¡Copiado!
%mp_assert(
iftrue=(&syscc eq 0),
desc=Check that a zero return code is returned if no called job fails
)
1
%mp_assert(
2
iftrue=(&syscc eq 0),
3
desc=Check that a zero return code is returned IF no called job fails
4
)
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.