Truco SAS. Categorizar variables continuas

Si necesitamos crear grupos a partir de una variable continua, podemos emplear una metodología muy sencilla para crear muestras proporcionales o muestras de un tamaño predeterminado a partir de un conjunto de datos SAS. El método de cálculo es bien sencillo: si deseamos crear $N$ grupos, dividimos la observación entre el total y multiplicamos por los $N$ grupos, redondeando al entero más alto. Si deseamos grupos de tamaño $M$, dividimos la observación entre $M$ redondeando al entero más alto. En código SAS: ...

5 de junio de 2008 · rvaquerizo

Truco SAS. Observaciones de un dataset en una macro variable

Truco SAS sencillo sobre las funciones de I/O de SAS que puede ahorrarnos más de un paso DATA. Se trata de una macro que pone el número de observaciones de un dataset en una macrovariable global. Al emplear funciones de I/O, su ejecución es inmediata: /* MACRO PARA IDENTIFICAR EL NÚMERO DE OBSERVACIONES DE UN DS */ %macro numobs(ds, mv); /* CREAMOS UNA MACRO VARIABLE GLOBAL */ %global &mv.; data _null_; /* ABRIMOS EL FICHERO */ datossid = open("&ds."); /* OBTENEMOS EL ATRIBUTO NOBS QUE CONTIENE EL NÚMERO DE OBSERVACIONES */ no = attrn(datossid, 'nobs'); /* ASIGNAMOS EL VALOR A LA MV */ call symput ("&mv.", compress(no)); /* CERRAMOS EL FICHERO */ datossid = close(datossid); run; %mend; * EJEMPLO DE USO; data uno; do i = 1 to 100; output; end; run; %numobs(uno, obs_uno); %put Observaciones de uno = &obs_uno.; Como vemos, es un código sencillo pero muy práctico, ya que nos permite obtener el número de observaciones de forma instantánea. Con él podemos validar procesos, realizar cálculos… ...

4 de junio de 2008 · rvaquerizo

El ODS de SAS (II). Dataset desde OUTPUT

Ya vimos el funcionamiento de ODS TRACE ON/OFF. Ahora crearemos datasets a partir del OUTPUT que genera un paso PROC de SAS con ODS. Lo principal es conocer cómo se denomina cada parte del OUTPUT; esto lo conseguimos con TRACE y analizando el LOG. Una vez conocemos la salida, empleamos ODS OUTPUT <nombre de la salida> = libreria.dataset. En el ejemplo que teníamos: * DATASET ALEATORIO DE 20000 OBSERVACIONES; 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; ods noresults; ods output Quantiles = cuant; proc univariate data = uno; var importe; run; ods output Chisq = testchi; proc freq data = uno; tables num_productos * num_cargos / chisq; run; ods results; Para evitar la salida en la ventana output o en formato HTML, se emplea ODS NORESULTS. Con ODS OUTPUT hemos creado dos datasets. Veamos el log: ...

19 de mayo de 2008 · rvaquerizo

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 datasets, no generar salidas… Antes, SAS nos ofrecía 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 y PDF. Como complemento a estas entregas, es posible que redacte un mensaje con algunos ejemplos de uso del PROC TEMPLATE. En este primer capítulo dedicado al ODS, estudiaremos algunas salidas SAS y, con ellas, sabremos identificar la estructura del OUTPUT. ...

8 de mayo de 2008 · rvaquerizo

Truco SAS. Unir todos los Excel en uno solo

