Formación

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 dataset y manejo ejemplos.

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 en ejemplos. Voy a generar dos datasets aleatorios de 2 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. La idea es comparar el uso de IF frente a WHERE en un MERGE. Realizamos uniones horizontales entre ambas tablas y filtraremos sólo las observaciones con un valor del autonumérico i par, lo haremos de 3 formas pofibles y analizaremos el log:

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.
  • Caracter: 5. ->EBCDIC5.
  • Numérico con 0: Z5. -> S370FZDU5.

De modo que para leer el fichero del Mainframe haremos:

Subconjuntos de variables con DROP/KEEP

Me han llegado algunas cuestiones sobre el uso de DROP/KEEP y a raiz de ello me he decidido a hacer un mensaje sencillo para que los usuarios menos avanzados de SAS puedan entender su funcionamiento. Sé que muchos lectores son expertos programadores pero también es necesario tener un rincón con código SAS menos avanzado para aquellos que se estén acercando a esta programación. En este caso partimos de una tabla de datos aleatorios con 102 variables y 10.000 observaciones que generamos mediante el siguiente programa SAS:

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 de SAS 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:

Oracle y SAS vía SQL pass trough

Para trabajar directamente con el motor de BBDD SAS cuenta con «Pass trougth». SAS crea una conexión al gestor de BBDD y desde ese momento podemos ejecutar sentencias de SQL directamente. Para seguir con la línea de trabajo habitual emplearemos ejemplos para conocer su funcionamiento. Los ejemplos que vamos a emplear serán sobre una BBDD Oracle ya que es muy común trabajar en entornos SAS con acceso a algún datamart de Oracle. Evidentemente la utilidad pass trough o pas thru convive perfectamente con

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:

Muestreo de datos con R

Recientemente, hubo una entrada en este blog sobre cómo realizar muestreos aleatorios en tablas SAS. En ésta 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 relizar un muestreo aleatorio simple con repetición , basta con sustituir la variable indices anterior por

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

Llega un gran número de visitas a AyD buscando como transformar en SAS variables caracter 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 caracter a numérico:

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…

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 y entre los botones de datos tenemos el Generar GetPivotData, como vemos en la figura adjunta. Lo seleccionamos y lo pulsamos cuando deseemos no tener la dichosa fórmula del importardatosdinamicos y podemos hacer fórmulas más habituales.

Trucos SAS. Muestras aleatorias con y sin reemplazamiento

Un ejemplo típico de SAS pero que creo que puede ayudar a conocer algunas funciones de SAS. Los ejemplos que planteo a continuación crean un dataset con 10.000 observaciones y sobre él vamos a crear dos subconjuntos de datos, dos muestras aleatorias del dataset de partida, una muestra sin reemplazamiento y otra muestra con reemplazamiento. Son dos ejemplos muy sencillos. Como siempre creo un dataset de forma aleatoria que me sirve de base para plantearos el truco:

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

En esta entrega vamos a seguimos trabajando con el análisis Cluster viendo más posibilidades que nos ofrece R. Para ello vamos a realizar un estudio de agrupamiento de países europeos en función de algunos indicadores básicos:

  • Superficie
  • Población
  • PIB (en mil de $)
  • Esperanza de vida
  • Índice de desarrollo humano
  • % Población en ciudad

Para este estudio contamos con este archivo excel . El primer paso por supuesto es crear un objeto en R: