Poder seguir la ejecución de un programa que contiene varios procedimientos puede volverse desesperante. Porque la información de lo que está sucediendo mientras se está procesando es mínima.
Es por eso que este programa presenta varias alternativas para poder hacer un seguimiento que nos permita obtener detalles de la ejecución en forma continua.
/****************************************************************************/
/* SYSECHO se utiliza para agregar una descripción durante la ejecución de */
/* un procedimiento. De esta forma es más simple identificar en qué etapa */
/* de la ejecución se encuentra el programa. */
/* SLEEP se utiliza para suspender la ejecución de un programa por un */
/* periodo de tiempo especificado. */
/* PUTLOG sirve para poder escribir en el Log. */
/* DOSUBL se utiliza para habilitar la ejecución inmediata del código */
/* después de pasarle una cadena de texto. */
/* */
/* Ejemplos utilizando el Paso Data y también el Proc SQL. */
/****************************************************************************/
/****************************************************************************/
/* */
/* IMPORTANTE 1: para poder apreciar cómo funcionan los ejemplos es */
/* necesario */
/* ('Task status'), que está disponible SOLAMENTE en Enterprise Guide. */
/* En Enterprise Guide 7.1x: tener abierta la ventana 'Estado de */
/* las tareas' (' Task status'). */ */
/* En Enterprise Guide 8.x: tener abierta la ventana 'Estado de */
/* procesamiento' (' Task status'). */
/* SUGERENCIA 1: en los Ejemplos 1 y 3 es altamente recomendable ver la */
/* ventana del Log mientras el programa se está ejecutando. */
/* */
/* SUGERENCIA 2: es recomendable correr los ejemplos con las sentencias que */
/* incluyen SYSECHO sin comentar y después comentadas. Siempre con la */
/* ventana 'Estado de procesamiento' abierta. */
/* De esta forma se aprecia mejor la diferencia al usar SYSECHO. */
/* */
/****************************************************************************/
/*-------------------*/
/* inicio del código */
/*-------------------*/
/*--------------------------------------------------*/
/* Ejemplo 1 (elemental): Utilizando el Paso Data */
/*--------------------------------------------------*/
/*-------------------*/
/* inicio Ejemplo 1 */
/*-------------------*/
DATA class (keep=name age);
Sysecho 'Etapa 1: Extrayendo nombre y edad de alumnos'; /* únicamente una sentencia SYSECHO para cada
Paso Data */
Set sashelp.class;
x = sleep(2,1); /* 1-->segundos 2-->cada dos unidades (en este caso segundos) */
putlog name age; /* escribe los valores de las variables 'name' y 'age' en el Log */
RUN;
data cars (keep=make model);
Sysecho "Etapa 2: Extrayendo marca y modelo de autos"; /* únicamente una sentencia SYSECHO para cada
Paso Data */
Set sashelp.cars;
x = sleep(5,0.1); /* 0.1-->décimas de segundo 5-->cada cinco unidades (en este caso décimas de
segundo) */
putlog make model; /* escribe los valores de las variables 'make' y 'model' en el Log */
run;
/*-------------------*/
/* fin Ejemplo 1 */
/*-------------------*/
/*-----------------------------------------------------*/
/* Ejemplo 2: Utilizando el Proc SQL */
/*-----------------------------------------------------*/
/*-----------------------*/
/* inicio Ejemplo 2 */
/*-----------------------*/
proc sql;
sysecho "Crea la primera tabla: Edad_mayor_14"; /* varias sentencias SYSECHO en un mismo Proc SQL */
create table Edad_mayor_14 as
select name, age, sex,
(sleep(1,1)) as demora /* Calcula la variable 'demora' utilizando la función Sleep */
from sashelp.class
where age>14;
sysecho "Crea la segunda tabla: Edad_mayor_14_Genero_M"; /* varias sentencias SYSECHO en un mismo
Proc SQL */
create table Edad_mayor_14_Genero_M as
select name, age, sex,
(sleep(1,1)) AS demora /* Calcula la variable 'demora' utilizando la función Sleep */
from sashelp.class
where sex="M" and age>14;
quit;
/*-------------------*/
/* fin Ejemplo 2 */
/*-------------------*/
/*--------------------------------------------------*/
/* Ejemplo 3 (avanzado): Utilizando el Paso Data */
/*--------------------------------------------------*/
/*--------------------------------------------------------------*/
/* Este ejemplo utiliza el Paso Data y 'Libname.. pcfiles..' */
/* para escribir en un archivo Excel */
/*--------------------------------------------------------------*/
/*--------------------------------------------------------------------------*/
/* NOTA IMPORTANTE: si prueba este código varias veces es */
/* posible que necesite cerrar y borrar el archivo 'autos.xlsx'. */
/* Si necesita cerrarlo, debe correr la sentencia 'libname prueba clear;' */
/* Si necesita borrarlo, hágalo directamente desde el Explorador de Windows */
/*--------------------------------------------------------------------------*/
/*-------------------*/
/* inicio Ejemplo 3 */
/*-------------------*/
libname prueba pcfiles path="Z:\Shared\autos.xlsx"; /* crea o abre el archivo 'autos.xlsx' para editarlo */
data prueba.USA prueba.Europe prueba.Asia prueba.ERROR;
set sashelp.cars;
putlog _N_ origin; /* escribe el número de fila (es decir el caso) y el valor de la
variable 'origin' en el Log */
select(origin);
when ('USA')
DO;
output prueba.USA;
rc=Dosubl('Sysecho "Envía caso a la hoja USA";'); /* no funciona escribir varias
sentencias SYSECHO en el
Paso Data, ya que se resuelve
en la etapa de compilación,
por lo que solamente la última
sentencia SYSECHO sería la que
funcionaría. Hacer la prueba eliminando los 'rc=Dosubl' dejando solamente SYSECHO y
ver el resultado */
x = sleep(1,0.1); /* 0.1-->décimas de segundo 1-->cada una unidad (en este caso
décimas de segundo) */
END;
when ('Europe')
DO;
output prueba.Europe;
rc=Dosubl('Sysecho "Envía a la hoja Europe";'); /* la función Dosubl resuelve en
tiempo de ejecución, no de compilación! Es por esta razón que el ejemplo funciona bien cuando procesa los datos de la tabla */
x = sleep(1,0.1); /* las unidades (el segundo argumento) son múltiplos de segundo
por diez; entonces '(..,0.01)' son centésimas de segundo, o '(..,100') son cien segundos */
END;
when ('Asia')
DO;
output prueba.Asia;
rc=Dosubl('Sysecho "Envía a la hoja Asia";'); /* la función Dosubl funciona en
combinación con 'rc' (Return Code) */
x = sleep(1,0.1);
END;
otherwise
DO;
output prueba.ERROR;
rc=Dosubl('Sysecho "Envía a la hoja ERROR";');
x = sleep(1,0.1);
END;
end;
run;
libname prueba clear; /* cierra el archivo 'autos.xlsx' */
/*-------------------*/
/* fin Ejemplo 3 */
/*-------------------*/
/*-------------------*/
/* fin del código */
/*-------------------*/
Build your skills. Make connections. Enjoy creative freedom. Maybe change the world. Registration is now open through August 30th. Visit the SAS Hackathon homepage.
Register today!
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.