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

Equivalencias entre PROC SQL y DATA en las uniones de tablas SAS

Muchos de los que llegan a programar con SAS son grandes expertos en SQL. Cuando dominas perfectamente un lenguaje, es difícil acostumbrarse a otro. Por ello, quiero plantear un artículo que estudie los tipos de uniones mediante pasos DATA y su análogo con el PROC SQL. Con ello espero que los profesionales que manejan el lenguaje SQL entiendan mejor el paso DATA. En mi línea habitual, creo dos datasets y manejo ejemplos. ...

12 de agosto de 2009 · rvaquerizo

En MERGE, ¿mejor IF o WHERE?

Cuando programo en SAS algún paso DATA como unión con MERGE, a modo de filtro empleo habitualmente IF en vez de WHERE. ¿El motivo? Mejor lo vemos con ejemplos. Voy a generar dos datasets aleatorios de dos millones de registros cada uno. Tendrán un campo autonumérico y un campo aleatorio que toma valores entre 0 y 1: options fullstimer; data uno; do i = 1 to 2000000; aleatorio1 = ranuni(9); output; end; run; data dos; do i = 1 to 2000000; aleatorio2 = ranuni(2); output; end; run; Empleamos la opción FULLSTIMER de SAS, que nos ofrece unas estadísticas más detalladas de cada ejecución en el log; fundamentalmente nos interesa el tiempo real de ejecución. Los datasets aleatorios tienen las mismas observaciones y una estructura muy parecida. ...

11 de agosto de 2009 · rvaquerizo

Truco SAS. Transformación EBCDIC (Mainframe)

Hay ocasiones en las que tenemos que leer directamente de entornos Mainframe ficheros DB2; conocemos la estructura de esos ficheros y necesitamos leerlos vía FTP. Para ello tenemos que tener en cuenta la transformación EBCDIC (Extended Binary Coded Decimal Interchange Code) a ASCII (American Standard Code for Information Interchange); esta transformación requiere las siguientes equivalencias entre formatos: Decimales empaquetados: PD5. -> S370FPD5. Enteros binarios: IB5. -> S370FIB5. Carácter: $5. -> $EBCDIC5. Numérico con ceros: Z5. -> S370FZDU5. De modo que para leer el fichero del Mainframe haremos: ...

15 de julio de 2009 · rvaquerizo

Manual. Curso introducción de R. Capítulo 17: Análisis Cluster con R (y III)

Ante el exito de los mensajes dedicados al análisis cluster la nueva entrega del manual de R la dedicaremos de nuevo al análisis de agrupamiento. Como es habitual trabajaremos con un ejemplo que podéis desgargaros aquí. Partimos de un archivo de texto delimitado por tabuladores con 46 frutas y la información que disponemos es: Nombre Intercambio de hidratos de carbono por gramo Kilocalorías Proteinas Grasas (información obtenida de www.diabetesjuvenil.com) El primer paso será crear un objeto en R que recoja los datos en el análisis. Para ello vamos a emplear la función read.table que deberá tener los parámetros adecuados al fichero de texto que deseamos leer: ...

8 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

Participaciones Preferentes de las Cajas de Ahorro

Iba a escribir un mensaje alertando de las nuevas emisiones de Participaciones Preferentes de las Cajas de Ahorro, pero me he encontrado con este foro en ElConfidencial.com. Atentos a los comentarios de jrwwpu17; simplemente una lección magistral de conocimiento de la red comercial de un banco. Merece la pena leer todos sus comentarios y aprender. Así empieza: Ahora bien, el tocomocho va a ser mayúsculo entre jubilados, principal público objetivo de estas emisiones. Dentro de dos años les veremos con las cacerolas en las oficinas de las cajas. Al tiempo… ...

26 de mayo 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

Manual. Curso introducción de R. Capítulo 15: Análisis Cluster con R (I)

El propósito del análisis de conglomerados (cluster en terminología inglesa) es agrupar las observaciones de forma que los datos sean muy homogéneos dentro de los grupos (mínima varianza) y que estos grupos sean lo más heterogéneos posible entre ellos (máxima varianza). De este modo obtenemos una clasificación de los datos multivariante con la que podemos comprender mejor los mismos y la población de la que proceden. Podemos realizar análisis cluster de casos, un análisis cluster de variables o un análisis cluster por bloques si agrupamos variables y casos. El análisis cluster se puede utilizar para: ...

23 de abril de 2009 · rvaquerizo