Blogs

Al principio SAS creaba procedimientos y salidas. La salida era sin forma y vacía. Entonces SAS dijo: «Que haya ODS», y hubo ODS.Los clientes vieron que el ODS era bueno, y SAS separó el cálculo de la visualización y la gestión de la salida.

El párrafo anterior simplifica en exceso el Sistema de Entrega de Salida de SAS (ODS), pero la verdad es que el ODS es una poderosa característica de SAS. Usted puede utilizar ODS para enviar tablas y gráficos SAS a varios destinos de salida, incluyendo HTML, PDF, RTF y PowerPoint. Puede controlar el estilo y los atributos de la salida, creando así un informe personalizado. Se han escrito cientos de artículos y libros sobre ODS. Una introducción muy básica es la de Olinger (2000) «ODS for Dummies»

Para un programador estadístico el destino más útil es el destino OUTPUT. El destino OUTPUT envía una tabla o un gráfico a un conjunto de datos SAS. En consecuencia, se puede acceder mediante programación a cada elemento de la salida.

Las implicaciones de la afirmación anterior son monumentales. No puedo exagerar la importancia del destino OUTPUT, así que permítame decirlo de nuevo:

El destino ODS OUTPUT le permite almacenar cualquier valor que sea producido por cualquier procedimiento SAS. A continuación, puede leer ese valor utilizando un programa SAS.

El destino ODS OUTPUT responde a una pregunta común que se hacen los nuevos programadores en los foros de discusión de SAS: «¿Cómo puedo obtener una estadística en un conjunto de datos o en una variable de macro?». Los pasos son los siguientes:

  1. Utilice ODS TRACE ON (o la documentación de SAS) para encontrar el nombre de la tabla ODS que contiene la estadística que desea.
  2. Utilice la sentencia ODS OUTPUT para especificar el nombre de la tabla y un nombre de conjunto de datos. La sintaxis es ODS OUTPUT TableName=DataSetName. A continuación, ejecute el procedimiento para generar la tabla.
  3. Lea el conjunto de datos para obtener el valor de la estadística.

¿Es nuevo en la programación de #SAS? Cómo obtener cualquier estadística en un conjunto de datos. Click To Tweet

Busca el nombre de la tabla ODS

Como ejemplo, supongamos que pretendes utilizar PROC REG para realizar una regresión lineal, y quieres capturar el valor de R-cuadrado en un conjunto de datos SAS. La documentación del procedimiento enumera todas las tablas ODS que el procedimiento puede crear, o puede utilizar la sentencia ODS TRACE ON para mostrar los nombres de las tablas que produce PROC REG. Los datos son los 428 vehículos del conjunto de datos Sashelp.Cars, que se distribuye con SAS:

ods trace on; /* write ODS table names to log */proc reg data=Sashelp.Cars plots=none; model Horsepower = EngineSize Weight;quit;ods trace off; /* dejar de escribir en el registro */

odsoutput1

Salida añadida:-------------Name: FitStatisticsLabel: Fit StatisticsTemplate: Stat.REG.FitStatisticsPath: Reg.MODEL1.Fit.Horsepower.FitStatistics-------------

Al mirar la salida, puede ver que la tercera tabla contiene el valor de R-cuadrado. Al mirar el registro de SAS, puede ver que el nombre de la tercera tabla es «FitStatistics.»

Guardar la tabla en un conjunto de datos SAS

Ahora que sabe que el nombre de la tabla ODS es «FitStatistics», utilice el destino ODS OUTPUT para escribir esa tabla en un conjunto de datos SAS, de la siguiente manera:

ods output FitStatistics=Output; /* el nombre del conjunto de datos es 'Output' */proc reg data=Sashelp.Cars plots=none; /* misma llamada de procedimiento */ model Horsepower = EngineSize Weight;quit; proc print data=Output noobs;run;

odsoutput2

La salida de PROC PRINT muestra la estructura del conjunto de datos de salida. Observe que el conjunto de datos a menudo se ve diferente de la tabla original mostrada. El conjunto de datos contiene columnas no imprimibles (como Modelo y Dependiente) que no aparecen en la tabla mostrada. El conjunto de datos también contiene columnas que contienen los valores numéricos brutos y los valores de caracteres (formateados) de las estadísticas. Las columnas cValue1 y nValue1 representan la misma información, salvo que cValue1 es una columna de caracteres mientras que nValue1 es una columna numérica. Lo mismo ocurre con las columnas cValue2 y nValue2. Los valores de caracteres podrían contener valores formateados o redondeados.

