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

Join us for SAS Innovate April 16-19 at the Aria in Las Vegas. Bring the team and save big with our group pricing for a limited time only.

Pre-conference courses and tutorials are filling up fast and are always a sellout. Register today to reserve your seat.

 

Register now!

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