Ich möchte eine Verlaufsdatei in SAS aktualisieren. Ich habe neue Beobachtungen, die sich mit bestehenden Datenzeilen überschneiden können.Ausgabe konditional von Merge
Was benötigt wird, ist eine Datei, die Zeilen von Dataset (new_data) haben würde, wo sie existieren und falls die Zeilen nicht existieren, dann von alten Satz (alte_Daten). Was ich herausgefunden habe, ist eine klobige Merge-Operation, die von der Reihenfolge der Datensätze abhängig ist. (== funktioniert nur, wenn new_data nach old_data ist.?)
data new_data;
input key value;
datalines;
1 10
1 11
2 20
2 21
;
run;
data old_data;
input key value;
datalines;
2 50
2 51
3 30
3 31
;
run;
So würde Ich mag folgendes haben:
key value
1 10
1 11
2 20
2 21
3 30
3 31
jedoch die folgende funktioniert nicht. Es produziert die Ausgabe darunter.
data updated_history;
merge New_data(in=a) old_data(in=b) ;
by key;
if a or (b and not a);
run;
....
2 50
2 51
...
Aber aus irgendeinem Grund dies tut:
data updated_history;
merge old_data(in=b) New_data(in=a);
by key;
if a or (b and not a);
run;
Frage: Gibt es eine intelligente Art und Weise, von der Verwaltung Dataset die Werte von ausgewählten sind. Etwas wie: wenn ein dann value_from_dataset a;
Beide Beispieleingabedateien enthalten mehrere Beobachtungen pro Schlüsselwert. In Ihrem einfachen Beispiel haben die gemeinsamen Schlüssel die gleiche Anzahl von Beobachtungen in jeder Datei. Aber wenn die Anzahl der Beobachtungen nicht übereinstimmt, dann werden Sie Schwierigkeiten haben, MERGE zu benutzen, um das zu tun, was Sie wollen. – Tom