Leer el valor del estadístico en una variable macro

Desde la salida anterior de PROC PRINT, puede ver que el valor numérico del estadístico R-cuadrado está en la primera fila y está en la columna nValue2. Por lo tanto, puede leer y procesar ese valor utilizando una cláusula WHERE estándar. Por ejemplo, las siguientes sentencias utilizan la subrutina SYMPUTX para crear una macrovariable que contiene el valor del estadístico R-cuadrado:

datos _null_;set Output;if Label2="R-Square" then call symputx("RSq", nValue2);run; %put RSq = &RSq;

RSq = 0.6201360929

El registro de SAS muestra que el valor de R-cuadrado está ahora contenido en la macrovariable Rsq.

Almacenar la estadística en una macrovariable es sólo una forma de utilizar el conjunto de datos. También podría leer los estadísticos en PROC IML o PROC SQL para su posterior cálculo, o mostrar el valor del estadístico en un gráfico.

Procesamiento por grupos: Múltiples muestras y múltiples estadísticas

Las secciones anteriores muestran cómo guardar una sola tabla en un conjunto de datos SAS. Es igual de fácil crear un conjunto de datos que contenga múltiples estadísticas, una para cada nivel en un análisis BY-group.

Suponga que desea ejecutar varias regresiones, una para cada valor de la variable Origen, que tiene los valores «Asia», «Europa» y «Estados Unidos». La siguiente llamada a PROC SORT ordena los datos por la variable Origen.Los datos ordenados se almacenan en el conjunto de datos CARS.

proc sort data=Sashelp.Cars out=Cars; by Origin;run;

A continuación, puede especificar Origin en la sentencia BY en PROC REG para realizar tres análisis de regresión. Cuando ejecute un análisis por grupos, es posible que no quiera ver todos los resultados en la pantalla del ordenador, especialmente si su objetivo es guardar los resultados en un conjunto de datos de salida. Puede utilizar la sentencia ODS EXCLUDE para suprimir la salida de SAS.

ods exclude all; /* suprimir las tablas a la pantalla */ods output FitStatistics=Output2; /* 'Output2' contiene los resultados de cada grupo BY */proc reg data=Cars plots=none; by Origin; model Horsepower = EngineSize Weight;quit;ods exclude none; /* ya no suprime las tablas */ proc print data=Output2 noobs; where Label2="R-Square"; var Origin Label2 nValue2;run;

odsoutput3

La salida de PROC PRINT muestra las estadísticas R-cuadrado para cada modelo. Observe que las variables BY-grupo (en este caso, Origen) se añaden a los conjuntos de datos de salida cuando se ejecuta un análisis BY-grupo. Ahora puede utilizar los estadísticos en programas o gráficos.

Alternativas al uso de ODS OUTPUT

Algunos procedimientos proporcionan una opción alternativa para crear un conjunto de datos de salida que contenga estadísticos. Compruebe siempre la documentación de SAS para ver si el procedimiento proporciona una opción que escribe estadísticas comunes en un conjunto de datos de salida. Por ejemplo, la documentación de la sentencia PROC REG indica que se puede utilizar la opción OUTEST= con la opción RSQUARE para obtener un conjunto de datos de salida que contenga las estimaciones de los parámetros y otros estadísticos del modelo como el valor R-cuadrado.Así, para este ejemplo, no es necesario utilizar la sentencia ODS OUTPUT para dirigir la tabla FitStatistics a un conjunto de datos. En su lugar, puede obtener la estadística de la siguiente manera:

proc reg data=Cars NOPRINT outest=Output3 RSQUARE; /* estadística en 'Output3' */ by Origin; model Horsepower = EngineSize Weight;quit; proc print data=Output3 noobs; format _RSQ_ 8.6; var Origin _RSQ_;run;

odsoutput4

Resumen

En resumen, la sentencia ODS OUTPUT le permite crear un conjunto de datos que contenga cualquier estadística producida por un procedimiento SAS. Puede utilizar la sentencia ODS OUTPUT para capturar una estadística y utilizarla posteriormente en su programa.

Etiquetas Introducción

Deja una respuesta

Tu dirección de correo electrónico no será publicada.