El ODS de SAS (I). Elementos del OUTPUT

Hoy comenzaré una serie de mensajes dedicados al ODS (Output Delivery System) de SAS. Este mecanismo de SAS nos permite un uso más eficiente del OUTPUT de nuestros pasos PROC además podemos crear excel (como ya vimos), crear dataset, no generar salidas,… Antes SAS nos ofrecia un texto plano en la ventana OUTPUT, ahora generamos documentos sofisticados. En tres entregas veremos:
*Trazar el OUTPUT de SAS
*Datasets de salidas de SAS
*Documentos con nuestras salidas de SAS:
-HTML
-PDF
Como complemento a estas entregas es posible que redacte un mensaje con algunos ejemplos de uso del PROC TEMPLATE. En esta primera capítulo dedicado al ODS estudiaremos algunas salidas SAS y con ellas, sabremos identificar la estructura del OUTPUT.

Si ejecutamos en SAS el siguiente código:

data uno; do i=1 to 20000;
importe=round(rand("normal")*1000,.1);
num_productos=min(max(1,rand("pois",4)),8);
 num_cargos=max(0,rand("pois",10)-int(rand("uniform")*10));
 output ;
 end;

run;proc univariate data=uno;

var importe;

quit;

proc freq data=uno;

tables num_productos*num_cargos/chisq;

quit;

Generamos un dataset aleatorio de muestra sobre el que hacemos un univariante y una tabla de frecuencias de doble entrada con un test de independencia de la Ji-Cuadrado. En total las tablas de resultados que obtenemos son:

*PROC UNIVARIATE:
-Moments
-Basic Statistical Measures
-Tests for Location: Mu0=0
-Quantiles (Definition 5)
-Extreme Observations

*PROC FREQ:
*Table of num_productos by num_cargos
*Statistics for Table of num_productos by num_cargos

En total tenemos 7 OUTPUT. Bien, cada OUTPUT tiene una «definición interna» de SAS, para conocerla emplearemos el ODS TRACE:

ods trace on;
proc univariate data=uno;var importe;quit;

proc freq data=uno;
tables num_productos*num_cargos/chisq;
quit;

ods trace off;

Si ejecutamos este código y vemos el log tendremos:

24

25 ods trace on;

26 proc univariate data=uno;

27 var importe;

28 quit;
Output Added:

-------------

Name: Moments

Label: Moments

Template: base.univariate.Moments

Path: Univariate.importe.Moments

-------------

Output Added:

-------------

Name: BasicMeasures

Label: Basic Measures of Location and Variability

Template: base.univariate.Measures

Path: Univariate.importe.BasicMeasures

-------------
Output Added:

-------------

Name: TestsForLocation

Label: Tests For Location

Template: base.univariate.Location

Path: Univariate.importe.TestsForLocation

-------------
Output Added:

-------------

Name: Quantiles

Label: Quantiles

Template: base.univariate.Quantiles

Path: Univariate.importe.Quantiles

-------------
Output Added:

-------------

Name: ExtremeObs

Label: Extreme Observations

Template: base.univariate.ExtObs

Path: Univariate.importe.ExtremeObs

-------------

NOTE: PROCEDURE UNIVARIATE used (Total process time):

  real time 0.03 seconds

  cpu time 0.03 seconds
29

30 proc freq data=uno;

31 tables num_productos*num_cargos/chisq;

32 quit;
Output Added:

-------------

Name: CrossTabFreqs

Label: Cross-Tabular Freq Table

Data Name:

Path: Freq.Table1.CrossTabFreqs

-------------
ods trace on;
proc univariate data=uno;var importe;quit;

proc freq data=uno;
tables num_productos*num_cargos/chisq;
quit;

ods trace off;

0

-————
NOTE: There were 20000 observations read from the data set WORK.UNO.
NOTE: PROCEDURE FREQ used (Total process time):
real time 0.02 seconds
cpu time 0.02 seconds

33 ods trace off;

Con ODS TRACE ON activamos el “Trace Record” de SAS. Nos añade 7 elementos al OUTPUT y para cada elemento tenemos el nombre, la etiqueta que le asigna SAS y el catálogo donde almacena cada elemento. Con TRACE empezamos a conocer mejor una salida SAS y sobre todo identificamos los nombres de los elementos que componen una salida SAS. Con ello y con otras herramientas de ODS podemos configurar mejores y más optimas tablas de resultados.