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

Trucos SAS. Identificar registros duplicados

Muy rápido: para identificar registros duplicados existen múltiples formas. Seguramente haré un monográfico sobre este tema, pero de momento dejo una píldora: data aleatorio; do i = 1 to 100000; id = ranpoi(23456, 56781); if ranuni(5) >= 0.3 then output; end; run; proc sql; create table repes (where=(rep > 1)) as select id, count(id) as rep from aleatorio group by id; quit; proc sql; create table no_repes (where=(rep = 1)) as select id, count(id) as rep from aleatorio group by id; quit; Contamos registros y empleamos WHERE como opción de escritura. Muy fácil y perfectamente entendible. No puedo entretenerme más, que mi hija me reclama…

29 de octubre de 2009 · rvaquerizo

Macros SAS. Calcular la longitud de un número.

Ha llegado hoy una búsqueda que no ha permanecido en AyD ni 20 segundos. Quería calcular la longitud de un número con SAS. Como yo estoy aquí para compartir mis conocimientos y hay una persona que los necesita aquí está esta macro que espero o sea de utilidad: %macro largo(num); length(compress(put(&num.,32.))) %mend; Esta macro recibe un parámetro que ha de ser un número y lo que hace es transformarlo a carácter comprimido y calcular su longitud. Veamos ejemplos de uso: ...

27 de octubre 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

Truco SAS. Identificar el proceso en Unix con SYSJOBID

Un truco SAS muy rápido y que a algún compañero le ha venido muy bien y por eso lo pongo. La macrovariable &SYSJOBID nos identifica el job de UNIX que está corriendo en ese momento. Es una macro del sistema y se halla en el diccionario de macros de SAS. Tenemos una vista en SASHELP.VMACRO de cuáles son estas macros AUTOMATIC. Curiosead SASHELP, tiene algunas vistas muy interesantes; creo que ya he comentado algo sobre ellas. ...

26 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

Trucos SAS. Muestreo con PROC SURVEYSELECT

Hace varios días planteamos algún truco SAS para la realización de muestras aleatorias. Hoy planteo otro truco para lo mismo, pero empleando el procedimiento PROC SURVEYSELECT. Este procedimiento lo tenemos en el módulo STAT y tiene una sintaxis muy sencilla. Además, nos permite realizar muestreos estratificados de forma muy sencilla; mediante pasos DATA, el muestreo estratificado se complica. Como es habitual, vemos varios ejemplos partiendo de una tabla SAS aleatoria: data ejemplo; do id = 1 to 10000; oficina = ranpoi(5, 1); oficina = min(oficina, 3); importe = ranuni(8) * 1000; output; end; run; proc freq data=ejemplo; tables oficina; run; Tenemos un dataset con 10.000 observaciones que tiene un id, un importe y una oficina. El primer paso es crear una muestra aleatoria simple de tamaño 300; las sentencias adecuadas con el PROC SURVEYSELECT son: ...

15 de junio 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