LesezeichenAbonnierenRSS-Feed abonnieren
Fay123
Obsidian | Level 7

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! Frau (fröhlich)

7 ANTWORTEN 7
Sebastian_R
Calcite | Level 5

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

mariusg
Obsidian | Level 7

Hallo @Sebastian_R

 

warum der zusätzliche Join und kein Having?

Kurt_Bremser
Super User
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.

Fay123
Obsidian | Level 7

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!! Frau (fröhlich)

mfab
Quartz | Level 8

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 Smiley (zwinkernd)

 

Cheers, mfab

Fay123
Obsidian | Level 7

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.

Frau (traurig) 

Fay123
Obsidian | Level 7

Geschafft! Danke für die vielen Anregungen! Was täte ich ohne dieses Forum! Frau (fröhlich)

sas-innovate-2024.png

Don't miss out on SAS Innovate - Register now for the FREE Livestream!

Can't make it to Vegas? No problem! Watch our general sessions LIVE or on-demand starting April 17th. Hear from SAS execs, best-selling author Adam Grant, Hot Ones host Sean Evans, top tech journalist Kara Swisher, AI expert Cassie Kozyrkov, and the mind-blowing dance crew iLuminate! Plus, get access to over 20 breakout sessions.

 

Register now!

Diskussionsstatistiken
  • 7 Antworten
  • 1686 Aufrufe
  • 5 Kudos
  • 5 in Unterhaltung