Publicado el :
ETL CREACION_INTERNA

Reestructuración de tablas SAS (de Ancho a Largo y viceversa)

Este código también está disponible en: Deutsch English Français
En espera de validación
Este script pedagógico ilustra dos técnicas fundamentales de manipulación de datos. Primero, transforma un conjunto de datos 'ancho' que contiene los pesos de los bebés en diferentes meses (columnas weight3, weight6, etc.) a un formato 'largo' (una fila por mes por bebé) utilizando arrays (ARRAY) y un bucle iterativo en un paso DATA. Segundo, muestra cómo volver al formato 'ancho' utilizando el procedimiento TRANSPOSE, detallando los pasos sucesivos para refinar el resultado (uso de BY, ID y PREFIX).
Análisis de datos

Type : CREACION_INTERNA


Los datos 'baby_weight' se generan estáticamente en el script a través de la instrucción DATALINES.

1 Bloque de código
DATA STEP Data
Explicación :
Creación del conjunto de datos inicial 'baby_weight' que contiene los identificadores, el género y los pesos medidos a los 3, 6, 9 y 12 meses.
¡Copiado!
1DATA baby_weight;
2 INPUT id gender $ weight3 weight6 weight9 weight12;
3DATALINES;
41001 F 9 13 16 17
51002 F 11 16 17 20
61003 M 17 20 23 24
71004 F 16 18 21 22
81005 M 11 15 16 18
91006 M 17 21 25 26
101007 M 16 17 19 21
111008 F 15 16 18 19
12;
13RUN;
2 Bloque de código
PROC PRINT
¡Copiado!
1PROC PRINT DATA = baby_weight;
2RUN;
3 Bloque de código
DATA STEP Data
¡Copiado!
1DATA baby_weight_long (keep = id gender month weight);
2 SET baby_weight;
3 array months{4} (3 6 9 12);
4 array weights{4} weight3--weight12;
5 DO i = 1 to 4;
6 month = months{i};
7 weight = weights{i};
8 OUTPUT;
9 END;
10RUN;
4 Bloque de código
PROC PRINT
¡Copiado!
1PROC PRINT DATA = baby_weight_long;
2RUN;
5 Bloque de código
DATA STEP Data
¡Copiado!
1DATA baby_weight_long1;
2 SET baby_weight;
3 array weights{4} weight3--weight12;
4 DO i = 1 to 4;
5 weight = weights{i};
6 END;
7RUN;
6 Bloque de código
PROC PRINT
¡Copiado!
1PROC PRINT DATA = baby_weight_long1;
2RUN;
7 Bloque de código
PROC SORT Data
¡Copiado!
1 
2PROC SORT
3DATA = baby_weight_long;
4BY id month;
5RUN;
6 
8 Bloque de código
PROC TRANSPOSE Data
¡Copiado!
1 
2PROC TRANSPOSE
3DATA = baby_weight_long
4out = baby_weight_wide;
5RUN;
6 
9 Bloque de código
PROC TRANSPOSE Data
¡Copiado!
1PROC TRANSPOSE DATA = baby_weight_long
2 out = baby_weight_wide;
3 BY id;
4RUN;
10 Bloque de código
PROC TRANSPOSE Data
¡Copiado!
1PROC TRANSPOSE DATA = baby_weight_long
2 out = baby_weight_wide;
3 BY id;
4 id month;
5RUN;
11 Bloque de código
PROC TRANSPOSE Data
¡Copiado!
1PROC TRANSPOSE DATA = baby_weight_long
2 out = baby_weight_wide (drop = _NAME_)
3 prefix = weight;
4 BY id;
5 id month;
6RUN;
12 Bloque de código
PROC PRINT
¡Copiado!
1PROC PRINT DATA = baby_weight_wide;
2RUN;
Este material se proporciona "tal cual" por We Are Cas. No hay garantías, expresas o implícitas, en cuanto a la comerciabilidad o idoneidad para un propósito particular con respecto a los materiales o el código contenidos en este documento. We Are Cas no es responsable de los errores en este material tal como existe ahora o existirá, ni We Are Cas proporciona soporte técnico para el mismo.