Proc SQL und entfernen von Duplikaten, die durch eine einzelne variable
PROC SQL Neuling hier - ich will Proc SQL verketten (stack), ID und Rasse die Daten aus zwei verschiedenen datasets, während auch das entfernen von Duplikaten durch die ID (und NICHT von beiden-ID und Race) - ist das möglich? Zum Beispiel, nach dem kombinieren der Daten unten, ich will nur die erste Instanz der ID=1 (wo Rennen=weiß), und nicht sowohl {(1, Weiß) und (1, Schwarz)}
Beispieldaten:
DATA SAMPLE1;
INPUT ID RACE$;
DATALINES;
1 WHITE
2 BLACK
3 WHITE
4 BLANK
;
RUN;
DATA SAMPLE2;
INPUT ID RACE$;
DATALINES;
5 HISPANIC
6 ASIAN
7 HISPANIC
8 ASIAN
1 BLACK
;
RUN;
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dies ist nicht etwas, das SQL ist so gut wie normal SAS, aber es ist sicherlich möglich.
Wenige Optionen:
Outer join, mit COALESCE. Schwerer zu schreiben als andere Optionen, wie Sie schreiben, jede variable zweimal in den ersten wählen.
Union mit einer EXISTS-Unterabfrage. Langsamer je nach der Größe der Tabellen, ist das ein 10k-Tabelle kombiniert mit einer 10-Zeilen-Tabelle, ist dies eine schnelle Lösung, wenn es 2 10k-Tabellen, das ist langsam.
Union BEITRETEN. Möglicherweise schneller als die obige Abfrage, je nach Indizierung und so.
Aber die einfachste Lösung in SAS ist zweifellos, es zu tun in SAS.
oder
In diesem Fall s2 ersetzt in s1, also, wenn Sie lieber die andere option ändern Sie die Reihenfolge der merge-Anweisung.
Tatsächlich, Sie sollten angeben, welche Duplikate zu halten - SQL versucht deterministisch sein. So etwas wie dies funktionieren sollte:
Dieser gibt Ihnen die Antwort, die Sie angegeben: