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
tableEspecifica la tabla de entrada en formato largo que se va a reestructurar.
idEspecifica las variables de ID cuyos valores se utilizan para crear nuevas columnas en la tabla de salida ancha.
inputsEspecifica las variables de valor que se distribuirán en las nuevas columnas creadas por la variable 'id'.
casOutEspecifica la tabla de salida para almacenar los datos reestructurados en formato ancho.
groupByEspecifica una lista de variables que se utilizarán para agrupar los datos. Se crea una fila en la tabla de salida para cada grupo.
orderByTableEspecifica una tabla de ordenación precalculada (generalmente desde groupBy o groupByInfo) para optimizar el rendimiento.
maxPositionEspecifica el valor máximo de la variable de posición. Los registros con un valor de posición mayor son ignorados.
keyModifyModifica los valores de caracteres en las variables 'orderBy': 'U' para mayúsculas, 'C' para condensar blancos.
sumCalcula la suma de las variables especificadas para cada grupo y la añade a la tabla de salida.
meanCalcula la media de las variables especificadas para cada grupo y la añade a la tabla de salida.
minCalcula el mínimo de las variables especificadas para cada grupo y la añade a la tabla de salida.
maxCalcula el máximo de las variables especificadas para cada grupo y la añade a la tabla de salida.
nMissCalcula el número de valores perdidos para las variables especificadas en cada grupo y lo añade a la tabla de salida.
rangeCalcula el rango de las variables especificadas para cada grupo y lo añade a la tabla de salida.
frequencyNameEspecifica 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`?