Proc Sql

Trucos SAS. Trasponer con SQL para torpes

trasponer_sql1.png

Trasponer datos con SAS es un tema que genera un gran número de consultas en Google, por lo tanto genera un gran número de visitas a este blog. Ya hay un monográfico al respecto pero hoy quería volver a contar la trasposición de datos con SQL y SAS pero a un nivel más bajo para que sea lo más sencillo posible. En el ejemplo partimos de una tabla con 3 variables, un id_cliente, un campo tipo y un campo precio. Cada tipo tiene un precio y necesitamos que nuestro dataset tenga un registro por id_cliente y 3 precios, uno por cada tipo. El ejemplo en código SAS:

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:

Uso de CASE en PROC SQL

Vamos a estudiar como funciona CASE en un PROC SQL. Son palabras que aparecen en las búsquedas de Google y también he observado que el número de visitas al blog ha descendido en los últimos días y no sólo es debido a las vacaciones navideñas. El 60% de los clicks a AyD vienen por temas de SAS y en los últimos días tengo muy olvidados los mensajes de esta categoría. Además en el plazo de 2 días voy a dejar de trabajar con esta herramienta por lo que, es posible, que se reduzcan aun más. En fin, a lo que voy, CASE en el PROC SQL. Case nos permite crear campos condicionales dentro del bloque SELECT de una query de PROC SQL:

Trucos SAS. Unión de múltiples tablas SAS con un nombre parecido

Ha llegado una búsqueda y ponemos el truco. Creo que ya lo puse pero no está mal de recordarlo.

1. Creamos 20 datasets aleatorios con 10 observaciones cada uno:

%macro doit;

%do i=1 %to 20;

data zzdatos_&i.;

do i=1 to 10;

output;

end;

run;

%end;

%mend;

Un bucle fácil de macros ha generado 20 dataset que se llaman ZZDATOS_n. Recomiendo siempre emplear nombres «absurdos» para el trabajo con esta metodología.

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 1;

quit;

proc sql;

create table repes (where=(rep=1)) as select

id, count(id) as rep

from aleatorio

group by 1;

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…

Trucos SAS. Informes de valores missing

A continuación os planteo como truco SAS una duda que nos mandaba LILIANA. Ella necesitaba estudiar los valores perdidos de las tablas de una librería determinada. En este caso vamos a estudiar los missing de las variables numéricas de una librería, de forma análoga se puede hacer con las alfanuméricas. Como siempre vamos a trabajar con un ejemplo que parte de tablas generadas aleatoriamente. Comenzamos generando estas tablas:

libname datos "c:\temp\datos";
%macro aleatorios;

%do i=1 %to 5;

data datos.proyecto_&i.;

do id=1 to 200;

 if int(ranuni(0)*10) = 2 then importe1=.;

 else importe1=round(rand("uniform")*1000,.1);

 if int(ranuni(0)*10) > 0.3 then importe2=.;

 else importe2=round(rand("uniform")*130,.1);

length zona $15.;
if ranuni(0) <=.32 then zona=“España”;
else if ranuni(1) <= 0.32 then zona=“Cataluña”;
else zona=“Resto”;