Trucos

Trucos Excel. Repetir filas o columnas con la función DESREF

La función DESREF va a ser la protagonista de 2 trucos de Excel. Vamos a repetir filas o columnas con esta función. En nuestro caso la función va a devolver el valor de una celda referenciada del modo DESREF( ;;). Para nuestro caso el funcionamiento de la función DESREF será:

ejemplo-de-uso-desref-2.png

Repito, en este caso la función DESREF lo que hace es referenciar celdas en función de una celda inicial, de modo que el primer parámetro que le pasamos a la función es la referencia, el segundo parámetro es el número de celdas que nos movemos hacia abajo y el tercer parámetro el número de celdas que nos movemos a la derecha. En nuestro caso fijamos la celda B3 como referencia y si deseamos repetir columnas (menos habitual) sólo hacemos DESREF(B3;0;0). Si lo que queremos es repetir filas lo primero que tenemos que hacer es crear el valor incremental sobre nuestra referencia. En el ejemplo deseamos repetir el número en 3 ocasiones y que después cambie, bien el autonumérico irá del 0 al 11, del 0 al 4×3 – 1. Hacemos una función REDONDEAR.MENOS donde dividimos nuestro autonumérico entre el número de veces que queremos repetir, en este caso 3. Y esa será la forma en la que se incrementará nuestra referencia.

Lectura de ficheros SAS7BDAT de SAS directamente con R

Un post de BIOSTATMATT que nos conduce a un código en R que nos permite leer datasets de SAS directamente con R sin necesidad de tener SAS. Un problema recurrente que abordaré con más detenimiento otro día [ahora me voy a pescar]. Aquí tenéis el enlace:

http://biostatmatt.com/archives/1216

Sólo tenéis que cargar la funciónread.sas7bdat que tenéis en este enlace. Y ya podéis leer conjuntos de datos SAS. Ejemplo:

source("http://biostatmatt.com/R/sas7bdat.R")

datos = read.sas7bdat("D:\\raul\\Trabajo\\salida\\p03.sas7bdat")

De momento lo he probado en conjuntos de datos SAS sin índices y sin comprimir, si encuentro algún problema primero se lo reporto a la gente que ha creado esta función y más tarde os lo comento.

Trucos Excel. Poner etiquetas en gráficos de dispersión

Una macro de Visual Basic muy sencilla es la única forma de etiquetar gráficos de dispersión que me he encontrado. Si alguien encuentra otro modo más sencillo de hacerlo que lo comente en estas líneas. La intencion es llegar a este gráfico:

etiquetas-grafico-dispersion-excel-1.png

No es que sea un gran gráfico, recordad que está hecho en Excel, pero nos permite ver como se distribuyen los paises en función de la renta per cápita y el número de horas trabajadas al año. Además podemos identificarlos perfectamente, como es el caso de Luxemburgo, como siempre. Los datos para realizar este gráfico están en la web de la OCDE. Nos los descargamos en Excel y tenemos una tabla de esta forma:

Trucos SAS. Validación de consultas con PROC SQL

Hay ocasiones en las que lanzamos consultas a las BBDD con SAS y necesitamos saber si son correctas. Quería plantearos un truco SAS para PROC SQL que valida las consultas antes de ser ejecutadas. Empiezo el truco en la línea habitual, creo un dataset de ejemplo y os presento como realizar la validación, de este modo vosotros podéis copiar y pegar el código en una sesión de SAS y comprobar su funcionamiento. Datos aleatorios de partida:

Trucos Excel. Tranformar un caracter a fecha

Si tenemos en Excel celdas con valores en la forma:

  • viernes 1 de enero de 2010
  • sábado 2 de enero de 2010
  • domingo 3 de enero de 2010
  • _…
    _

y deseamos transformarlo en fecha podemos hacer lo siguiente:

*=TEXTO(IZQUIERDA(EXTRAE(A2;ENCONTRAR(» «;A2;1)+1;30);2) &EXTRAE(EXTRAE(A2;ENCONTRAR(» «;A2;1)+1;30);6;4)&DERECHA(EXTRAE(A2;ENCONTRAR(» «;A2;1)+1;30);4 );»dd/mm/aaaa»)1

¡Toma función! Vamos a contar paso por paso como funciona:

  1. necesitamos 1 de enero de 2010 de viernes 1 de enero de 2010 , supongamos que está en la celda A2. Eso lo conseguimos encontrando el primer espacio en blanco con la función ENCONTRAR(» «;A2;1) en este caso el 6, luego debemos empezar por el siguiente, por eso debemos sumar 1. Con EXTRAE(A2;ENCONTRAR(» «;A2;1)+1;30) nos quedamos con 1 de enero de 2010
  2. ese texto tiene que pasar a otro texto con el formato dd/mm/aaa. El día lo cogemos con IZQUIERDA(EXTRAE(A2;ENCONTRAR(» «;A2;1)+1;30);2) el mes es más complejo porque queda entremedias EXTRAE(EXTRAE(A2;ENCONTRAR(» «;A2;1)+1;30);6;4) y el año se hace de forma análoga al día DERECHA(EXTRAE(A2;ENCONTRAR(» «;A2;1)+1;30);4 ) y hemos creado el texto 1 ener2010
  3. por último empleamos la función TEXTO para transformar esa cadena de caracteres a otra cadena de caracteres con el formato deseado dd/mm/aaaa y todo ello lo multiplicamos por 1 para crear el número 40179 al que podemos dar el formato de fecha que queramos y con el que podemos realizar operaciones

