Ich habe diese proc SQL-Abfrage in meinem aktuellen Code. Leider habe ich es mit über 10 Millionen Datensätzen zu tun, so dass es Stunden dauert. Ich habe versucht, es in einen Datenschritt umzuwandeln und dachte, es würde viel schneller laufen. Ich kann jedoch nicht die gleichen Datenergebnisse erhalten. Wenn jemand mir mit dem Datenschritt helfen kann, würde ich es sehr schätzen. Oder wenn Sie Vorschläge haben, wie ich den proc sql effizienter gestalten kann.Convert Proc Sql existiert Anfrage an Daten Schritt
Hier ist meine proc SQL-Abfrage:
proc sql;
create table test as
select *
from table1 a
where exists (select 1
from table2 b
where b.acct_id = a.acct_id);
quit;
Dies ist der Daten Schritt habe ich versucht, es zu konvertieren:
proc sort data=table1; by acct_id; run;
proc sort data=table2; by acct_id; run;
data test;
merge table1 (in=a)
table2 (in=b);
by acct_id;
if a and b;
run;
Hat 'Select * aus Tabelle1, wo acct_id in (wählen Sie acct_id aus Tabelle2)' schneller ausführen? (Diese Abfrage könnte dem Abfrageplaner die Absicht deutlicher machen - hoffentlich die Notwendigkeit der Indexierung/Sortierung/Verbindung ersparend) –
Zumindest in SAS 9.3 ist der proc sql ziemlich schlecht darin, IN/EXIST-Anweisungen zu optimieren. – Jetzler
Ich habe nur einen kleinen Test mit Ihrem Vorschlag gemacht und es schien wesentlich schneller (11 Minuten vs 32 Sekunden). Ich werde jetzt einen vollen Lauf versuchen und sehen, wie es geht. – UncleCross