¿Truco? Leer sas7bdat sin SAS

Me han pasado una tabla SAS y no sé cómo llevármela a SPSS. Este problema es habitual y ha traído de cabeza a más de uno. Es lo que tienen estas herramientas tan propietarias; si en tu organización tienen WPS (bueno, bonito y barato), esto no pasa. En fin, me ha llegado esta cuestión y voy a plantearos una posible forma de resolverla. Podríamos usar los formatos XPORT; la persona que me pasa la tabla emplea el libname xport y me envía un fichero .xpt; sin embargo, esto no pasa. Casi siempre nos mandan el .sas7bdat y tenemos un problema. ...

5 de mayo de 2010 · rvaquerizo

Los mejores y más útiles trucos de R

Como estamos medio de fiesta y da pereza poner in funcionamiento los engranajes del cerebro para producir ideas originales, me limitaré a apuntar un enlace en el que los usuarios han propuesto y votado sus mejores trucos de R. Para los más perezosos, indicaré que el campeón ha sido la función str(). Y para los menos perezosos, aparecen en la lista métodos para acceder y manipular datos alojados in GoogleDocs directamente. Saludos.

29 de diciembre de 2009 · cgbellosta

Trucos SAS. Autonumérico con PROC SQL

Rápido: me ha llegado una consulta que me preguntaba cómo crear un campo autonumérico con PROC SQL. Tenemos que emplear la función MONOTONIC(): data uno; do i = 1 to 100; output; end; run; proc sql; create table dos as select monotonic() as obs, a.* from uno a where mod(i, 2) = 0; quit; Equivale al _N_ de un paso DATA. Es una tontería, pero a un lector del blog le ha venido bien. Saludos.

6 de noviembre de 2009 · rvaquerizo

Truco SAS. Transponer tablas con PROC TRANSPOSE, DATA o PROC SQL

Para transponer datasets, disponemos en SAS del PROC TRANSPOSE. El ahora escribiente no es muy partidario de emplearlo; prefiero otras metodologías para transponer conjuntos de datos SAS. Voy a trabajar con un ejemplo que os servirá para aproximaros al TRANSPOSE y para entender mejor las opciones de lectura de un paso DATA y el funcionamiento del PROC SQL. La idea es, partiendo de una tabla de hechos por meses, transponer un campo importe. Vamos a simular una tabla con esa estructura: ...

27 de agosto de 2009 · rvaquerizo

Trucos SAS. Eliminar etiquetas en los conjunto de datos SAS

Hoy planteo un ejemplo de uso de las vistas de SASHELP con los nombres de las columnas de una tabla SAS. Además, sirve para conocer mejor el PROC DATASETS y la creación de macrovariables con el PROC SQL. Una macro que no es de mucha utilidad, pero con la que podemos empezar a aproximarnos al lenguaje macro de SAS: %macro sinetiquetas(conj); data _null_; if index("&conj.", ".") = 0 then x = "WORK"; else x = scan("&conj.", 1, "."); call symput('libreria', upcase(x)); if index("&conj.", ".") = 0 then y = "&conj."; else y = scan("&conj.", 2, "."); call symput('tabla', upcase(y)); run; proc sql noprint; select compress(name || "=''") into :l1 separated by " " from sashelp.vcolumn where libname = "&libreria." and memname = "&tabla."; quit; proc datasets lib=&libreria. nolist; modify &tabla.; label &l1.; run; quit; %mend; Primero buscamos con un paso DATA si es una tabla temporal o permanente. Creamos una macrovariable con los nombres de las variables preparadas para eliminar etiquetas (var1=''). Las etiquetas las quitamos con DATASETS y MODIFY. La macro sólo necesita como parámetro la tabla sobre la que deseamos eliminar las etiquetas. A pesar de ser un truco fácil, seguro que más de uno se precompila esta macro en sus sesiones SAS. Saludos.

17 de agosto de 2009 · rvaquerizo

Muestreo de datos con R