Este programa SAS une todos los Excel que queramos en un único libro. Cuando estamos haciendo análisis de variables y exportamos los resultados con ODS o con otro método a Excel, resulta un poco pesado ir abriendo cada libro para ver los resultados; a mí me resulta más fácil unírmelas todas y tener toda la información contenida en un único Excel. ¡Espero que os resulte útil! /* GENERAMOS FICHEROS DE EJEMPLO */ ods noresults; ods listing close; ods html body="c:\temp\retail.xls"; proc print data=sashelp.retail; run; ods html close; ods html body="c:\temp\shoes.xls"; proc print data=sashelp.shoes; run; ods html close; ods results; ods listing; /* MACRO PARA UNIR LOS FICHEROS EMPLEANDO VBS */ %macro UNE_EXCEL(in=, out=); options noxwait; x erase "&&out"; options xwait; data _null_; file "c:\temp\class.vbs"; put 'Set XL = CreateObject("Excel.Application")' / 'XL.Visible = True'; %let n = 1; %let from = %scan(&&in, &&n, " "); %do %while("&&from" ne ""); %let fromwb = %scan(&&from, 1, "!"); %let fromws = %scan(&&from, 2, "!"); put "XL.Workbooks.Open ""&&fromwb"""; %if &&n = 1 %then put "XL.ActiveWorkbook.SaveAs ""&&out"", -4143" %str(;); %else %do; put "XL.Workbooks(""%scan(&&fromwb, -1, '\')""").Sheets(""&&fromws""").Copy ,XL.Workbooks(""%scan(&&out, -1, '\')""").Sheets(%eval(&&n-1))"; put "XL.Workbooks(""%scan(&&fromwb, -1, '\')""").Close"; %end; %let n = %eval(&&n + 1); %let from = %scan(&&in, &&n, " "); %end; put "XL.Workbooks(""%scan(&&out, -1, '\')""").Sheets(1).Activate"; put "XL.Workbooks(""%scan(&&out, -1, '\')""").Save"; put "XL.Quit"; run; x 'c:\temp\class.vbs'; %mend; /* EJEMPLO DE USO */ %UNE_EXCEL(in=c:\temp\shoes.xls!shoes c:\temp\retail.xls!retail, out=c:\temp\TodasJuntas.xls);

23 de abril de 2008 · svalle

Truco SAS. Leer datos de Excel con SAS vía DDE

Si no disponemos del módulo Access to PC Files de SAS, no podremos importar a SAS datos de Excel sin emplear el DDE. En un truco anterior vimos cómo, vía DDE, exportábamos ficheros de SAS a Excel. Empleando esta misma vía vamos a importar datos. La metodología es análoga a la empleada con la exportación: asignamos un filename dinámico a un rango de datos de Excel, y nuestro paso DATA lee de ese filename DDE para crear una tabla SAS. Partimos de una tabla de ejemplo con estos datos: ...

9 de abril de 2008 · rvaquerizo

Truco SAS. SAS y DDE, otra forma de exportar a Excel

Otro elemento con el que contamos para crear archivos Excel desde SAS es el DDE, una tecnología que nos permite comunicar Windows con SAS. Mediante esta comunicación podemos leer un fichero SAS y escribir en una tabla de Excel. Con el siguiente artículo os voy a introducir a otra metodología que no sólo sirve para crear ficheros Excel desde SAS, sino que además nos permitirá ejecutar macros, crear gráficos… Estudiemos el ejemplo más sencillo, que parte siempre de un fichero Excel existente: ...

8 de abril de 2008 · rvaquerizo

Truco SAS. Crear ficheros Excel sin PROC EXPORT (II)

Con anterioridad hemos visto el manejo del ODS y cómo nos sirve para generar archivos HTML que podemos usar con Excel sin necesidad de emplear el PROC EXPORT. Pero el lenguaje SAS empleado era complicado y requería muchas líneas de código. Pues esto podemos evitarlo si creamos nuestra propia macro para exportar nuestras tablas SAS a tablas Excel. «Simplemente» hemos de parametrizar el código que vimos en la primera parte del truco SAS. Pero realizaremos diversas modificaciones para que nuestro código sea más práctico: ...

7 de abril de 2008 · rvaquerizo

Truco SAS. Crear ficheros Excel sin PROC EXPORT (I)

No disponemos del módulo ACCESS TO PC FILES y necesitamos poner nuestra tabla SAS en Excel. Usaremos el ODS (Output Delivery System) de SAS. Junto con el PROC PRINT, crearemos un fichero HTML con extensión .XLS que podremos manejar perfectamente con Excel; insisto, no es un fichero Excel, es HTML, pero se manejará sin ningún problema en la hoja de cálculo y podremos guardarlo como fichero Excel. El primer paso para nuestro ejemplo será generar una tabla SAS con valores aleatorios que deseamos exportar a Excel: ...

2 de abril de 2008 · rvaquerizo

Truco SAS. Cruce con PROC FORMAT

Veremos un ejemplo de ahorro de tiempo haciendo un cruce con formatos. Parece curioso que los formatos ahorren tiempo frente al SORT/MERGE y SQL, ya que básicamente no están hechos para esa finalidad, pero realmente podemos ahorrarnos más del 50% del tiempo. Lo más costoso de este método es la carga del formato, pero una vez que lo tenemos cargado, podemos hacer las selecciones de todos los grandes volúmenes de datos que necesitemos. Con el SORT/MERGE, tendríamos que ordenar el conjunto de datos SAS “grande” cada vez si no lo teníamos ya ordenado. Este método es realmente efectivo al cruzar tablas grandes frente a pequeñas. ...

4 de marzo de 2008 · svalle