BookmarkSubscribeRSS Feed
Tip Semanal 011: Uso de Sysecho + Sleep + Putlog + Dosubl
Berenice25
SAS Employee

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    */
/*-------------------*/

Ready to join fellow brilliant minds for the SAS Hackathon?

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!
Article Labels
Contributors