Für ein SAS-Programm, das ich schreibe, muss ich das Äquivalent voll äußerer verbinden 4 verschiedene Arbeitstabellen in einer einzigen Tabelle. Ich wollte es zunächst in einem PROC SQL
tun, aber das wurde schnell außer Kontrolle geraten, also entschied ich mich stattdessen, es mit einem MERGE
in einem Datenschritt einzurichten.Sortierung mehrerer Tabellen in einem PROC SORT
Als Beispiel:
proc sort data = TABLE_1; by COL1 COL2 COL3;
proc sort data = TABLE_2; by COL1 COL2 COL3;
proc sort data = TABLE_3; by COL1 COL2 COL3;
proc sort data = TABLE_4; by COL1 COL2 COL3;
data NEW_TABLE;
merge TABLE_1 TABLE_2 TABLE_3 TABLE_4;
by COL1 COL2 COL3;
Es scheint Art umständlich jede Tabelle einzeln durch exakt den gleichen Feldsatz sortieren zu müssen. Ich habe eine Makrovariable eingerichtet, die der Liste der Spaltennamen entspricht, aber ich muss immer noch eine Zeile für jede Tabelle haben.
Gibt es eine Möglichkeit, etwas zu schreiben, um eine auf mehreren Tabellen gleichzeitig auszuführen, wenn sie alle die gleichen Spalten haben? Von dem, was ich weiß von SAS, würde ich erwarten, dass dies so etwas wie arbeiten:
proc sort data = (TABLE_1 TABLE_2 TABLE_3 TABLE_4); by COL1 COL2 COL3;
Oder auch so etwas, wenn die Tabellen wie in diesem Beispiel Gemusterten:
proc sort data = (TABLE_1-TABLE_4); by COL1 COL2 COL3;
Aber ich habe nicht in der Lage, entweder zur Arbeit zu kommen. Zugegebenermaßen habe ich nicht versucht, es über ein Array einzurichten, sondern vor allem, weil das für eine so kurze Liste von Tabellen wie Overkill erscheint (und eine längere Liste von Tabellen würde wahrscheinlich eine andere Zusammenführungslösung insgesamt rechtfertigen).
Gemessen an der Antwort here, bin ich nicht optimistisch, PROCs für mehrere Tabellen gleichzeitig auszuführen, obwohl die Sortierung möglicherweise anders funktioniert.
Denken Sie daran, dass MERGE und FULL JOIN viele bis viele Übereinstimmungen unterschiedlich behandeln. – Tom
'proc sql' kann mehrere Tabellen gleichzeitig verbinden, ohne zuerst zu sortieren, aber es ist möglicherweise nicht sehr effizient. – david25272