dataShaping

longToWide

Descripción

Reestructura una tabla que contiene registros delgados (formato largo) en una tabla que contiene registros anchos (formato ancho). Esta operación es común en la preparación de datos, donde se pivota una tabla basada en los valores de una columna de ID para crear nuevas columnas, haciendo que los datos sean más anchos y a menudo más fáciles de analizar para ciertos tipos de modelos.

dataShaping.longToWide / table={caslib="string", name="string", groupBy={...}, where="string"}, id={"variable-1", "variable-2", ...}, inputs={"variable-1", "variable-2", ...}, casOut={caslib="string", name="string", replace=true|false}, orderByTable={caslib="string", name="string", where="string"}, maxPosition=integer, keyModify={"U"|"C"}, sum={"variable-1", "variable-2", ...}, min={"variable-1", "variable-2", ...}, max={"variable-1", "variable-2", ...}, nMiss={"variable-1", "variable-2", ...}, mean={"variable-1", "variable-2", ...}, range={"variable-1", "variable-2", ...}, frequencyName="string", cumFreqName="string", groupIdName="string", noPrefix=true|false, charSeparatorChar="string", numSeparatorNum="string";
Parámetros
ParámetroDescripción
table Especifica la tabla de entrada en formato largo que se va a reestructurar.
id Especifica las variables de ID cuyos valores se utilizan para crear nuevas columnas en la tabla de salida ancha.
inputs Especifica las variables de valor que se distribuirán en las nuevas columnas creadas por la variable 'id'.
casOut Especifica la tabla de salida para almacenar los datos reestructurados en formato ancho.
groupBy Especifica una lista de variables que se utilizarán para agrupar los datos. Se crea una fila en la tabla de salida para cada grupo.
orderByTable Especifica una tabla de ordenación precalculada (generalmente desde groupBy o groupByInfo) para optimizar el rendimiento.
maxPosition Especifica el valor máximo de la variable de posición. Los registros con un valor de posición mayor son ignorados.
keyModify Modifica los valores de caracteres en las variables 'orderBy': 'U' para mayúsculas, 'C' para condensar blancos.
sum Calcula la suma de las variables especificadas para cada grupo y la añade a la tabla de salida.
mean Calcula la media de las variables especificadas para cada grupo y la añade a la tabla de salida.
min Calcula el mínimo de las variables especificadas para cada grupo y la añade a la tabla de salida.
max Calcula el máximo de las variables especificadas para cada grupo y la añade a la tabla de salida.
nMiss Calcula el número de valores perdidos para las variables especificadas en cada grupo y lo añade a la tabla de salida.
range Calcula el rango de las variables especificadas para cada grupo y lo añade a la tabla de salida.
frequencyName Especifica el nombre de la variable en la tabla de salida que contendrá las frecuencias.
Creación de una Tabla Larga de Ejemplo

Este código SAS crea una tabla de datos de ejemplo en formato 'largo' llamada 'long_data'. Esta tabla contiene un identificador de grupo ('id'), una variable de tiempo ('time') y una variable de valor ('value'). Luego, se carga en CAS para ser utilizada en los ejemplos de transformación.

¡Copiado!
1DATA long_data;
2 LENGTH time $10;
3 DO id = 1 to 3;
4 DO time = 'Q1', 'Q2', 'Q3', 'Q4';
5 value = (id * 100) + int(rand('UNIFORM') * 50);
6 OUTPUT;
7 END;
8 END;
9 RUN;
10 PROC CASUTIL;
11 load DATA=long_data outcaslib="casuser" casout="long_data" replace;
12 RUN;

Ejemplos

Este ejemplo transforma la tabla 'long_data' a un formato ancho 'wide_data'. Utiliza 'id' como la variable de agrupación y los valores de 'time' para crear nuevas columnas. La variable 'value' se distribuye en estas nuevas columnas.

Código SAS® / CAS Código en espera de validación por la comunidad
¡Copiado!
1PROC CAS;
2 dataShaping.longToWide /
3 TABLE={name="long_data", groupBy={"id"}},
4 id={"time"},
5 inputs={"value"},
6 casOut={name="wide_data", replace=true};
7 RUN;
Resultado :
La tabla de salida 'wide_data' contendrá una fila por cada 'id' único. Tendrá nuevas columnas como 'value_Q1', 'value_Q2', 'value_Q3' y 'value_Q4', cada una conteniendo el valor correspondiente de la tabla original.

Además de transformar la tabla de largo a ancho, este ejemplo calcula estadísticas agregadas (suma, media y máximo) para la variable 'value' para cada grupo 'id'. Los nombres de las nuevas columnas de estadísticas se generan automáticamente añadiendo un sufijo al nombre de la variable de entrada (por ejemplo, 'value_sum').

Código SAS® / CAS Código en espera de validación por la comunidad
¡Copiado!
1PROC CAS;
2 dataShaping.longToWide /
3 TABLE={name="long_data", groupBy={"id"}},
4 id={"time"},
5 inputs={"value"},
6 sum={"value"},
7 mean={"value"},
8 max={"value"},
9 casOut={name="wide_data_stats", replace=true};
10 RUN;
Resultado :
La tabla de salida 'wide_data_stats' incluirá las columnas pivotadas ('value_Q1', 'value_Q2', etc.) así como nuevas columnas con las estadísticas calculadas: 'value_sum', 'value_mean' y 'value_max' para cada 'id'.

Este ejemplo demuestra cómo personalizar los nombres de las columnas de salida. 'noPrefix=true' elimina el prefijo del nombre de la variable 'inputs' de las columnas de estadísticas. 'charSeparatorChar' se establece en '_' para unir el nombre de la variable 'id' y la variable de valor.

Código SAS® / CAS Código en espera de validación por la comunidad
¡Copiado!
1PROC CAS;
2 dataShaping.longToWide /
3 TABLE={name="long_data", groupBy={"id"}},
4 id={"time"},
5 inputs={"value"},
6 sum={"value"},
7 mean={"value"},
8 noPrefix=true,
9 charSeparatorChar="_",
10 casOut={name="wide_data_custom", replace=true};
11 RUN;
Resultado :
La tabla de salida 'wide_data_custom' tendrá columnas como 'Q1', 'Q2', etc. (en lugar de 'value_Q1') y columnas de estadísticas llamadas '_sum' y '_mean' (en lugar de 'value_sum' y 'value_mean').

FAQ

¿Cuál es el propósito de la acción longToWide?
¿Cuáles son los parámetros clave para usar la acción `longToWide`?
¿Cómo puedo calcular estadísticas como la suma o la media durante la transformación?
¿Cómo puedo controlar los nombres de las nuevas variables en la tabla ancha de salida?
¿Para qué sirve el parámetro `orderByTable`?