Recientemente hubo una entrada en este blog sobre cómo realizar muestreos aleatorios in tablas SAS. In esta vamos a ver cómo se procedería con R. Consideraremos el conjunto de datos iris —de dimensión 150 x 5— y extraeremos 60 filas con distintos procedimientos. Para el muestreo aleatorio simple sin repetición, basta con hacer: indices <- sample(1:nrow(iris), 60) iris.muestreado <- iris[indices, ] Para realizar un muestreo aleatorio simple con repetición, basta con sustituir la variable indices anterior por: ...

4 de junio de 2009 · cgbellosta

Trucos SAS. Pasar de caracter a numérico y viceversa

Llega un gran número de visitas a AyD buscando cómo transformar en SAS variables carácter a numéricas y viceversa. Pero estas visitas están muy poco tiempo, y me he planteado que los mensajes que hay dedicados al uso de PUT e INPUT no son claros. Por este motivo, planteo un truco SAS de transformación de variables muy corto y concreto. Como es habitual, lo vemos con ejemplos: Transformar de carácter a numérico data uno; char = "2009"; num1 = char * 1; num2 = input(char, best16.); run; proc contents data=uno; run; Dos formas de hacerlo: multiplicando por 1 o bien con INPUT(variable, formato). ...

3 de junio de 2009 · rvaquerizo

Trucos Excel. Eliminar referencias del tipo IMPORTARDATOSDINAMICOS

A la hora de referenciar en Excel celdas de tablas dinámicas, es muy molesto encontrarnos con referencias del tipo +IMPORTARDATOSDINAMICOS("CLIENTES"; F3; "POTENCIAL"; 2). El IMPORTARDATOSDINAMICOS puede resultarnos muy molesto para trabajar con fórmulas que normalmente arrastramos. Para evitar este problema, hemos de colocar en la barra de herramientas el botón Generar GetPivotData. Esto lo hacemos ubicándonos en una barra de herramientas y, con el botón derecho, nos vamos a Personalizar; entre los botones de datos tenemos el de Generar GetPivotData, como vemos en la figura adjunta. Lo seleccionamos y lo pulsamos cuando deseemos no tener la dichosa fórmula del IMPORTARDATOSDINAMICOS, y así podemos hacer fórmulas más habituales. ...

21 de mayo de 2009 · rvaquerizo

Trucos SAS. Lista de datasets en macrovariable

Un uso frecuente del PROC SQL es la generación de macrovariables. En este ejemplo, vamos a crear una macrovariable con el nombre de los datasets de una librería SAS que contengan un determinado patrón. También es un ejemplo bastante práctico del uso de las vistas de SASHELP. Para entender mejor el truco, vamos a generar 20 ficheros ficticios con variables aleatorias en el directorio C:\temp: libname temp "C:\temp"; * GENERAMOS 20 DATASETS ALEATORIOS; %macro tablas_aleatorias; %do i = 1 %to 20; data temp.aleat&i.; do j = 1 to 100; persona = ranpoi(8, 23); importe1 = int(rand("uniform") * 1000); importe2 = int(rand("uniform") * 1000); tae = ranpoi(34, 2) + round(rand("uniform"), .1); output; end; drop j; run; %end; %mend tablas_aleatorias; %tablas_aleatorias; Esta macro hace un bucle y genera 20 datasets. A continuación, necesitamos crear un dataset que sea la concatenación de los 20 generados anteriormente. Podríamos poner los 20 nombres a mano, pero esto no es elegante. Para automatizar esto debemos hacer lo siguiente: ...

5 de febrero de 2009 · rvaquerizo

Macros SAS. Asignar permisos en Unix

Hoy os presento una macro especialmente útil para aquellos que trabajéis con SAS en arquitecturas UNIX. En ocasiones, generamos tablas SAS que han de ser modificadas por otros usuarios y éstos no disponen de los permisos adecuados para modificarlas. La siguiente macro lo que hace es un «change mode», un chmod que modifica los permisos de las tablas SAS de una librería. Por defecto, la macro hace un chmod 777, lo que significa que owner, group y others tienen permiso de lectura, escritura y ejecución. Si pusiéramos chmod 766, significaría que el owner tiene todos los permisos y el group y others permiso de lectura y escritura. chmod 744 significaría que el owner tiene todos los permisos y group y others únicamente permiso de lectura. ...

13 de enero de 2009 · rvaquerizo