El siguiente Tip permite ver la diferencia en el uso de 'put' y de '%put' para escribir información en el Log.
Además, presenta una característica especial en el uso de '%put' para escribir Notas, Warnings y Errores
Por último, al utilizar '%put' estamos pensando en el lenguaje de macros de SAS. Lo que nos sirve como excusa para poder hablar un poquito de las 2 etapas del procesamiento del Paso Data (Data Step).
/****************************************************************************/
/* Utilizaremos el mismo programa como base 3 veces, comentando sentencias */
/* para ver los diferentes resultados. */
/****************************************************************************/
/****************************************************************************/
/* Hay que tener en cuenta que el programa genera una tabla de salida, pero */
/* esto no es lo importante. Lo importante es mirar el Log! */
/****************************************************************************/
/*-------------------*/
/* inicio del código */
/*-------------------*/
/********************************************************************/
/* Crea una tabla con 4 columnas */
/* La vamos a utilizar como tabla de entrada para nuestro programa. */
/********************************************************************/
data inventario;
input Stock Venta_Cant Id 8-11 Item $ 13-26;
datalines;
100 52 1001 martillo
345 49 1020 sierra
237 55 2003 destornillador
864 65 3015 pala
932 38 4215 rastrillo
;
run;
/****************************************************************************/
/* Ahora veremos la diferencia del uso de put y de %put */
/* Y de paso presentamos/recordamos cuáles son dos las etapas de */
/* procesamiento del Paso Data: */
/* Etapa 1.- Compilación: */
/* - analiza la sintaxis del código */
/* - crea la estructurala/s nueva/s tabla/s */
/* - etc. etc. */
/* Etapa 2.- Ejecución: (ahora sí vamos a los datos) */
/* - comienza con todas las variables en missing */
/* - trabaja en forma iterativa */
/****************************************************************************/
/****************************************************************************/
/* En qué etapa funcionan las varibles macro? En la */
/* 'Etapa de compilación' (al menos al principio; después viene la locura!) */
/****************************************************************************/
/****************************************************************************/
/* Recordar que: hay que mirar el Log! */
/* La tabla de salida no es importante en este caso. */
/****************************************************************************/
/****************************************************************************/
/* Las sentencias IF que vamos a utilizar se pueden superponer. No hay */
/* problema con esto. */
/****************************************************************************/
/* Situación 01 */
/* El programa solamente utiliza %put (put está comentado) */
/* La sentencia %put escribe en el Log. Y está escribiendo con colores! */
/* Muestra el funcionamiento durante la primera etapa del Paso Data: la 'Etapa de compilación' */
/* Notar que %put NO está trabajando con los datos de la tabla de entrada; no está tomando en cuenta los IF! */
/* '%put' funciona en la 'Etapa de compilación' */
data inventario_temp01;
set inventario;
if Stock < Venta_Cant then
do; /* las 3 sentencias 'put' están comentadas */
*put 'No alcanza el Stock para la venta del producto: ' Item=;
%put NOTE: (no es de SAS) "sigue al conejo blanco";
end;
if Stock < 300 and Venta_Cant > 50 then
do; /* las 3 sentencias 'put' están comentadas */
*put 'Reponer el producto: ' Item=;
%put WARNING: (no es de SAS) "¿qué es la Matrix?";
end;
if Stock >= 300 then
do; /* las 3 sentencias 'put' están comentadas */
*put 'No es necesario reponer el producto: ' Item=;
%put ERROR: (no es de SAS) "¿píldora roja o píldora azul?";
end;
run;
/* Situación 02 */
/* El programa solamente utiliza put (%put está comentado) */
/* La sentencia put también escribe en el Log, pero en otra etapa del Paso Data. */
/* Muestra el funcionamiento durante la segunda etapa del Paso Data: la 'Etapa de ejecución' */
/* Notar que ahora está trabajando con los datos de la tabla de entrada; está tomando en cuenta los IF! */
/* 'put' funciona en la 'Etapa de ejecución' */
data inventario_temp02;
set inventario;
if Stock < Venta_Cant then
do; /* las 3 sentencias '%put' están comentadas */
put 'No alcanza el Stock para la venta del producto: ' Item=;
*%put NOTE: (no es de SAS) "sigue al conejo blanco";
end;
if Stock < 300 and Venta_Cant > 50 then
do; /* las 3 sentencias '%put' están comentadas */
put 'Reponer el producto: ' Item=;
*%put WARNING: (no es de SAS) "¿qué es la Matrix?";
end;
if Stock >= 300 then
do; /* las 3 sentencias '%put' están comentadas */
put 'No es necesario reponer el producto: ' Item=;
*%put ERROR: (no es de SAS) "¿píldora roja o píldora azul?";
end;
run;
/* Situación 03 */
/* El programa utiliza put y %put */
/* Ver (en el Log, desde ya) en qué momento funcionan %put y put */
/* Muestra el funcionamiento durante la 2 etapas del Paso Data */
data inventario_temp03;
set inventario;
if Stock < Venta_Cant then
do; /* put y %put están activas */
put 'No alcanza el Stock para la venta del producto: ' Item=;
%put NOTE: (no es de SAS) "sigue al conejo blanco";
end;
if Stock < 300 and Venta_Cant > 50 then
do; /* put y %put están activas */
put 'Reponer el producto: ' Item=;
%put WARNING: (no es de SAS) "¿qué es la Matrix?";
end;
if Stock >= 300 then
do; /* put y %put están activas */
put 'No es necesario reponer el producto: ' Item=;
%put ERROR: (no es de SAS) "¿píldora roja o píldora azul?";
end;
run;
/*-------------------*/
/* fin del código */
/*-------------------*/
Preguntas exclusivas para la gente que llegó hasta acá:
¿Por qué %put puede escribir en colores?
¿Existen otras opciones para escribir en colores?
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
Are you ready for the spotlight? We're accepting content ideas for SAS Innovate 2025 to be held May 6-9 in Orlando, FL. The call is open until September 16. Read more here about why you should contribute and what is in it for you!