Los datos se generan completamente internamente. Un programa SAS temporal se crea dinámicamente utilizando un DATA STEP `_null_` que escribe en un `filename temp`. Los parámetros de entrada para el flujo de trabajos (`work.inputjobs`) también se crean mediante un DATA STEP explícito. No se lee directamente ningún archivo externo ni dataset SASHELP para los datos principales del script.
1 Bloque de código
DATA STEP Data
Explicación : Este bloque SAS crea un archivo temporal llamado `testprog` y escribe un programa SAS en él. Este programa está diseñado para simular una tarea de negocio que utiliza variables macro `&_program`, `&flow_id`, `¯ovar1` y `¯ovar2`. Incluye una lógica condicional donde `abort` se dispara si un valor aleatorio (`rand("uniform")`) es mayor que 0.50, simulando así un fallo de trabajo. El programa también genera un dataset anónimo que contiene variables calculadas (`rval`, `rand`, `y`).
¡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;'
/ ' if (rval>0.50) then abort;'
/ ' 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
/ ' if (rval>0.50) then abort;'
12
/ ' end;'
13
/ 'run;'
14
;
15
RUN;
2 Bloque de código
MACRO CALL (mv_createjob)
Explicación : Llama a la macro `%mv_createjob` para crear un trabajo llamado 'demo1'. Este trabajo se guarda en la ruta '/Public/temp' (probablemente una carpeta en una CASLIB) y utiliza el código SAS generado en el archivo temporal `testprog` como fuente. Esta macro prepara el trabajo para una ejecución posterior en un flujo de trabajos en el entorno SAS Viya.
Explicación : Vuelve a llamar a la macro `%mv_createjob` para crear un segundo trabajo llamado 'demo2', utilizando también el mismo código fuente (`testprog`) y la misma ruta de guardado que el trabajo 'demo1'. Esto configura dos trabajos independientes que serán gestionados por el mismo flujo de ejecución.
Explicación : Este DATA STEP crea el conjunto de datos `work.inputjobs`. Este dataset sirve como tablero de control para el flujo de trabajos, especificando los parámetros de ejecución para cada instancia de trabajo. Define el `_contextName` como 'SAS Job Execution compute context', itera sobre dos `flow_id` distintos y, para cada `flow_id`, prepara ejecuciones para 'demo1' y 'demo2' con diferentes valores para `macrovar1` y `macrovar2`. Esto permite probar el comportamiento de los trabajos con diversas entradas y simular varias ejecuciones.
¡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;
5 Bloque de código
MACRO CALL (%put)
¡Copiado!
%put NOTE: &=syscc;
1
%put NOTE: &=syscc;
6 Bloque de código
MACRO CALL (mv_jobflow)
Explicación : Llama a la macro `%mv_jobflow` para ejecutar los trabajos definidos. Toma `work.inputjobs` como dataset de entrada (`inds`), limita la concurrencia a 2 trabajos en paralelo (`maxconcurrency=2`), guarda los resultados en `work.results` (`outds`) y la información del log en un fileref `myjoblog` (`outref`). La opción `raise_err=1` es crucial porque asegura que los errores que ocurren en los trabajos ejecutados se reflejan en el `SYSCC` del proceso que llama, permitiendo una gestión centralizada de errores. `mdebug=1` activa el modo de depuración para la macro, proporcionando información detallada en el log.
Explicación : Este DATA STEP lee el contenido del archivo referenciado por `myjoblog` (que ha sido rellenado por la macro `%mv_jobflow` y contiene el log consolidado del flujo de trabajos) e imprime cada línea (`_infile_`) en el log SAS. Es un paso esencial de depuración y verificación para examinar los mensajes y estados generados por los trabajos ejecutados en el flujo.
¡Copiado!
data _null_;
infile myjoblog;
input; put _infile_;
run;
1
DATA _null_;
2
INFILE myjoblog;
3
INPUT; put _infile_;
4
RUN;
9 Bloque de código
MACRO CALL (mp_assert)
¡Copiado!
%mp_assert(
iftrue=(&syscc ne 0),
desc=Check that non zero return code is returned if called job fails
)
1
%mp_assert(
2
iftrue=(&syscc ne 0),
3
desc=Check that non zero return code is returned IF called job fails
4
)
10 Bloque de código
MACRO CALL (%let)
¡Copiado!
%let syscc=0;
1
%let syscc=0;
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.