SAS - Datensätze zusammenführen
Mehrere SAS-Datensätze können basierend auf einer bestimmten gemeinsamen Variablen zu einem einzigen Datensatz zusammengeführt werden. Dies geschieht mit demMERGE Aussage und BYErklärung. Die Gesamtzahl der Beobachtungen im zusammengeführten Datensatz ist häufig geringer als die Summe der Beobachtungen im ursprünglichen Datensatz. Dies liegt daran, dass die Variablen aus beiden Datensätzen als ein Datensatz zusammengeführt werden, wenn der Wert der gemeinsamen Variablen übereinstimmt.
Es gibt zwei Voraussetzungen für das Zusammenführen von Datensätzen:
- Eingabedatensätze müssen mindestens eine gemeinsame Variable zum Zusammenführen haben.
- Eingabedatensätze müssen nach den allgemeinen Variablen sortiert werden, die zum Zusammenführen verwendet werden.
Syntax
Die grundlegende Syntax für die Anweisung MERGE und BY in SAS lautet -
MERGE Data-Set 1 Data-Set 2
BY Common Variable
Es folgt die Beschreibung der verwendeten Parameter -
Data-set1,Data-set2 sind Datensatznamen, die nacheinander geschrieben werden.
Common Variable ist die Variable, basierend auf deren übereinstimmenden Werten die Datensätze zusammengeführt werden.
Zusammenführen von Daten
Lassen Sie uns anhand eines Beispiels verstehen, wie Daten zusammengeführt werden.
Beispiel
Betrachten Sie zwei SAS-Datensätze, von denen einer die Mitarbeiter-ID mit Name und Gehalt und der andere die Mitarbeiter-ID mit Mitarbeiter-ID und Abteilung enthält. In diesem Fall können wir diese beiden Datensätze zusammenführen, um die vollständigen Informationen für jeden Mitarbeiter zu erhalten. Der endgültige Datensatz enthält weiterhin eine Beobachtung pro Mitarbeiter, enthält jedoch sowohl die Gehalts- als auch die Abteilungsvariablen.
# Data set 1
ID NAME SALARY
1 Rick 623.3
2 Dan 515.2
3 Mike 611.5
4 Ryan 729.1
5 Gary 843.25
6 Tusar 578.6
7 Pranab 632.8
8 Rasmi 722.5
# Data set 2
ID DEPT
1 IT
2 OPS
3 IT
4 HR
5 FIN
6 IT
7 OPS
8 FIN
# Merged data set
ID NAME SALARY DEPT
1 Rick 623.3 IT
2 Dan 515.2 OPS
3 Mike 611.5 IT
4 Ryan 729.1 HR
5 Gary 843.25 FIN
6 Tusar 578.6 IT
7 Pranab 632.8 OPS
8 Rasmi 722.5 FIN
Das obige Ergebnis wird erzielt, indem der folgende Code verwendet wird, in dem die gemeinsame Variable (ID) in der BY-Anweisung verwendet wird. Bitte beachten Sie, dass die Beobachtungen in beiden Datensätzen bereits in der ID-Spalte sortiert sind.
DATA SALARY;
INPUT empid name $ salary ;
DATALINES;
1 Rick 623.3
2 Dan 515.2
3 Mike 611.5
4 Ryan 729.1
5 Gary 843.25
6 Tusar 578.6
7 Pranab 632.8
8 Rasmi 722.5
;
RUN;
DATA DEPT;
INPUT empid dEPT $ ;
DATALINES;
1 IT
2 OPS
3 IT
4 HR
5 FIN
6 IT
7 OPS
8 FIN
;
RUN;
DATA All_details;
MERGE SALARY DEPT;
BY (empid);
RUN;
PROC PRINT DATA = All_details;
RUN;
Fehlende Werte in der übereinstimmenden Spalte
Es kann Fälle geben, in denen einige Werte der gemeinsamen Variablen nicht zwischen den Datensätzen übereinstimmen. In solchen Fällen werden die Datensätze immer noch zusammengeführt, geben jedoch fehlende Werte im Ergebnis an.
Beispiel
Betrachten Sie den Fall, dass die Mitarbeiter-ID 3 im Datensatzgehalt fehlt und die Mitarbeiter-ID 6 im Formulardatensatz DEPT fehlt. Wenn der obige Code angewendet wird, erhalten wir das folgende Ergebnis.ID NAME SALARY DEPT
1 Rick 623.3 IT
2 Dan 515.2 OPS
3 . . IT
4 Ryan 729.1 HR
5 Gary 843.25 FIN
6 Tusar 578.6 .
7 Pranab 632.8 OPS
8 Rasmi 722.5 FIN
Nur die Übereinstimmungen zusammenführen
Um die fehlenden Werte im Ergebnis zu vermeiden, können wir in Betracht ziehen, nur die Beobachtungen mit übereinstimmenden Werten für die gemeinsame Variable beizubehalten. Dies wird durch die Verwendung der erreicht INErklärung. Die Zusammenführungsanweisung des SAS-Programms muss geändert werden.
Beispiel
Im folgenden Beispiel ist die IN= Wert behält nur die Beobachtungen bei, bei denen die Werte aus beiden Datensätzen SALARY und DEPT Spiel.
DATA All_details;
MERGE SALARY(IN = a) DEPT(IN = b);
BY (empid);
IF a = 1 and b = 1;
RUN;
PROC PRINT DATA = All_details;
RUN;
Bei Ausführung des obigen SAS-Programms mit dem oben geänderten Teil erhalten wir die folgende Ausgabe.
1 Rick 623.3 IT
2 Dan 515.2 OPS
4 Ryan 729.1 HR
5 Gary 843.25 FIN
7 Pranab 632.8 OPS
8 Rasmi 722.5 FIN