Espero que esta fórmula os sirva y os ayude en vuestro trabajo con Excel cuando tengáis que cambiar textos a fechas (o al contrario). También podemos emplear la función FECHANUMERO pero esa me la guardo para otro día.

Macros (fáciles) de SAS. Determinar si existe una variable en un dataset

Duda que me plantearon el otro día. ¿Es posible determinar si existe una variable en un conjunto de datos SAS? Pretendían crear una macro variable que tomara el valor 1 si existía o 0 si no existía. Resolví la duda pero me guardé la macro para ponerla en el blog y así la podéis utilizar todos. De eso se trata, de compartir mis conocimientos con todos de forma altruista por ello prefiero que planteéis las dudas en el blog, no por correo. Así, entre todos, las podemos resolver. En este caso la macro es muy sencilla y tiene pocas líneas:

Nuestras funciones de R en menús con rpanel y svWidgets

Hoy quería acercarme a los paquetes **rpanel **y svWidgets para crear ventanas y menús respectivamente. La idea es sencilla, tenemos funciones en R que empleamos habitualmente y con ellas vamos arealizar un menú. Partimos de una función muy sencilla en R para eliminar datos con valores missing. [Por cierto, que cansado estoy de escribir palabras en inglés para facilitar las búsquedas, un valor missing es un valor perdido. Tras el lapso continúo]. Mi función:

Trucos SAS. Borrando blancos innecesarios con COMPBL

Me ha llegado hoy una duda interesante. El problema era eliminar espacios en blanco innecesarios mediante alguna función de SAS. Más concretamente teníamos algo parecido a:

data prueba;

nombre="DE PEDRO                     MARTINEZ                ESTEBAN JOSE";

/*QUEREMOS LLEGAR A: DE PEDRO MARTINEZ ESTEBAN JOSE*/

run;

Pues bien, esto se puede hacer con la función COMPBL que “ remove blank spaces with SAS ”:

data prueba;

nombre="DE PEDRO                 MARTINEZ             ESTEBAN JOSE";

nombre2=compbl(nombre);

put nombre2;

run;

Una función fácil y práctica que seguro conocéis pero que no está mal recordar. Saludos.

Truco R. Paletas de colores en R

Paletas de colores en R

En cuántas ocasiones habéis querido dar color a un gráfico y por aligerar código creáis gráficos de este tipo:

x = rpois(100,as.integer(runif(10)*1000))

barplot(sort(x))

Pues en R esta labor puede costarnos muy poco si empleamos las paletas de colores. Hoy quiero presentaros las siguientes:

  • rainbow
  • heat.colors
  • terrain.colors
  • topo.colors

Ejemplos de uso:

require(graphics)

barplot(sort(x),col = rainbow(x),main="Paleta rainbow")

barplot(sort(x),col = heat.colors(length(x)),main="Paleta heat")

barplot(sort(x),col = topo.colors(length(x)),main="Paleta topo")

Comparad, metemos los 4 gráficos en una sóla ventana y tendremos la figura con la que iniciamos esta entrada:

Truco R. Eval, parse y paste para automatizar código

La función paste nos permite concatenar cadenas de texto con R:

paste("Dato",rep(1:10),sep="")

Parse recoge una expresión pero no la evalúa:

parse(text="sqrt(121)")

Y por último eval evalúa una expresión:

eval(parse(text="sqrt(121)"))

Interesantes funciones que nos pueden permitir automatizar códigos recursivos o códigos guardados como objetos en R. Imaginemos el siguiente ejemplo de R:

ejemplo1 <- data.frame(replicate (20,rpois(20,10)))

nom <- paste("dato",1:20,sep="")

names(ejemplo1) <- nom

summary(ejemplo1)

Hemos automatizado los 20 nombres de un data frame con datos aleatorios con una distribución de poissón de media 10 creado con la función replicate. Ahora imaginemos que deseamos transformar en factor sólo aquellos elementos del data frame con un sufijo par (datos2, datos4, …). Podemos crear una función o podemos crear ejecuciones de código R del siguiente modo:

Recodificar el valor de un factor en R

Tras leer una duda planteada en la lista de R-Help en español me he animado a crear una entrada acerca de la recodificación de factores en R. Así dejo recogido algún código/truco que puede serviros en vuestro trabajo con R y que este pequeño problema no afecte a vuestra productividad. Además os acerco a la función recode del paquete car. Pero en primer lugar os planteo como recodificar factores empleando IF/ELSE:

Trucos Excel. Mapa de España por provincias

Pongo a vuestra disposición un archivo Excel que nos permite la realización del siguiente gráfico:

mapa-espana-provincias-excel.PNG

En este link podéis descargaros el archivo. He elegido formato Excel 2003 para el archivo, de este modo lo podréis utilizar muchos de vosotros. Si alguien desea el formato 2007 que lo diga. De momento es una primera versión a la que iré añadiendo un mayor número de funcionalidades. Se trata de un gráfico en el que podemos variar el color de cada una de las provincias mediante la siguiente macro:

Objetos hash para ordenar tablas SAS

A partir de la versión 9.1 de SAS se incluyeron los objetos HASH. Hace tiempo ya demostramos su eficiencia en el cruce de tablas y hoy quería mostraros como se programa una ordenación empleando HASH. La verdad es que estoy saboreando mis últimos días con SAS v9.2, en breve volveré a una versión muy anterior. El codigo, en mi opinión, es muy sencillo y como es habitual tenemos ejemplo ilustrativo que comentaré a continuación: