Hallo zusammen,
bin neuer User und versuche gerade, in meinen Datensatz die Spalte Sum_cum (grün) zu erstellen.
In dieser Spalte soll die Summe für verschiedene Merkmale, die im Vorfeld bestimmt werden, kumuliert werden.
Hier ein Beispiel zur Veranschaulichung:
In den Daten werden für viele Jahre nach Monaten, Department, Produkt und Verkäufer die Verkäufe (Sum) ausgegeben.
Nun möchte ich:
die Werte kumulieren und in den Daten ablegen.
Habt ihr hier einen Tipp - und auch wenn ich es besser aufbereiten soll gerne ein paar Hinweise. Ist mein erster Kommentar.
Danke und VG
Björn
Hallo @lapaluna und herzlich willkommen in den SAS Support Communities*!
Wenn der vorhandene Datensatz ("HAVE") bereits geeignet sortiert ist, kann man die neue Spalte wie folgt erzeugen:
data want;
set have;
by year department product seller month;
if first.seller then Sum_cum=Sum;
else Sum_cum+Sum;
run;
Um HAVE nicht zu überschreiben, lege ich einen neuen Datensatz WANT an. Aus dem BY-Statement geht hervor, dass hier eine Sortierung von HAVE nach den genannten Variablen angenommen wird, also erst nach YEAR, innerhalb von YEAR nach Department, innerhalb von Department nach Product usw. Der gezeigte Screenshot passt zu dieser Annahme. Sollte eine andere Sortierreihenfolge vorliegen, wäre das BY-Statement anzupassen (oder HAVE erst zu sortieren).
Falls die Daten lediglich gruppiert sind (z. B. im Fall von drei Produkten "PID02", "PID01", "PID03" in Variable Product, aber der Rest unverändert), kann man im BY-Statement das Schlüsselwort NOTSORTED angeben. Der Nachteil ist, dass dann keine automatische Überprüfung der gewünschten Sortierung (z. B. der Monate!) mehr erfolgt, weil es sich auf alle Variablen bezieht.
Die IF-Bedingung first.seller ist jeweils für den ersten Satz einer Gruppe von aufeinanderfolgenden Sätzen zu demselben Verkäufer (innerhalb einer Wertekombination von YEAR, Department und Product) erfüllt. Das im ELSE-Statement verwendete Konstrukt mit dem Pluszeichen nennt sich Sum Statement und ist genau für solche kumulativen Additionen gedacht.
Wenn WANT nur die Sätze des Jahres 2022 aus HAVE enthalten soll, kann man nach dem SET-Statement ein entsprechendes WHERE-Statement einfügen.
* genauer gesagt: in deren englischsprachigem Bereich. Der für Fragen auf Deutsch heißt CoDe SAS German und ist auch sehr nett. :-)
Hallo @FreelanceReinh ,
erst einmal vielen lieben Dank für die ausführliche Erklärung!
Ich habe es jetzt nun mehrere Male versucht und leider bekomme ich es nicht hin 🙂 und ich weiß nicht warum...
Im Folgenden drei Screenshots:
Problem:
Leider kumuliert er die Werte nicht, als ob der den Seller nicht eindeutig finden würde. Oder es fehlt im Skript noch der Verweis, dass er VSZIEL_cum aus dem Vormonat entnehmen muss. Oder ich mach einfach was falsch und merke es nicht 😛
1. Screenshot (hier habe ich schon im Vorfeld richtig sortiert und die Spalte VSZIEL_cum ist noch nicht befüllt)
2. Screenshot - das Skript:
3. Screenshot - er befüllt die Spalte VSZIEL_cum, aber diese entspricht immer dem Wert vom laufenden Monat, nicht kumuliert für den Seller in dem Jahr aus dem Vormonat.
Vielleicht noch einmal zu Verständlichkeit:
In Zeile 2 in der Spalte VSZIEL_CUM sollte das VSZIEL_CUM aus Zeile 1 mit dem VSZIEL aus Zeile 2 addiert werden (5.221.546,00 +3.118.255,23=8.339.801,23)
Sorry...dachte ich bekomme das so hin und bin für den finalen Tipp sehr dankbar.
VG Björn
Kein Problem. Das liegt daran, dass die eigentlich erst zu erstellende Variable VSZIEL_CUM bereits im Ausgangsdatensatz enthalten ist. Dadurch wird der kumulierte Wert immer wieder von dem bereits vorhandenen (0.00) überschrieben und das Kumulieren fängt in jeder Zeile wieder von vorn an.
Also einfach VSZIEL_CUM von vornherein weglassen, wenn WORK.QUERY_FOR_QUERY_KOM_STX_ZIELE erzeugt wird, oder per DROP=-Dataset-Option im vorhandenen SET-Statement temporär entfernen:
set WORK.QUERY_FOR_QUERY_KOM_STX_ZIELE(drop=VSZIEL_CUM);
Are you ready for the spotlight? We're accepting content ideas for SAS Innovate 2025 to be held May 6-9 in Orlando, FL. The call is open until September 16. Read more here about why you should contribute and what is in it for you!
SAS' Charu Shankar shares her PROC SQL expertise by showing you how to master the WHERE clause using real winter weather data.
Find more tutorials on the SAS Users YouTube channel.