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!
data baby_weight;
input id gender $ weight3 weight6 weight9 weight12;
datalines;
1001 F 9 13 16 17
1002 F 11 16 17 20
1003 M 17 20 23 24
1004 F 16 18 21 22
1005 M 11 15 16 18
1006 M 17 21 25 26
1007 M 16 17 19 21
1008 F 15 16 18 19
;
run;
1
DATA baby_weight;
2
INPUT id gender $ weight3 weight6 weight9 weight12;
3
DATALINES;
4
1001 F 9131617
5
1002 F 11161720
6
1003 M 17202324
7
1004 F 16182122
8
1005 M 11151618
9
1006 M 17212526
10
1007 M 16171921
11
1008 F 15161819
12
;
13
RUN;
2 Codeblock
PROC PRINT
Erklärung : Anzeige der Rohdaten zur Überprüfung.
Kopiert!
proc print data = baby_weight;
run;
1
PROC PRINTDATA = baby_weight;
2
RUN;
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!
data baby_weight_long (keep = id gender month weight);
set baby_weight;
array months{4} (3 6 9 12);
array weights{4} weight3--weight12;
do i = 1 to 4;
month = months{i};
weight = weights{i};
output;
end;
run;
1
DATA baby_weight_long (keep = id gender month weight);
2
SET baby_weight;
3
array months{4} (36912);
4
array weights{4} weight3--weight12;
5
DO i = 1 to 4;
6
month = months{i};
7
weight = weights{i};
8
OUTPUT;
9
END;
10
RUN;
4 Codeblock
PROC PRINT
Erklärung : Visualisierung des umstrukturierten Ergebnisses im langen Format.
Kopiert!
proc print data = baby_weight_long;
run;
1
PROC PRINTDATA = baby_weight_long;
2
RUN;
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!
data baby_weight_long1;
set baby_weight;
array weights{4} weight3--weight12;
do i = 1 to 4;
weight = weights{i};
end;
run;
1
DATA 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;
7
RUN;
6 Codeblock
PROC PRINT
Erklärung : Visualisierung des Zwischenschritts.
Kopiert!
proc print data = baby_weight_long1;
run;
1
PROC PRINTDATA = baby_weight_long1;
2
RUN;
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!
proc sort data = baby_weight_long;
by id month;
run;
1
2
PROC SORT
3
DATA = baby_weight_long;
4
BY id month;
5
RUN;
6
8 Codeblock
PROC TRANSPOSE Data
Erklärung : Transponierungsschritt 1: Grundlegender Transponierungsversuch ohne Gruppierungsvariablen (BY), wodurch die gesamte Tabelle transponiert wird.
Kopiert!
proc transpose data = baby_weight_long
out = baby_weight_wide;
run;
1
2
PROC TRANSPOSE
3
DATA = baby_weight_long
4
out = baby_weight_wide;
5
RUN;
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!
proc transpose data = baby_weight_long
out = baby_weight_wide;
by id;
run;
1
PROC TRANSPOSEDATA = baby_weight_long
2
out = baby_weight_wide;
3
BY id;
4
RUN;
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!
proc transpose data = baby_weight_long
out = baby_weight_wide;
by id;
id month;
run;
1
PROC TRANSPOSEDATA = baby_weight_long
2
out = baby_weight_wide;
3
BY id;
4
id month;
5
RUN;
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!
proc transpose data = baby_weight_long
out = baby_weight_wide (drop = _NAME_)
prefix = weight;
by id;
id month;
run;
1
PROC TRANSPOSEDATA = baby_weight_long
2
out = baby_weight_wide (drop = _NAME_)
3
prefix = weight;
4
BY id;
5
id month;
6
RUN;
12 Codeblock
PROC PRINT
Erklärung : Visualisierung des Endergebnisses der Transponierung (Rückkehr zum breiten Format).
Kopiert!
proc print data = baby_weight_wide;
run;
1
PROC PRINTDATA = baby_weight_wide;
2
RUN;
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.
SAS und alle anderen Produkt- oder Dienstleistungsnamen von SAS Institute Inc. sind eingetragene Marken oder Marken von SAS Institute Inc. in den USA und anderen Ländern. ® zeigt die Registrierung in den USA an. WeAreCAS ist eine unabhängige Community-Site und nicht mit SAS Institute Inc. verbunden.
Diese Website verwendet technische und analytische Cookies, um Ihre Erfahrung zu verbessern.
Mehr erfahren.