Veröffentlicht am :
ETL CREATION_INTERNE

SAS-Tabellenrestrukturierung (Breit zu Lang und umgekehrt)

Dieser Code ist auch verfügbar auf: English Español Français
Wartet auf Validierung
Dieses didaktische Skript veranschaulicht zwei grundlegende Techniken der Datenmanipulation. Erstens transformiert es einen 'breiten' Datensatz, der Babygewichte in verschiedenen Monaten (Spalten weight3, weight6 usw.) enthält, in ein 'langes' Format (eine Zeile pro Monat pro Baby) unter Verwendung von Arrays (ARRAY) und einer iterativen Schleife in einem DATA-Schritt. Zweitens zeigt es, wie man mit der TRANSPOSE-Prozedur in das 'breite' Format zurückkehrt, wobei die aufeinanderfolgenden Schritte zur Verfeinerung des Ergebnisses (Verwendung von BY, ID und PREFIX) detailliert beschrieben werden.
Datenanalyse

Type : CREATION_INTERNE


Die 'baby_weight'-Daten werden statisch im Skript über die DATALINES-Anweisung generiert.

1 Codeblock
DATA STEP Data
Erklärung :
Erstellung des anfänglichen 'baby_weight'-Datensatzes, der IDs, Geschlecht und die Gewichte enthält, die nach 3, 6, 9 und 12 Monaten gemessen wurden.
Kopiert!
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 Codeblock
PROC PRINT
Erklärung :
Anzeige der Rohdaten zur Überprüfung.
Kopiert!
1PROC PRINT DATA = baby_weight;
2RUN;
3 Codeblock
DATA STEP Data
Erklärung :
Transformation 'Breit zu Lang'. Verwendung von zwei Arrays (ARRAY): eines für die festen Monate und eines für die Gewichtsvariablen. Eine DO-Schleife iteriert über die Arrays, und die OUTPUT-Anweisung generiert eine Zeile für jeden Monat.
Kopiert!
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 Codeblock
PROC PRINT
Erklärung :
Visualisierung des umstrukturierten Ergebnisses im langen Format.
Kopiert!
1PROC PRINT DATA = baby_weight_long;
2RUN;
5 Codeblock
DATA STEP Data
Erklärung :
Didaktisches Beispiel (Zwischenschritt oder inkorrekt für das Endziel), das die Iteration ohne die explizite OUTPUT-Anweisung bei jeder Iteration zeigt, was nicht die gewünschte 'lange' Struktur für alle Beobachtungen erzeugt.
Kopiert!
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 Codeblock
PROC PRINT
Erklärung :
Visualisierung des Zwischenschritts.
Kopiert!
1PROC PRINT DATA = baby_weight_long1;
2RUN;
7 Codeblock
PROC SORT Data
Erklärung :
Sortieren der 'langen' Daten nach ID und Monat, eine notwendige Voraussetzung für eine korrekte oder strukturierte Transponierung.
Kopiert!
1 
2PROC SORT
3DATA = baby_weight_long;
4BY id month;
5RUN;
6 
8 Codeblock
PROC TRANSPOSE Data
Erklärung :
Transponierungsschritt 1: Grundlegender Transponierungsversuch ohne Gruppierungsvariablen (BY), wodurch die gesamte Tabelle transponiert wird.
Kopiert!
1 
2PROC TRANSPOSE
3DATA = baby_weight_long
4out = baby_weight_wide;
5RUN;
6 
9 Codeblock
PROC TRANSPOSE Data
Erklärung :
Transponierungsschritt 2: Hinzufügen der BY-Anweisung 'id', um die Daten für jedes Thema separat zu transponieren.
Kopiert!
1PROC TRANSPOSE DATA = baby_weight_long
2 out = baby_weight_wide;
3 BY id;
4RUN;
10 Codeblock
PROC TRANSPOSE Data
Erklärung :
Transponierungsschritt 3: Hinzufügen der ID-Anweisung 'month', um die Werte der Variablen 'month' als Suffixe/Namen der neuen transponierten Spalten zu verwenden.
Kopiert!
1PROC TRANSPOSE DATA = baby_weight_long
2 out = baby_weight_wide;
3 BY id;
4 id month;
5RUN;
11 Codeblock
PROC TRANSPOSE Data
Erklärung :
Schritt 4 (Final): Verfeinerung der Transponierung mit der Option PREFIX='weight' zur Benennung der Spalten (z.B. weight3, weight6...) und Entfernung der automatischen Spalte _NAME_.
Kopiert!
1PROC TRANSPOSE DATA = baby_weight_long
2 out = baby_weight_wide (drop = _NAME_)
3 prefix = weight;
4 BY id;
5 id month;
6RUN;
12 Codeblock
PROC PRINT
Erklärung :
Visualisierung des Endergebnisses der Transponierung (Rückkehr zum breiten Format).
Kopiert!
1PROC PRINT DATA = baby_weight_wide;
2RUN;
Dieses Material wird von We Are Cas "wie besehen" zur Verfügung gestellt. Es gibt keine ausdrücklichen oder stillschweigenden Garantien hinsichtlich der Marktgängigkeit oder Eignung für einen bestimmten Zweck in Bezug auf die hierin enthaltenen Materialien oder Codes. We Are Cas ist nicht verantwortlich für Fehler in diesem Material, wie es jetzt existiert oder existieren wird, noch bietet We Are Cas technischen Support dafür an.