Macros (fáciles) de SAS. Días de un mes en una fecha

Macro de SAS fácil y rápida que nos permite saber el número de días que tiene el mes de una fecha de SAS. La tenía para la automatización de un código que con una media y daba guerra cuando se trataba de un año bisiesto. 3 líneas de código: %macro dias(fec); ((&fec-day(&fec)+1)+31-day((&fec-day(&fec)+1)+31))-(&fec-day(&fec)) %mend; El razonamiento es sencillo. Se trata de poner a día 1 la fecha que le pasamos, irnos un mes después y hacer la diferencia. Por supuesto copiáis y pegáis el ejemplo en el editor: ...

29 de mayo de 2011 · rvaquerizo

Macros (fáciles) de SAS. Eliminar outliers en una variable

Hace tiempo ya os propuse una chapuza para eliminar outliers de forma multivariante. Por supuesto quedabaeliminar outliers en una variable. Recortar los valores extremos en aquellas variables cuantitativas que deseemos. Para ello os propongo una macro que no considero muy compleja y que os analisisaré con mayor detalle, pero lo primero la macro al completo: %macro elimina_outliers( varib, /*VARIABLE PARA ELIMINAR EL OUTLIER*/ entrada,/*DATASET DE ENTRADA*/ salida, /*DATASET DE SALIDA, PUEDE SER EL MISMO DE ENTRADA*/ corte_inferior, /*% DE CORTE INFERIOR*/ corte_superior);/*% DE CORTE SUPERIOR*/ *******************************************************************; *CREAMOS LOS PERCENTILES; data _null_; call symput ("lim1",compress(0+&corte_inferior.)); call symput ("lim2",compress(100-&corte_superior.)); run; *PREPARAMOS MV CON LOS NOMBRES QUE OBTENDREMOS DEL PROC UNIVARIATE; data _null_; call symput ('nom_lim1',compress("P_"||tranwrd("&lim1.",'.','_'))); call symput ('nom_lim2',compress("P_"||tranwrd("&lim2.",'.','_'))); run; *EL UNIVARIATE GENERA UNA SALIDA SOLO CON LOS PERCENTILES DESEADOS; proc univariate data=&entrada. noprint; var &varib.; output out=sal pctlpre=P_ pctlpts=&lim1.,&lim2.; quit; *CREAMOS MV CON LOS CORTES DESEADOS; data _null_; set sal; call symput("inf",&nom_lim1.); call symput("sup",&nom_lim2.); run; *REALIZAMOS EL FILTRO; data &salida.; set &entrada.; if &varib.>&inf. and &varib.<&sup.; run; proc delete data=sal;run; %mend; Su ejemplo de uso correspondiente: ...

16 de mayo de 2011 · rvaquerizo

Trucos Excel. Múltiples campos calculados en una tabla dinámica

Truco Excel muy rápido y que os permite crear múltiples campos calculados en una tabla dinámica de Excel. Imaginemos que tenemos una tabla dinámica con un campo que es la suma de la exposición al riesgo y por otro lado tenemos el número de siniestros. Estos dos campos los tenemos para 30 coberturas. Si queremos crear un campo calculado que sea la frecuencia siniestral (número de siniestros/exposición) para esos 30 campos tenemos que irnos a herramientas de tabla dinámica, fórmulas, definir el nuevo campo,… O bien podemos hacer emplear la siguiente macro: ...

12 de mayo de 2011 · rvaquerizo

Trucos Excel. Transponer con la función DESREF

Este blog ya contó como trasponer filas a columnas con la función INDIRECTO. Recientemente tuve que explicar ese proceso a una persona y parece que le costó, sin embargo entendió a la perfección el uso de la función DESREF(a la que ya hicimos mención en una entrada reciente) y por ello me he animado a crear esta entrada. En este enlace podéis descargar un excel 2007 que contiene el siguiente ejemplo: ...

30 de abril de 2011 · rvaquerizo

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( <Celda inicial anclada>;<Filas por debajo de la referenciada>;<Columnas a la derecha de la fila referenciada>). Para nuestro caso el funcionamiento de la función DESREF será: 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. ...

21 de abril de 2011 · rvaquerizo

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: ```r 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.

19 de abril de 2011 · rvaquerizo

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: 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: ...

11 de abril de 2011 · rvaquerizo

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: ...

6 de abril de 2011 · rvaquerizo

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: 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 ese texto tiene que pasar a otro texto con el formato dd/mm/aaaa. 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 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.

13 de marzo de 2011 · rvaquerizo

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: ...

25 de febrero de 2011 · rvaquerizo