Letzter Umsatz eines Datum
Verfasst von Myriam am 4 August, 2010 - 19:00
Hallo zusammen,
wie kann ich aus dem Datensatz "umsaetze" einen Datensatz erstellen, der nur die Zeile des letzten Umsatzes des jeweiligen Tages enthält? (Der Datensatz ist nach Tag/Uhrzeit bereits sortiert.)
Dieser Datensatz müsste für das unten abgebildete Beispiel wie folgt aussehen:
3 05-JUL-2010 15:04:45.618 190
5 06-JUL-2010 12:37:31.618 185
Ich bedanke mich im Voraus für jede Hilfe,
Miriam
data umsaetze;
input id date :date11. time :time.12 umsatz;
datalines;
1 05-JUL-2010 06:40:22.618 180
2 05-JUL-2010 14:42:15.618 200
3 05-JUL-2010 15:04:45.618 190
4 06-JUL-2010 07:04:01.618 175
5 06-JUL-2010 12:37:31.618 185
;
input id date :date11. time :time.12 umsatz;
datalines;
1 05-JUL-2010 06:40:22.618 180
2 05-JUL-2010 14:42:15.618 200
3 05-JUL-2010 15:04:45.618 190
4 06-JUL-2010 07:04:01.618 175
5 06-JUL-2010 12:37:31.618 185
;
proc print data=umsaetze noobs;
format date worddatx12.;
format time hhmm8.2;
run;
»
- Anmelden oder Registrieren um Kommentare zu schreiben

zum Beispiel so
Hallo Myriam,
zum Beispiel so:
data umsaetze; input id date :date11. time :time.12 umsatz; datalines; 1 05-JUL-2010 06:40:22.618 180 2 05-JUL-2010 14:42:15.618 200 3 05-JUL-2010 15:04:45.618 190 4 06-JUL-2010 07:04:01.618 175 5 06-JUL-2010 12:37:31.618 185 ; proc sort data = umsaetze; by date time; run; data letzter_tagesumsatz; set umsaetze; by date time; if last.date then output; * Hier wird von jedem Datum der letzte Datensatz ausgewählt.; run; proc print data=letzter_tagesumsatz noobs; format date worddatx12. time hhmm8.2; run;Viele Grüße
Steffen
Proc SQL
Hallo Myriam,
hier noch eine Lösung mit Proc SQL:
input id date :date11. time :time.12 umsatz;
datalines;
1 05-JUL-2010 06:40:22.618 180
2 05-JUL-2010 14:42:15.618 200
3 05-JUL-2010 15:04:45.618 190
4 06-JUL-2010 07:04:01.618 175
5 06-JUL-2010 12:37:31.618 185
;
run;
proc sql;
create table _umsaetze2 as
select *
from _umsaetze
group by date
having time = max(time);
quit;
Gruß Frederik
Leider verspätet vielen Dank
Leider verspätet vielen Dank Euch beiden!
So blöd es klingt: Aber ich hatte diesen Thread ganz vergessen, da sich das Problem "von selbst" löste.
Damit ich aber zukünftig gewappnet bin: Ich hatte gehofft, den Antworten auch entnehmen zu können, wie man den zweitletzten oder drittletzten Umsatz ermitteln kann.
Gibt es bspw. für das letzte Beispiel ein Äquivalent zu KGRÖSSTE von Excel, das ich für MAX einsetzen kann? Oder gibt es andere Möglichkeiten?
Vielen Dank!
Hallo Miriam, eine Funktion
Hallo Miriam,
eine Funktion KGroesste gibt es in SAS. Sie heißt Largest. Die Gegenstücke zu kKleinste heißen Ordinal oder Smallest.
Leider kann man diese Funktionen nur für Berechnungen in der Zeile anwenden.
Um die Werte in den Spalten zu ermitteln, muss man m. E. eine Rangfolge ermitteln und danach entsprechend selektieren.
format date DDMMYYP10. Time Time12. umsatz NLNUM12.2;
input id date :date11. time :time.12 umsatz;
datalines;
1 05-JUL-2010 06:40:22.618 180
2 05-JUL-2010 14:42:15.618 200
3 05-JUL-2010 15:04:45.618 190
4 06-JUL-2010 07:04:01.618 175
5 06-JUL-2010 12:37:31.618 185
;
proc sort data = umsaetze;
by date time;
run;
data Nter_tagesumsatz;
set umsaetze;
by date time;
if first.date then Zaehler=0;
Zaehler + 1;
run;
Proc SQL;
SELECT
CASE Max(Zaehler) - Zaehler
WHEN 0 THEN "Letzter Umsatz"
WHEN 1 THEN "Vorletzter Umsatz"
WHEN 2 THEN "Drittletzter Umsatz"
ELSE "... usw"
END AS Rang
, *
FROM Nter_tagesumsatz
GROUP BY DATE
ORDER BY DATE
, Zaehler
;
QUIT;
/* Oder */
proc sort data = umsaetze;
by date descending time;
run;
data letzen_3_tagesumsatz;
set umsaetze;
by date descending time;
if first.date then Zaehler=0;
Zaehler + 1;
If Zaehler <=3;
run;
Proc Print noobs;run;
Schöne Grüße
Jan
Vielen Dank! Diese Beispiele
Vielen Dank!
Diese Beispiele haben mich enorm weitergebracht!