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
... View more