Trucos SAS. Calcular una edad

No penséis que restar dos fechas y obtener una diferencia en años entre ellas es un tema baladí. Ejecutad el siguiente código SAS para calcular la diferencia en años: ```sas data uno; format fecha1 ddmmyy10.; do fecha1= 9000 to today(); output; end; run; data uno; set uno; format fecha2 ddmmyy10.; fecha2="15MAY2014"d; edad = int((fecha2-fecha1)/365.25); run; data uno; set uno; if month(fecha1)=5 and day(fecha1)=15; run; Visualizad el conjunto de datos uno, la serie de edad asusta 28,28,27,25,24,24,… Está claro que algo falla. Hace ya tiempo que hablamos de ello en este mismo blog. Los ceros y los unos con los que guardan estas máquinas las cosas a veces nos juegan estas malas pasadas. Para evitar este problema os sugiero que empleéis la función de SAS YRDIF con la base ‘AGE’. Replicamos el ejemplo: ...

14 de mayo de 2014 · rvaquerizo

Truco SAS. Gráfico de correlaciones

Un truco SAS interesante para representar matrices de correlaciones. El ejemplo es muy sencillo, pero previamente tenéis que crear el conjunto de datos SAS para ilustrar el ejemplo. Así que lo primero que hay que hacer es ir a este enlace y copiar el código necesario para crear el conjunto de datos SAS auto. Una vez tenemos ese conjunto de datos de 74 observaciones y 12 variables sólo tenemos que emplear el PROC CORR con una sintaxis muy sencilla: ...

12 de mayo de 2014 · rvaquerizo

Truco Excel. Pasar de número con formato AAAAMMDD a fecha con fórmulas

Tenía que transformar un número en formato AAAAMMDD a una fecha en Excel. Tenía que concatenar varias funciones y he pensado que a lo mejor a alguno de los lectores del blog podría interesarle. Se trata de utilizar la función de Excel FECHA con RESIDUO y ENTERO pero con cierto talento. Partimos del una fecha 20140225 y realizamos la siguiente sucesión de fórmulas: Año: ENTERO(C6/10000) Mes: RESIDUO(ENTERO(C6/100);100) Día: RESIDUO(C6;100) Todo junto en una fórmula: FECHA(ENTERO(C6/10000);RESIDUO(ENTERO(C6/100);100);RESIDUO(C6;100)) Ahí tenéis un truco interesante por si os encontráis en la misma situación que yo. Saludos.

25 de febrero 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: ```sas 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="SRTIP+COMBBL"; 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

Análisis del discurso de navidad del Rey de España 2013

Me llena de orgullo y satisfacción mostraros un ejemplo de uso de la librería wordcloud para la realización de nubes de palabras con R. Esta entrada no es muy innovadora porque ya tenemos alguna similar en el blog. Lo primero que tenéis que hacer es descargaros el discurso del Rey y ejecutad este código: #Lectura del archivo ubicacion="C:\\temp\\juancar.txt" texto = read.table (ubicacion,sep="\r") #Dejamos todas las palabras en mayúsculas texto = toupper(textoV1) #El texto lo transformamos en una lista separada por espacios texto_split = strsplit(texto, split=" ") #Deshacemos esa lista y tenemos el data.frame texto_col = as.character(unlist(texto_split)) texto_col = data.frame(texto_col) names(texto_col) = c("V1") #Eliminamos algunos caracteres regulares texto_colV1 = sub("([[:space:]])","",texto_colV1) texto_colV1 = sub("([[:digit:]])","",texto_colV1) texto_colV1 = sub("([[:punct:]])","",texto_colV1) #Creamos una variable longitud de la palabra texto_collargo = nchar(texto_colV1) #Quitamos palabras cortas texto_col = subset(texto_col,largo>4) #Nube de palabras #install.packages('wordcloud') library(wordcloud) library(RColorBrewer) pesos = data.frame(table(texto_colV1)) #Paleta de colores pal = brewer.pal(6,"RdYlGn") #Realizamos el gráfico png('C:\\temp\\Discurso del rey españa 2013.png', width=500, height=500) wordcloud(pesosVar1,pesosFreq,scale=c(4,.2),min.freq=2, max.words=Inf, random.order=FALSE,colors=pal,rot.per=.15) dev.off() Interesante el uso de la librería RColorBrewer. Particularmente me gusta mucho el resultado que nos da wordcloud para la realización de las nubes de palabras con una sintaxis sencilla. Considero imprescindible el uso de random.order=FALSE. Espero que os sea de utilidad. ...

26 de diciembre de 2013 · rvaquerizo

Truco (malo) de R. Leer datos desde Excel

Tenemos unos datos en Excel y deseamos crear un objeto en R con ellos. La forma más sencilla es seleccionar y copiar los datos y ejecutar el siguiente código: ```r datos = read.delim("clipboard") str(datos) Muy sencillo, pero necesitaba «fustigarme». Si deseamos llevar los datos de R a Excel (el camino contrario) hacemos: write.table(datos,"clipboard", sep="\t",row.names=FALSE) Igual de sencillo. No hagáis como yo, no olvidéis este código. Saludos.

3 de diciembre de 2013 · rvaquerizo

Truco Excel. Identificar el color de una celda

Para identificar el color de una celda en Excel podemos emplear Interior.Color del siguiente modo: Sub Macro1() For i = 3 To 6 dato = Cells(i, 2).Interior.Color Cells(i, 3) = dato Next i End Sub No funciona con formatos condicionales, si deseáis utilizar los colores de los formatos condicionales habréis de idear cómo hacerlo o bien esperar a que tenga tiempo a redactar como lo hago yo, pero que nadie se espere un programa en VB brillante, que no fui capaz de hacerlo. Saludos.

27 de noviembre de 2013 · rvaquerizo

Truco Excel. Agrupar valores en un campo de una tabla dinámica

Si necesitamos agrupar un campo de una tabla dinámica tenemos dos opciones. Por un lado agrupar manualmente o bien crear intervalos de determinado tamaño. Para agrupar datos manualmente seleccionamos los elementos que deseamos agrupar en la tabla dinámica y pulsamos botón derecho agrupar: Inmediatamente se nos crea un nuevo campo en la tabla dinámica que por sufijo tendrá un 2 y aparece un nuevo grupo que por defecto se llamará Grupo 1. Podemos cambiar el nombre, en este caso agrupamos trimestres o cuatrimestres: ...

5 de noviembre de 2013 · 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: ```sas libname selec "C:\TEMP\rangos.xlsx"; data rango; set selec.rango; run; libname selec clear; Asisgnamos 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