Mal wieder ein Problem mit SAS.
Ich habe eine Riesentabelle mit Datensätzen eines Kunden zu unterschiedlichen Stichtagen. Ich möchte jeweils den Datensatz mit dem jüngsten Stichtag auslesen. Gibt es eine Funktion, die mir das ermöglicht?
Vielen Dank im voraus!
Hallo,
ich würde es wie folgt machen:
PROC SQL; CREATE TABLE ERGEBNIS AS SELECT A.* FROM QUELLE A INNER JOIN (SELECT KUNDENID, MAX(STICHTAG) AS STICHTAG FROM QUELLE GROUP BY KUNDENID) B ON A.KUNDENID = B.KUNDENID AND A.STICHTAG=B.STICHTAG; QUIT;
Je nachdem, ob ein DBMS oder die SAS Datenhaltung in BASE Files genutzt wird, kann es erforlich sein, den inneren SELECT in eine eigene, vorgeschaltete Abfrage auszulagern, um die Performance zu steigern.
Viele Grüße
Sebastian
proc sort data=vorhanden;
by kundenid stichtag;
run;
data erwuenscht;
set vorhanden;
by kundenid;
if last.kundenid;
run;
Die von mir bevorzugte DATA Step Methode.
Vielen Dank für die Vorschläge. Ich bin nicht der große Programmierer vor dem Herrn, ich versuche das alles im DIS mittels eines Extracts auf die Tabelle zu bewerkstelligen.
Habe es jetzt auch hingekriegt, allerdings mit einem Join.
Nochmals vielen lieben Dank!!
Hallo @Fay123,
eventuell könntest Du hier auch mit einem "Rank" (inkl. entsprechendem by-statement) und einem anschließenden "Extract" (auf die entsprechenden Ranks) arbeiten.
Somit hättest Du auch wieder zwei Schritte, die aber ggf. im DI-Studio optisch leichter nachvollziehbar sind.
Ein weiterer Vorschlag - nicht zur Verwirrung, nur der Vollständig halber
Cheers, mfab
Da war ich wohl etwas voreilig, ich bekomme zwar den jüngsten Stichtag, allerdings nur für die Datensätze die z.B. am 30.5. aktualisiert wurden. Datensätze mit anderen Aktualisierungsstichtagen fallen raus.
Geschafft! Danke für die vielen Anregungen! Was täte ich ohne dieses Forum!
Join us for SAS Innovate 2025, our biggest and most exciting global event of the year, in Orlando, FL, from May 6-9. Sign up by March 14 for just $795.