LesezeichenAbonnierenRSS-Feed abonnieren
lapaluna
Fluorite | Level 6

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:

  1. In der Liste sind 150 Shops aufgeführt und nach Umsatz sortiert
  2. Ich füge die Anzahl hinzu und berechne Anteil in der Reihenfolge der Shops nach Umsatz 
  3. Der Umsatz, der bei einem Anteil von 80% vorliegt, ist der Schwellenwert für die Top20% nach Umsatz

Hier Beispielbilder aus der Excel zu den obigen Punkten:

zu Punkt 1 und Punkt 2:

lapaluna_1-1684781266792.png

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:

lapaluna_2-1684781435479.png

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

 

 

5 ANTWORTEN 5
MarkusWeick
Barite | Level 11

@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

Please keep the community friendly.
Like posts you agree with or like. Mark helpful answers as “accepted solutions”. Generally have a look at https://communities.sas.com/t5/Getting-Started/tkb-p/community_articles
lapaluna
Fluorite | Level 6

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 

MarkusWeick
Barite | Level 11

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

Please keep the community friendly.
Like posts you agree with or like. Mark helpful answers as “accepted solutions”. Generally have a look at https://communities.sas.com/t5/Getting-Started/tkb-p/community_articles
WolfgangHornung
Obsidian | Level 7

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

WolfgangHornung
Obsidian | Level 7

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;