Dieser Artikel erläutert, wie diese Transformation durchgeführt, Summen robust berechnet und eine komplexe Sortierlogik angewendet wird.
Das Szenario
Stellen Sie sich eine Quelltabelle namens Population1 vor, die demografische Daten nach Nation und Geschlecht enthält:
Ziel ist es, eine Tabelle Population2 zu erhalten, die wie folgt strukturiert ist, mit einer Spalte für die Gesamtzahl und separaten Spalten für jedes Geschlecht:
Schritt 1: Die Datentransposition
Obwohl es technisch möglich ist, einen komplexen DATA-Schritt mit RETAIN-Anweisungen und Bedingungen zu verwenden, basiert die effizienteste und fehlerunanfälligste Methode auf der TRANSPOSE-Prozedur.
Vor der Transponierung ist es zwingend erforderlich, die Daten nach der Gruppierungsvariablen (hier Nation) zu sortieren.
/* 1. Tri préalable indispensable */
proc sort data = population1;
by Nation;
run;
/* 2. Transposition */
proc transpose data = population1 out = temp_pop(drop=_name_);
by Nation; /* La ligne devient unique par Nation */
id Gender; /* Les valeurs de Gender deviennent les noms de colonnes */
var Number; /* Ce sont ces chiffres qui remplissent les colonnes */
run;
1
/* 1. Tri préalable indispensable */
2
PROC SORTDATA = population1;
3
BY Nation;
4
RUN;
5
6
/* 2. Transposition */
7
PROC TRANSPOSEDATA = population1 out = temp_pop(drop=_name_);
8
BY Nation; /* La ligne devient unique par Nation */
9
id Gender; /* Les valeurs de Gender deviennent les noms de colonnes */
10
var Number; /* Ce sont ces chiffres qui remplissent les colonnes */
11
RUN;
An diesem Punkt enthält die Tabelle die Spalten Nation, Men und Women.
Schritt 2: Berechnung der Gesamtzahl und Handhabung fehlender Werte
Wenn eine der beiden Variablen (Men oder Women) einen fehlenden Wert (missing value) enthält, ist das Ergebnis der Operation ebenfalls fehlend.
Der empfohlene Ansatz
Population = sum(Men, Women);
1
Population = sum(Men, Women);
Die Funktion SUM() ignoriert fehlende Werte (behandelt sie als Nullen). Wenn Daten für Männer, aber nicht für Frauen verfügbar sind, zeigt die Gesamtsumme immer noch die Zahl der Männer anstelle eines Nullwerts, was im Allgemeinen das gewünschte Verhalten ist.
Nehmen wir nun eine spezifische Sortierbedingung an:
Sortieren Sie die Nationen nach absteigender Bevölkerungszahl.
Ausnahme: Eine spezifische Nation (z.B. "MyCountry") muss unbedingt an letzter Stelle erscheinen, unabhängig von ihrer Bevölkerungszahl.
Um dies zu erreichen, ohne die angezeigten Daten zu ändern, besteht der Trick darin, eine temporäre Sortiervariable (oder "Rank") zu erstellen.
Die Logik
Wir weisen dieser Sortiervariablen den Bevölkerungswert für alle Nationen zu, außer für die Ausnahme, der wir einen künstlich niedrigen Wert zuweisen (z.B. -1).
data population2;
set temp_pop;
/* Calcul de la somme robuste */
Population = sum(Men, Women);
/* Création de la variable de tri temporaire */
if Nation = "MyCountry" then SortKey = -1;
else SortKey = Population;
run;
/* Tri final sur la clé temporaire */
proc sort data = population2;
by descending SortKey;
run;
/* Nettoyage final : on retire la clé de tri */
data population2;
set population2(drop=SortKey);
run;
1
DATA population2;
2
SET temp_pop;
3
4
/* Calcul de la somme robuste */
5
Population = sum(Men, Women);
6
7
/* Création de la variable de tri temporaire */
8
IF Nation = "MyCountry"THEN SortKey = -1;
9
ELSE SortKey = Population;
10
RUN;
11
12
/* Tri final sur la clé temporaire */
13
PROC SORTDATA = population2;
14
BY descending SortKey;
15
RUN;
16
17
/* Nettoyage final : on retire la clé de tri */
18
DATA population2;
19
SET population2(drop=SortKey);
20
RUN;
Um eine Tabelle effizient zu transformieren:
Verwenden Sie PROC SORT und anschließend PROC TRANSPOSE mit einer ID-Anweisung, um Zeilen in Spalten zu transponieren.
Bevorzugen Sie die Funktion SUM() gegenüber dem Operator +, um die Verbreitung fehlender Werte zu vermeiden.
Für komplexe Sortierungen (wie das Erzwingen einer Zeile am Ende der Tabelle) erstellen Sie eine temporäre technische Variable, sortieren Sie danach und löschen Sie sie dann.
Avertissement important
Les codes et exemples fournis sur WeAreCAS.eu sont à but pédagogique. Il est impératif de ne pas les copier-coller aveuglément sur vos environnements de production. La meilleure approche consiste à comprendre la logique avant de l'appliquer. Nous vous recommandons vivement de tester ces scripts dans un environnement de test (Sandbox/Dev). WeAreCAS décline toute responsabilité quant aux éventuels impacts ou pertes de données sur vos systèmes.
SAS et tous les autres noms de produits ou de services de SAS Institute Inc. sont des marques déposées ou des marques de commerce de SAS Institute Inc. aux États-Unis et dans d'autres pays. ® indique un enregistrement aux États-Unis. WeAreCAS est un site communautaire indépendant et n'est pas affilié à SAS Institute Inc.
Ce site utilise des cookies techniques et analytiques pour améliorer votre expérience.
En savoir plus.