Truco SAS. Tablas de una librería en una macrovariable

Me plantean una duda: cómo crear un conjunto de datos con las tablas de una librería en SAS y, posteriormente, generar una macrovariable con ellos. Ésta es una entrada análoga a otra del blog, pero sirve para recordar cómo funciona el ODS de SAS y el PROC DATASETS, un procedimiento que no he usado habitualmente pero que es muy potente. Lo primero que vamos a hacer es observar qué resultados arroja el PROC DATASETS en su sintaxis más sencilla para ver los contenidos de una librería: ...

24 de enero de 2017 · rvaquerizo

Macro SAS. Crear variables dummy desde una variable categórica

En alguna ocasión ya he conjugado el verbo dumificar y, preparando una segmentación, he creado una macro SAS que genera variables dummy a partir de variables categóricas. Es decir, si la variable A toma valores 1, 2 y 3, tendría que generar A_1 con valor 1 si A toma 1 y con valor 0 en caso contrario; A_2 tiene valor 1 si A es igual a 2, y A_3 tiene valor 1 si A es igual a 3. No es complicado de comprender: pasamos de una variable con tres niveles a tres variables con valores 0 o 1. Para ésto podemos emplear array o la siguiente macro: ...

2 de diciembre de 2015 · rvaquerizo

Mínimo de una matriz de datos en SAS

El otro día una lectora del blog me preguntaba cómo obtener el mínimo de una matriz de datos de 100x1000 con SAS. El ejercicio es muy práctico para ayudar a que se entienda mejor cómo “piensa” SAS. Probablemente esta lectora estaba pensando en complicados bucles que recorren, que almacenan, que arrastran… con SAS las cosas no son así. El paso data es un bucle en sí mismo y SAS no tiene pereza en crear tablas intermedias. Así que la mejor solución para encontrar ese mínimo sería: ...

27 de abril de 2015 · rvaquerizo

Trucos SAS. Calcular percentiles como Excel o R

Alguna vez habréis calculado un percentil en Excel o en R y os saldrá distinto de SAS. Esto se debe a que los métodos de cálculo son distintos; tanto R como Excel utilizan el mismo método consistente en una interpolación en función de la distancia entre los registros que dan la posición del percentil. SAS dispone de 5 métodos distintos para calcular el percentil y por defecto emplea el número 5, y ninguno de los 4 métodos restantes es el que utilizan R o Excel. Pero podemos programar el método de un modo sencillo; cuesta más entender por qué no lo implementa SAS que calcularlo. A continuación tenéis una sencilla macro que calcula el percentil con el método de Excel: ...

16 de febrero de 2015 · rvaquerizo

Determinar el mímino tamaño muestral para detectar un cambio en la fracción no conforme

Este año he aprendido algo sobre metodología 6 sigma para el control de la calidad; me gustó mucho lo que aprendí. Para la realización de algunos ejercicios, creé libros de Excel y algún proceso SAS. Hoy quería traeros al blog una macro de SAS que nos permite determinar el tamaño mínimo muestral para detectar un cambio en la fracción no conforme con una determinada probabilidad. El programa es un bucle de SAS que crea los límites de control para la fracción no conforme y estandariza la diferencia del límite superior con la nueva fracción no conforme. Se calcula la probabilidad que deja este dato estandarizado y el paso del bucle será el número mínimo de muestras. Es más sencillo el código que la definición: ...

18 de diciembre de 2014 · rvaquerizo

Un nuevo blog sobre SAS en español

Buenas noticias. Tenemos un nuevo blog sobre SAS en español: Utilidades, recursos, ejemplos y documentación sobre la herramienta de BI SAS. Esta buena iniciativa parte de Juan Vidal. Se agradece que la comunidad de programadores de SAS comparta sus conocimientos, algo que no es muy habitual; al contrario de lo que pasa con otras herramientas para la gestión de la información y la estadística. Por supuesto, esta iniciativa tiene su correspondiente enlace en esta web. ...

1 de mayo de 2014 · rvaquerizo

Espacios en SAS

Las funciones SAS más habituales para eliminar blancos son las que tenéis en la figura de arriba. Para llegar a ese conjunto de datos SAS, hemos ejecutado el siguiente paso DATA: data ejemplo; st = " Cuando brilla el sol "; l_st = length(st); output; funcion = "COMPRESS"; st1 = compress(st); l_st1 = length(st1); output; funcion = "COMPBL"; st1 = compbl(st); l_st1 = length(st1); output; funcion = "TRIM"; st1 = trim(st); l_st1 = length(st1); output; funcion = "TRIMN"; st1 = trimn(st); l_st1 = length(st1); output; funcion = "STRIP"; st1 = strip(st); l_st1 = length(st1); output; funcion = "STRIP+COMPBL"; st1 = strip(compbl(st)); l_st1 = length(st1); output; run; Distintas formas de eliminar espacios dentro de una cadena de caracteres en SAS. Partimos de la variable string « Cuando brilla el sol » y empleamos las siguientes funciones: ...

14 de enero de 2014 · rvaquerizo

Truco (muy fácil) de SAS. Leer un rango de una hoja Excel

Cuando tenemos rangos en nuestras hojas Excel y deseamos que se conviertan en tabla SAS, podemos emplear la sentencia LIBNAME de este modo: libname selec "C:\TEMP\rangos.xlsx"; data rango; set selec.rango; run; libname selec clear; Asignamos la librería al archivo Excel que deseamos leer y tan simple como referenciar al rango en nuestro paso data. Se interactúa fácil entre Excel y SAS. Saludos.

10 de octubre de 2013 · rvaquerizo

Truco SAS. Retrasar una ejecución con SLEEP

El método más sencillo para ejecutar SAS a una hora determinada es el empleo de la función SLEEP: data _null_; momento = "03OCT2013:10:07"dt; duerme_hasta = sleep(momento - datetime(), 1); run; Un truco muy sencillo que da respuesta a una duda planteada en el blog. Pensé que ya existía esta entrada. Saludos.

3 de octubre de 2013 · rvaquerizo

Truco SAS. Eliminar retornos de carro o saltos de línea engorrosos

Cuando tenemos saltos de línea o retornos de carro que nos dificultan las lecturas de ficheros de texto, podemos leer carácter a carácter con SAS y eliminar esos caracteres incómodos. data _null_; length char $1.; infile 'C:\fichero_de_entrada.TXT' lrecl=1 recfm=F missover dsd; file 'C:\fichero_de_entrada_depurado.TXT' lrecl=1 recfm=F; input char $char1.; if rank(char) = 13 /* SI ES WINDOWS PONER EL 13 */ then char = " "; put char $char1.; run; Recomiendo no sobrescribir el fichero de texto y crear otro “depurado”. Tendréis este problema cuando vuestro programa SAS os lea menos observaciones de las esperadas. Esto suele pasar cuando trabajamos con archivos de distintos sistemas operativos; como por ejemplo cuando leemos un archivo de texto Unix con una máquina Windows. Saludos.

30 de septiembre de 2013 · rvaquerizo