Hallo zusammen,
ich habe in Excel eine Lösung gebaut, die ich gerne in SAS überführen möchte. Nun leider komme ich da nicht weiter.
Hintergrund:
Ich habe mehre KPI wie im nachfolgenden Beispiel die Umsatzzahlen von verschiedenen Shops.
Um eine Shop-Segmentierung über mehrere KPI vorzunehmen, möchte ich am Beispiel Umsatz den Umsatz ermitteln, den die Top 20% der Shops erzielen.
Hier das Beispiel:
Hier Beispielbilder aus der Excel zu den obigen Punkten:
zu Punkt 1 und Punkt 2:
Dann suche ich mir in der Liste unter Anteil den Umsatz aus, der bei 80% liegt und definiere dadurch den Schwellenwert.
Bild zu Punkt 3:
Im späteren Verlauf flage ich alle Shops, die über diesen Schwellenwert liegen.
Das mache ich dann für mehrere KPI und erstelle über die Top20% oder andere Schwellenwerte eine Segmentierung.
Nun zur Frage:
Ich habe es erst versucht über die Anwendungsroutinen mit Percentilen mir ausgeben zu lassen, diese sind jedoch nicht individuell einstellbar. Über die Suche war ich auch nicht erfolgreich und ja. Vielleicht kann mir hier jemand aus dem Forum helfen und kennt entweder über Code oder über "Berechnete Spalten mit einer Funktion" eine Lösung?
VG Björn
@lapaluna: Hi Björn,
zwei Fragen:
1. sehe ich das richtig, dass du eine Lösung in Visual Analytics suchst?
2. Hast du zumindest Visual Analytics 8.2, so dass du die hier beschriebenen cumulative measures benutzen kannst: folgende How to build cumulative measures in SAS Visual Analytics 8.2 ?
VG Markus
Hallo Markus,
eigentlich suche ich eine Lösung in SAS EG, da ich die Segmentierung regelmäßig durchführen möchte.
Natürlich möchte ich auch später die Ergebnisse in VA visualisieren. Wenn es dort eine einfachere Möglichkeit gibt, auch gerne.
Ich nutze Viya - Visual Analytics.
VG Björn
Für Visual Analytics sehe ich folgenden Ansatz unter Einsatz der calculated items:
1. Eine Spalte, in der die Umsatzwerte kumuliert werden (cumulative measures)
2. Eine Spalte, in der abgefragt wird, ob der Wert in der Spalte mit den kumulierten Werten größergleich den 80% des Gesamtumsatzes sind (wenn ja dann Eintrag Einzelumsatz, sonst 0)
3. Eine Spalte, in der das Minimum aus der vorherigen Spalte berechnet wird.
VG Markus
Hi Björn,
versuche es mal so, müsste funktionieren. Als Vorbereitung habe ich mir eine Datei Umsatz generiert mit 100 Shops und einem zufälligen Umsatz (1.Datastep).
data umsatz(drop=i);
format ShopNr $8. umsatz commax9.;
do i = 1 to 100;
ShopNr="Shop-"!!put(i,z3.);
Umsatz=round(ranuni(-1)*1000000,1);
output;
end;
run;
Danach zwei Varianten
1) SQL: Die verwendete Funktion monotonic() ist eine nicht dokumentierte SAS-Funktion und liefert die laufende Nummer des Datensatzes.
proc sql;
create table schwelle as
select
umsatz.*,
monotonic() as lfdnr,
summe,
(calculated lfdnr)/summe as anteil,
(case
when (calculated anteil)<0.8 then 0
else 1
end) as flag
from umsatz, (select count(*) as summe from umsatz)
;
quit;
2) SQL mit Datastep, die Makrovariable &sqlobs. enthält die Anzahl der Datensätze aus dem vorherigen SQL. Die automatische Variable _n_ liefert das was im PROC SQL die Funktion monotonic() macht.
proc sql;
create table umsatz as
select * from umsatz
order by umsatz;
quit;
data schwelle;
set umsatz;
by umsatz;
lfdnr=_n_;
summe=&sqlobs.;
anteil=lfdnr/summe;
flag=0;
if anteil>=0.8 then flag=1;
run;
VG
Wolfgang
die Datei Umsatz muss für die erste Variante natürlich auch vorher aufsteigend nach Umsatz sortiert werden (vgl. Variante 2)
proc sql;
create table umsatz as
select * from umsatz
order by umsatz;
quit;
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!