Trucos SAS. Trasponer con SQL para torpes

21 Nov

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:

data datos;
input id_cliente $ tipo precio;
datalines;
A 1 100
A 2 150
A 3 120
B 1 200
B 2 250
B 3 220
C 1 300
C 2 350
C 3 320
D 1 400
D 2 450
D 3 420
;run;

Esta es nuestra tabla de partida, ahora vamos a generar tres variables en función de la variable tipo:

data datos2;
set datos;
precio_1 = (tipo = 1) * precio;
precio_2 = (tipo = 2) * precio;
precio_3 = (tipo = 3) * precio;
run;

trasponer_sql2.png

Si vemos la tabla resultante tiene una forma de matriz con precios y ceros en función de la variable tipo. Ahora si sumarizamos esas variables y agrupamos por el id_cliente la forma de la tabla resultante es el objetivo deseado:

proc sql;
create table tdatos as select
id_cliente,
sum(precio_1) as precio_1,
sum(precio_2) as precio_2,
sum(precio_3) as precio_3
from datos2
group by 1;
quit;

Bien, pues esta es la “filosofía” de la trasposición con SAS en SQL. Pero esto lo podemos hacer en un solo paso:

proc sql;
create table tdatos as select
id_cliente,
sum((tipo=1)*precio) as precio_1,
sum((tipo=2)*precio) as precio_2,
sum((tipo=3)*precio) as precio_3
from datos
group by 1;
quit;

Y así podemos trasponer de forma sencilla en SAS sin emplear el PROC TRASPOSE que tiene alguna que otra limitación. Y por supuesto nos sirve para trasponer siempre que utilicemos SQL, con ORACLE, POSTGRES,… Creo que esta vez es muy sencillo de entender. Saludos.

3 respuestas a «Trucos SAS. Trasponer con SQL para torpes»

  1. en el caso de tener numero de cliente, y varios folios que corresponde a sus compras y otro campo donde viene el tipo de compra, si quiero transponer y dejar mi base a nivel cliente, donde solo me quede la variable transpuesta que es el tipo de compra y el resultado me de por cada cliente cuantas compras hizo por cada tipo de compra.

  2. amigo y si quiero transponer dos filas .. en tu ejemplo solo transpones el precio, desearia que transpongas el tipo y precio.

    SALUDOS

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *