Transposición de Datos José Luis López Escalera, Iusacell Resumen Por medio de este poster conoceremos las diferentes técnicas para poder transponer información de filas a columnas PROC SQL Proc transpose data=VENTAS out= TRANS_V(drop= _NAME_ ) Prefix =IMP_VENTAS_; var IMP_VENTAS id PERIODO; by ID_DEP; run; Lo que hacemos es de acuerdo al periodo seleccionamos los registros que coincidan con este periodo usamos el campo del que deseamos un registro único (ID_DEP) y operamos con los campos que vamos a transponer. Cuando los datos de algún periodo en particular no existen esta transposición arroja datos nulos depende de las necesidades si el dato se queda así o quizás se puede llenar con ceros en el mismo proceso(como en el ejemplo) PROC SORT DATA= TRANS_VENTAS;BY ID_DEP;RUN; Introducción La transposición de datos es una técnica usada ya sea para presentar información de alguna forma mas digerible o para poder poner un solo registro información de un cierto numero de periodos Existen básicamente tres formas diferentes de transponer datos • • • Con el Proc Transponse (procedimiento diseñado por SAS para poder efectuar esta operación) Con un Paso Data Con un Proc SQL Proc transpose data=VENTAS out= TRANS_G(drop= _NAME_ ) Prefix =IMP_GASTOS_; var IMP_GASTOS id PERIODO; by ID_DEP; run; El procedimiento TRANSPOSE crea un conjunto de datos de salida establecidos por la reestructuración de los valores de un conjunto de datos SAS, la transposición de las variables seleccionadas en las observaciones. El procedimiento TRANSPOSE a menudo puede eliminar la necesidad de escribir demasiado código. Cuando los datos de algún periodo en particular no existen esta transposición arroja datos nulos depende de las necesidades si el dato se queda así o quizás se puede llenar con ceros con un proceso posterior Ventajas: • No se puede conocer el periodo que se va a transponer esto facilita la escritura de código • Se puede realizar una transposición columnas a filas ó filas a columnas • Desventajas: • Se debe de conocer el numero de periodos que se van a transponer DATA TRANS_VENTAS; MERGE TRANS_V TRANS_G; BY ID_DEP; RUN; • Se debe de escribir mucho código para lograr este proceso. PROC SQL; CREATE TABLE TRANS_VENTAS AS SELECT ID_DEP, CASE WHEN (PERIODO= 1) then IMP_VENTAS IMP_VENTAS_P1, CASE WHEN (PERIODO= 1) then IMP_GASTOS IMP_ GASTOS _P1, CASE WHEN (PERIODO= 2) then IMP_VENTAS IMP_VENTAS_P2, CASE WHEN (PERIODO= 2) then IMP_GASTOS IMP_ GASTOS _P2, CASE WHEN (PERIODO=3) then IMP_VENTAS iMP_VENTAS_P3, CASE WHEN (PERIODO=3) then IMP_GASTOS IMP_ GASTOS _P3 FROM VENTAS GROUP BY ID_DEP QUIT; Paso Data (Merge con la misma tabla) Cuando los datos de algún periodo en particular no existen esta transposición arroja datos nulos depende de las necesidades si el dato se queda así o quizás se puede llenar con ceros con un proceso posterior ELSE 0 END AS ELSE 0 END AS ELSE 0 END AS ELSE 0 END AS ELSE 0 END AS ELSE 0 END AS Referencias • http://analisisydecision.es/truco-sas-transponer-tablas-conproc-transpose-data-o-proc-sql/ • http://sct.uab.cat/estadistica/sites/sct.uab.cat.estadistica/files/ ManualSAS.PDF • http://support.sas.com/documentation/cdl/en/proc/61895/HT ML/default/viewer.htm#transpose-overview.htm Ventajas: • Se pueden transponer el número de variables que sea en el mismo paso Data • http://analisisydecision.es/trucos-sas-trasponer-con-sql-paratorpes/ • Es el método más rápido de los tres siempre y cuando la tabla esta ordenada • http://www.webmining.cl/2011/06/10-funciones-potentespara-proc-sql/ . Desventajas: • Se debe de conocer el numero de periodos que se van a transponer • La tabla debe de estar ordenado por el id esto puede ser muy lento si la tablas es muy grande ya que previamente hay que ejecutar un Proc Sort por el id Se debe de escribir mucho código para lograr este proceso. Desventajas: • Solo se puede transponer una variable a la vez lo cual hace muy lento el proceso en tablas muy grandes cuando se quiere transponer mas de una variable ya que se tiene que efectuar las transposición de una variable y posteriormente de las demás , realizar ordenamiento de cada Dataset y realizar un merge entre todas. • No se pueden realizar cálculos como sumas , para eso seria mas eficiente realizarlo de otra forma • VENTAS(RENAME=( IMP_VENTAS =IMP_VENTAS_2 IMP_GASTOS=IMP_GASTOS_2) where=(PERIODO=2)) VENTAS(RENAME=( IMP_VENTAS =IMP_VENTAS_3 IMP_GASTOS=IMP_GASTOS_3) where=(PERIODO=3)) ; BY ID_DEP; RUN; Estructura Básica: En prefix indicamos el prefijo que deseamos para la nueva variable. En el dataset de salida eliminamos la variable nombre que genera SAS por default. Evidentemente transponemos por el id_dep y en la instrucción ID ponemos el campo que identifica las columnas(en nuestro caso periodo. Se puede sumar, promediar, calcular desviación estándar, valor máximo y mínimo PROC SORT DATA= TRANS_GASTOS;BY ID_DEP;RUN; • Este es el proceso más lento de los tres consume muchos recursos El Paso Data es el más eficiente, el PROC SQL tarda un 75% más y el TRANSPOSE un 250% más. Por otro lado el TRANSPOSE podría ser mejor en códigos automáticos ya que no necesitamos parámetros, pero si trabajamos con macros al final el paso DATA es más efectivo Ventajas: • Se pueden transponer el número de variables que sea Esta forma de transponer es la unión horizontal de una tabla consigo misma tantas veces como periodos disponemos por id_dep. Necesitamos renombrar la variable para no quedarnos con sólo una columna esto con el fin de obtener varias columnas PROC TRANPOSE Conclusiones Información de Contacto José Luis López Escalera Iusacell [email protected] www.iusacell.com.mx DATA TRANS_VENTAS(drop=(IMP_VENTAS IMP_GASTOS PERIODO) ) ; MERGE VENTAS(RENAME=( IMP_VENTAS =IMP_VENTAS_1 IMP_GASTOS=IMP_GASTOS_1) where=(PERIODO=1)) ID_DEP 1 2 3 4 1 2 3 4 1 2 3 4 IMP_VENTAS $ 15.00 $ 75.00 $ 180.00 $ 45.00 $ 7.00 $ 60.00 $ 200.00 $ 19.00 $ 47.00 $ 60.00 $ 115.00 $ 69.00 IMP_GASTOS PERIODO $ 7.00 1 $ 50.00 1 $ 100.00 1 $ 28.00 1 $ 4.00 2 $ 40.00 2 $ 115.00 2 $ 8.00 2 $ 30.00 3 $ 40.00 3 $ 85.00 3 $ 45.00 3 VENTAS ID_DEP 1 2 3 4 IMP_VENTAS_1 IMP_GASTOS_1 IMP_VENTAS_2 IMP_GASTOS_2 IMP_VENTAS_3 IMP_GASTOS_4 $ 15.00 $ 7.00 $ 7.00 $ 4.00 $ 47.00 $ 30.00 $ 75.00 $ 50.00 $ 60.00 $ 40.00 $ 60.00 $ 40.00 $ 180.00 $ 100.00 $ 200.00 $ 115.00 $ 115.00 $ 85.00 $ 45.00 $ 28.00 $ 19.00 $ 8.00 $ 69.00 $ 45.00 TRANS_VENTAS