dataShaping

longToWide

Beschreibung

Formt eine Tabelle, die dünne Datensätze enthält, in eine Tabelle mit breiten Datensätzen um.

dataShaping.longToWide / table={...} casOut={...} id={...} inputs={...} [attributes={{...}, ...}}] [charSeparatorChar="string"] [cumFreqName="string"] [frequencyName="string"] [groupIdName="string"] [journalTrace=true | false] [keyModify={"string-1" <, "string-2", ...>}] [maxPosition=integer] [max={"variable-name-1" <, "variable-name-2", ...>}] [mean={"variable-name-1" <, "variable-name-2", ...>}] [min={"variable-name-1" <, "variable-name-2", ...>}] [nMiss={"variable-name-1" <, "variable-name-2", ...>}] [noPrefix=true | false] [numSeparatorNum="string"] [orderByTable={...}] [range={"variable-name-1" <, "variable-name-2", ...>}] [sum={"variable-name-1" <, "variable-name-2", ...>}]
Einstellungen
ParameterBeschreibung
tableGibt die zu verwendende Eingabetabelle an.
idGibt die ID-Variablen an, die von der Tabelle in die casOut-Tabelle kopiert werden sollen.
inputsGibt die Eingabevariablen für die Analyse an.
casOutGibt die Einstellungen für eine Ausgabetabelle an.
attributesGibt die Variablenattribute an.
charSeparatorCharGibt ein Zeichen oder eine Zeichenfolge an, das/die zum Trennen von Teilen der casOut-Variablennamen verwendet wird, wenn beide CHAR- oder VARCHAR-Zeichenfolgen sind.
cumFreqNameGibt den Variablennamen für die kumulative Häufigkeit in der casOut-Tabelle an. Die Variable zeigt die kumulative Häufigkeit der Gruppe, zu der der Datensatz gehört, in Bezug auf die Eingabetabelle.
frequencyNameGibt den Variablennamen in der casOut-Tabelle an, der Häufigkeiten enthält. Andernfalls lautet diese Variable _Frequency_.
groupIdNameGibt die Variable in der Tabelle an, die Gruppen-IDs enthält.
journalTraceWenn auf True gesetzt, schreibt detaillierte Nachverfolgungsinformationen in das SAS-Protokoll.
keyModifyGibt an, ob Sie Zeichenwerte in den Variablen der orderBy-Variablenliste in Großbuchstaben (U) umwandeln, aufeinanderfolgende Leerzeichen zu einem einzigen Leerzeichen (C) verdichten oder beides möchten.
maxGibt die Variablen an, für die Sie den Maximalwert wünschen.
maxPositionGibt den maximalen Wert der Positionsvariable an. Datensätze, deren Positionsvariablenwert größer als der maxPosition-Wert ist, werden ignoriert.
meanGibt die Variablen an, für die Sie den Mittelwert wünschen.
minGibt die Variablen an, für die Sie den Minimalwert wünschen.
nMissGibt die Variablen an, für die Sie die Anzahl der fehlenden Werte wünschen.
noPrefixWenn auf True gesetzt und wenn dieselbe Variable, z. B. foo, für sum, min, max, nMiss oder mean angegeben ist, sind die Variablennamen in der casOut-Tabelle _sum_, _min_, _max_, _nMiss_, _mean_ anstelle von z. B. foo_sum, foo_min usw.
numSeparatorNumGibt ein Zeichen oder eine Zeichenfolge an, das/die zum Trennen von Teilen der casOut-Tabellennamen verwendet wird, wenn beide numerisch sind.
orderByTableGibt die orderByTable-Tabelle an, die durch Ausführen der Aktion groupBy oder groupByInfo erhalten wird.
rangeGibt die Variablen an, für die Sie den Wertebereich wünschen.
sumGibt die Variablen an, für die Sie die Werte summieren möchten.
Erstellen der 'long_data'-Tabelle

Dieser Schritt erstellt eine Beispieltabelle im 'langen' Format mit Studenten-IDs, Fachnamen und deren Noten. Diese Tabelle wird als Eingabe für die Umformung in ein 'breites' Format verwendet.

Kopiert!
1DATA mycas.long_data;
2 INFILE DATALINES delimiter=',';
3 LENGTH student_id 8 subject $ 10 grade 8;
4 INPUT student_id subject $ grade;
5 DATALINES;
61,Math,90
71,Science,85
81,History,88
92,Math,95
102,Science,92
112,History,89
12;
13RUN;

Beispiele

Dieses Beispiel zeigt, wie eine lange Tabelle, in der jedes Fach eine eigene Zeile pro Schüler hat, in eine breite Tabelle umgewandelt wird, in der jeder Schüler eine einzige Zeile mit separaten Spalten für die Noten der einzelnen Fächer hat.

SAS® / CAS-Code Code wartet auf Validierung durch die Community
Kopiert!
1PROC CAS;
2 dataShaping.longToWide /
3 TABLE={name='long_data'},
4 id={'student_id'},
5 inputs={{name='grade'}},
6 casOut={name='wide_data', replace=true};
7RUN;
8 TABLE.fetch / TABLE='wide_data';
9RUN;
Ergebnis :
Die Ausgabetabelle 'wide_data' enthält eine Zeile pro 'student_id', mit Spalten für die Noten in 'History', 'Math' und 'Science'.

Dieses Beispiel demonstriert die Verwendung einer 'orderByTable', um die Reihenfolge der neuen Spalten in der breiten Ausgabetabelle explizit zu steuern. Zuerst wird 'groupByInfo' verwendet, um eine Ordnungstabelle zu erstellen, die dann von 'longToWide' genutzt wird.

SAS® / CAS-Code Code wartet auf Validierung durch die Community
Kopiert!
1PROC CAS;
2 dataShaping.groupByInfo /
3 TABLE='long_data'
4 inputs={{name='subject'}}
5 casOut={name='myOrder', replace=true};
6 dataShaping.longToWide /
7 TABLE={name='long_data'}
8 id={'student_id'}
9 inputs={{name='grade'}}
10 orderByTable={name='myOrder'}
11 casOut={name='wide_data_ordered', replace=true};
12RUN;
13 TABLE.fetch / TABLE='wide_data_ordered';
14RUN;
Ergebnis :
Die resultierende Tabelle 'wide_data_ordered' hat Spalten, die basierend auf der in 'myOrder' definierten Reihenfolge der Fächer angeordnet sind.

Dieses Beispiel formt nicht nur die Tabelle um, sondern berechnet auch aggregierte Statistiken (Mittelwert und Summe) für die Noten jedes Schülers über alle Fächer hinweg.

SAS® / CAS-Code Code wartet auf Validierung durch die Community
Kopiert!
1PROC CAS;
2 dataShaping.longToWide /
3 TABLE={name='long_data'},
4 id={'student_id'},
5 inputs={{name='grade'}},
6 mean={'grade'},
7 sum={'grade'},
8 casOut={name='wide_data_stats', replace=true};
9RUN;
10 TABLE.fetch / TABLE='wide_data_stats';
11RUN;
Ergebnis :
Die Ausgabetabelle 'wide_data_stats' enthält die breiten Notenspalten sowie neue Spalten 'grade_mean' und 'grade_sum', die den Durchschnitt und die Summe der Noten für jeden Schüler darstellen.

FAQ

Was ist der Hauptzweck der `longToWide`-Aktion?
Welche Funktion hat der `id`-Parameter?
Wie können Statistiken wie der Mittelwert oder die Summe während der Umformung berechnet werden?
Was bewirkt der `groupBy`-Parameter?
Wie kann die Reihenfolge der Spalten in der Ausgabetabelle gesteuert werden?