Ich muss Duplikate aus einem Datensatz löschen. Mein Problem ist, dass sobald ich die Daten sortiere und die Duplikate markiere (unter Verwendung der Verzögerungsfunktion), einige Informationen über Variablen innerhalb der doppelten Beobachtung und einige innerhalb der ursprünglichen Beobachtung vorhanden sind. Ich muss Informationen über alle Variablen behalten und gleichzeitig die Duplikate löschen.SAS: Umgang mit Duplikaten, ohne variable Informationen zu verlieren
Mein Gedanke war, zuerst alle Informationen zwischen dem Original und dem Duplikat zu füllen, bevor das Duplikat gelöscht wurde.
Beispiel von Beobachtungen nach Daten und das Markieren von Duplikaten (gefälschte Datenwerte) Sortierung:
Province AGE BRTHYEAR Trans_id Morb_id VarX flag_duplicate
AB 36 1980 45654 . . 0
AB 36 1980 . . 2135 1
ON 26 1990 . . 8868 0
ON 26 1990 . 35464 8868 1
Was ich will:
Province AGE BRTHYEAR Trans_id Morb_id VarX flag_duplicate
AB 36 1980 45654 . 2135 0
AB 36 1980 45654 . 2135 1
ON 26 1990 . 35464 8868 0
ON 26 1990 . 35464 8868 1
So kann ich Duplikate löschen und schließlich haben diese:
Province AGE BRTHYEAR Trans_id Morb_id VarX flag_duplicate
AB 36 1980 45654 . 2135 0
ON 26 1990 . 35464 8868 0
Ich habe Lag und Lead-Variablen erstellt, um zu versuchen, Informationen auszufüllen, aber es wird nur angezeigt ms, um an einem Teil des Datensatzes zu arbeiten. Hier
ist der Code für die Lead-Variablen:
data uncleaned_data;
merge uncleaned_data
uncleaned_data(
firstobs=2
keep= TRANS_ID MORB_ID Varx
rename=(TRANS_ID=lead_TRANS_ID MORB_ID=lead_MORB_ID Varx=lead_Varx));
if lag(flag_duplicate=1) then do;
if TRANS_ID=. then do;
TRANS_ID= lead_TRANS_ID;
end;
if MORB_ID=. then do;
MORB_ID= lead_MORB_ID;
end;
if Varx=. then do;
Varx= lead_Varx;
end;
end;
run;
Ich habe die gleiche Art der Sache für Verzögerung Variablen außer meinem ersten if-Anweisung ist ‚wenn flag_duplicate = 1, dann tun;‘
Diese Methode scheint nicht für viele doppelte Paare in meinem Datensatz zu funktionieren.
Gibt es eine bessere Möglichkeit, mein Problem insgesamt anzugehen? möglicherweise durch proc SQL?
Vielen Dank für das Lesen und einen Ratschlag angeboten!
Danke für die Antwort @Keith. Es gibt tatsächlich 35.000+ obs und die trans_id und morb_id sind die eindeutigen Identifikatoren für jeden Patienten (jeder obs wird nur einen der beiden haben, aber manchmal werden beide fehlen). Ich markierte Duplikate nach dem Sortieren von Daten (Sortierung nach 10 Variablen) basierend darauf, ob sie mit dem entsprechenden Verzögerungswert jeder sortierten Variablen übereinstimmten. – ASilva
@ASilva Dann müssen Sie die 10 Variablen, nach denen Sie sortiert haben, in die 'by'-Anweisung des Datenschritts schreiben, den ich geschrieben habe. Dies sollte Ihnen das gewünschte Ergebnis geben. – Longfish
Das scheint zu funktionieren! Danke vielmals. – ASilva