Veröffentlicht am :
Datenmanipulation CREATION_INTERNE

Beispiele: Match-Merge von Daten

Dieser Code ist auch verfügbar auf: English Español Français
Wartet auf Validierung
Das Match-Merge ist eine leistungsstarke Technik zum Kombinieren von SAS©-Datasets. Es ermöglicht das Verknüpfen von Beobachtungen aus zwei oder mehr Datasets basierend auf den Werten einer oder mehrerer gemeinsamer Variablen (BY-Variablen). Die Eingabe-Datasets müssen vor der Zusammenführung nach den BY-Variablen sortiert oder indiziert werden. Dieser Prozess kann mit einem INNER JOIN in SQL verglichen werden, wenn alle Werte der BY-Variablen übereinstimmen und es keine Duplikate gibt. SAS© behält die Werte aller Variablen im Programm-Datenvektor bei, auch wenn der Wert fehlt oder nicht zugeordnet ist. Wenn eine letzte Beobachtung einer BY-Gruppe in einem Dataset gelesen wird, behält SAS© ihre Werte für alle für dieses Dataset eindeutigen Variablen, bis alle Beobachtungen dieser BY-Gruppe in allen Datasets gelesen wurden. Die Gesamtzahl der Beobachtungen im endgültigen Dataset ist die Summe der maximalen Anzahl von Beobachtungen in einer BY-Gruppe aus einem der Datasets.
Datenanalyse

Type : CREATION_INTERNE


Die Beispiele verwenden generierte Daten (Datalines) oder SASHELP.

1 Codeblock
DATA STEP / PROC SORT Data
Erklärung :
Dieses Beispiel veranschaulicht ein einfaches Match-Merge, bei dem die MERGE-Anweisung zusammen mit der BY-Anweisung verwendet wird, um zwei Datasets ('animal' und 'plant') basierend auf der gemeinsamen Variablen 'common' zu verknüpfen. Dies ist ein Eins-zu-Eins-Merge, da keine der Eingabe-Datasets duplizierte Werte für die BY-Variable enthalten. Die Datasets werden vor dem Merge zuerst nach 'common' sortiert.
Kopiert!
1DATA animal;
2 INPUT common $ animal$;
3 DATALINES;
4a Ant
5b Bird
6c Cat
7d Dog
8e Eagle
9f Frog
10;
11RUN;
12 
13DATA plant;
14 INPUT common $ plant$;
15 DATALINES;
16a Apple
17b Banana
18c Coconut
19d Dewberry
20e Eggplant
21f Fig
22;
23RUN;
24 
25PROC SORT DATA=animal; BY common; RUN;
26PROC SORT DATA=plant; BY common; RUN;
27 
28DATA matchmerge;
29 MERGE animal plant;
30 BY common;
31RUN;
32PROC PRINT DATA=matchmerge; RUN;
2 Codeblock
DATA STEP / PROC PRINT Data
Erklärung :
Dieses Beispiel zeigt ein Eins-zu-Viele-Merge. Die Datasets 'one' und 'many' enthalten die Variablen 'ID' und 'state'. 'ID' ist die BY-Variable. Wenn 'state' keine BY-Variable ist, überschreibt ihr Wert aus dem Dataset 'one' (als zweites aufgeführt) den ersten Wert des Datasets 'many' für jede BY-Gruppe, aber nicht die nachfolgenden. Um alle 'state'-Werte in der BY-Gruppe zu ersetzen, muss die Variable 'state' aus dem Dataset 'many' vor dem Merge gelöscht oder umbenannt werden, wie im zweiten Codeblock ('data solution') gezeigt.
Kopiert!
1DATA one;
2 INPUT ID state$;
3 DATALINES;
41 AZ
52 MA
63 WA
74 WI
8;
9RUN;
10 
11DATA many;
12 INPUT ID city $ state$;
13 DATALINES;
141 Phoenix Ariz
152 Boston Mass
162 Foxboro Mass
173 Olympia Mass
183 Seattle Wash
193 Spokane Wash
204 Madison Wis
214 Milwaukee Wis
224 Madison Wis
234 Hurley Wis
24;
25RUN;
26 
27PROC SORT DATA=one; BY ID; RUN;
28PROC SORT DATA=many; BY ID; RUN;
29 
30DATA three;
31 MERGE many one;
32 BY ID;
33RUN;
34PROC PRINT DATA=three noobs; RUN;
35title;
36 
37DATA solution;
38 MERGE many(drop=state) one;
39 BY ID;
40RUN;
41PROC PRINT DATA=solution noobs; RUN;
3 Codeblock
DATA STEP / PROC SORT Data
Erklärung :
Dieses Beispiel veranschaulicht ein Viele-zu-Eins-Merge, wenn die Eingabe-Datasets 'animalDupes' und 'plantDupes' doppelte Werte für die BY-Variable 'common' enthalten. SAS kombiniert alle Beobachtungen jeder BY-Gruppe und behält dabei die Werte aller Variablen bei. Die Datasets werden vor dem Merge nach 'common' sortiert.
Kopiert!
1DATA animalDupes;
2 INPUT common $ animal1$;
3 DATALINES;
4a Ant
5a Ape
6b Bird
7c Cat
8d Dog
9e Eagle
10;
11RUN;
12 
13DATA plantDupes;
14 INPUT common $ plant1$;
15 DATALINES;
16a Apple
17b Banana
18c Coconut
19c Celery
20d Dewberry
21e Eggplant
22;
23RUN;
24 
25PROC SORT DATA=animalDupes; BY common; RUN;
26PROC SORT DATA=plantDupes; BY common; RUN;
27 
28DATA matchmerge;
29 MERGE animalDupes plantDupes;
30 BY common;
31RUN;
32PROC PRINT DATA=matchmerge; RUN;
4 Codeblock
DATA STEP / PROC SORT Data
Erklärung :
Dieses Beispiel zeigt das Zusammenführen von zwei Datasets ('animalMissing' und 'plantMissing2'), die unterschiedliche Werte für ihre gemeinsame BY-Variable 'common' haben, was zu nicht übereinstimmenden Beobachtungen führt. SAS behält die Werte aller Variablen aus beiden Datasets im Endergebnis bei, auch wenn der Wert in einem der Datasets fehlt. Die Datasets werden vor dem Merge nach 'common' sortiert.
Kopiert!
1DATA animalMissing;
2 INPUT common $ animal1$;
3 DATALINES;
4a Ant
5c Cat
6d Dog
7e Eagle
8;
9RUN;
10 
11DATA plantMissing2;
12 INPUT common $ plant$;
13 DATALINES;
14a Apple
15b Banana
16c Coconut
17e Eggplant
18f Fig
19;
20RUN;
21 
22PROC SORT DATA=animalMissing; BY common; RUN;
23PROC SORT DATA=plantMissing2; BY common; RUN;
24 
25DATA matchmerge;
26 MERGE animalMissing plantMissing2;
27 BY common;
28RUN;
29 
30PROC PRINT DATA=matchmerge; RUN;
5 Codeblock
DATA STEP / PROC SORT Data
Erklärung :
Dieses Beispiel ähnelt dem vorherigen, verwendet jedoch die IN=-Dataset-Option, um nicht übereinstimmende Beobachtungen aus dem Ausgabe-Dataset zu entfernen. Die IN=-Variable ist eine boolesche Variable, die den Wert 1 annimmt, wenn das Dataset zur aktuellen Beobachtung beiträgt, und 0, wenn nicht. Die Anweisung IF (i=1) and (j=1) stellt sicher, dass nur Beobachtungen, die in beiden Datasets vorhanden sind (übereinstimmende), in das Ergebnis aufgenommen werden.
Kopiert!
1DATA animalMissing;
2 INPUT common $ animal$;
3 DATALINES;
4a Ant
5c Cat
6d Dog
7e Eagle
8;
9RUN;
10 
11DATA plantMissing2;
12 INPUT common $ plant$;
13 DATALINES;
14a Apple
15b Banana
16c Coconut
17e Eggplant
18f Fig
19;
20RUN;
21 
22PROC SORT DATA=animalMissing; BY common; RUN;
23PROC SORT DATA=plantMissing2; BY common; RUN;
24 
25DATA matchmerge2;
26 MERGE animalMissing(in=i) plantMissing2(in=j);
27 BY common;
28 IF (i=1) and (j=1);
29RUN;
30PROC PRINT DATA=matchmerge2; RUN;
6 Codeblock
DATA STEP / PROC PRINT Data
Erklärung :
Dieses Beispiel zeigt ein Match-Merge, bei dem doppelte Werte der BY-Variablen 'ID' in beiden Datasets ('fruit' und 'color') vorhanden sind. Die Datasets werden zuerst nach 'ID' sortiert. Beim Mergen überschreibt der Wert der Variablen 'color' aus dem Dataset 'color' (als zweites aufgeführt) den Wert im PDV für die erste Beobachtung der BY-Gruppe. Nachfolgende Werte der BY-Gruppe werden dann mit diesem 'color'-Wert gefüllt, bis sich die BY-Gruppe ändert. Dies liegt daran, dass Variablen nicht auf fehlende Werte zurückgesetzt werden, solange sich die BY-Gruppe nicht ändert.
Kopiert!
1DATA fruit;
2 INPUT ID $ fruit$;
3 DATALINES;
4a apple
5c apricot
6d banana
7e blueberry
8c cantaloupe
9c coconut
10c cherry
11c crabapple
12c cranberry
13;
14RUN;
15 
16DATA color;
17 INPUT ID $ color$;
18 DATALINES;
19a amber
20b brown
21b blue
22b black
23b beige
24b bronze
25c cocoa
26c cream
27;
28RUN;
29 
30PROC SORT DATA=fruit; BY ID; RUN;
31PROC SORT DATA=color; BY ID; RUN;
32 
33DATA merged;
34 MERGE fruit color;
35 BY id;
36RUN;
37 
38PROC PRINT DATA=merged;
39 title 'Merged by ID';
40RUN;
7 Codeblock
DATA STEP / PROC PRINT Data
Erklärung :
Dieses Beispiel zeigt, wie fehlende Werte bei einem Eins-zu-Viele-Merge mit gemeinsamen Variablen gehandhabt werden. Zunächst führt ein einfaches Merge der Datasets 'one' und 'two' (die in 'one' fehlende Werte für 'age' enthalten) zu fehlenden Werten für 'age' im zusammengeführten Dataset. Um dies zu korrigieren, verwendet der zweite Codeblock eine temporäre Variable ('temp_age') und die RETAIN-Anweisung. Beim ersten Datensatz einer BY-Gruppe wird 'temp_age' auf einen fehlenden Wert zurückgesetzt. Wenn 'age' fehlt, wird es durch 'temp_age' ersetzt. Andernfalls wird 'temp_age' mit dem nicht fehlenden Wert von 'age' aktualisiert, wodurch sichergestellt wird, dass der letzte nicht fehlende Wert innerhalb der BY-Gruppe weitergegeben wird.
Kopiert!
1DATA one;
2 INPUT ID age score;
3 DATALINES;
41 8 90
51 . 100
61 . 95
72 9 80
82 . 100
9;
10RUN;
11 
12DATA two;
13 INPUT ID name $ age;
14 DATALINES;
151 Sarah 11
162 John 10
17;
18RUN;
19 
20PROC SORT DATA=one; BY ID; RUN;
21PROC SORT DATA=two; BY ID; RUN;
22 
23DATA merge1;
24 MERGE one two;
25 BY id;
26RUN;
27PROC PRINT DATA=merge1; title 'Merged by ID'; RUN;
28 
29DATA merge2 (drop=temp_age);
30 MERGE one two;
31 BY id;
32 retain temp_age;
33 IF first.id THEN temp_age = .;
34 IF age = . THEN age = temp_age;
35 ELSE temp_age = age;
36RUN;
37PROC PRINT DATA=merge2; title 'Merged by ID with Age Retained'; 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.
Urheberrechtsinformationen : Copyright © SAS Institute Inc. All Rights Reserved