2014-01-17 3 views
0

У меня есть набор данных, который выглядит, как показано ниже:накопленная частота в SAS Dataset

Customer Sales 
     1 15 
     2 14 
     3 13 
     4 11 
     5 12 
     6 18 
     7 21 

Мне нужно сортировать клиентов по% продаж, а затем назначить их в «высоких», «среднего», «низкий» ведра. ...

Customer Sales %Sales 
     7 21  20% 
     6 18  17% 
     1 15  14% 
     2 14  13% 
     3 13  13% 
     5 12  12% 
     4 11  11% 

И ведро должно быть основан на кумулятивной частоте:

Customer Sales %Sales CumFreq Bucket 
     7 21 20%  20% High 
     6 18 17%  38% Medium 
     1 15 14%  52% Medium 
     2 14 13%  65% Medium 
     3 13 13%  78% Low 
     5 12 12%  89% Low 
     4 11 11% 100% Low 

Итак, как вы можете видеть кого-либо, чтобы р 33% продажи будет высоким ведром, в середине 33% будет среднее ведро и нижние 33% будет Низким ведром

+0

я знаю, что мы могли бы использовать Cumul Freq из выходного набора данных Proc частоты, но не уверен, что он полностью служит мой purposehere – kaos1511

ответ

2

Так что вам нужно суммировать столбец сортировки набора данных, а затем рассчитать совокупный процент. Используйте специальный формат для создания столбца Bucket.

data sales; 
input Customer Sales; 
datalines; 
     1 15 
     2 14 
     3 13 
     4 11 
     5 12 
     6 18 
     7 21 
; 
run; 

proc sort data=sales; 
by descending sales ; 
run; 

proc sql noprint; 
select sum(sales) format=best32. into :s from sales; 
quit; 

proc format; 
value pctSales 
    0-.33='High' 
    .33-.67='Medium' 
    .67-1='Low'; 
run; 

data sales; 
set sales; 
retain total 0; 
format pctSales percent8.2; 
total = total + sales; 
pctSales = total/&s; 
bucket = put(pctSales,pctSales.); 
drop total; 
run; 
+0

Благодаря DomPazz, работает как сон! – kaos1511

0
/*untested: don't have access to SAS right now*/ 

PROC SQL noprint; 
/*1st get the total no. of sales and stick it into a macro variable*/ 
select sum(sales) into: TotalSales 
from someCustomertable; 

create table topCustomers as 
select 
a.Customer 
, a.sales 
, a.sales/&TotalSales as salesPerc format=percent11.2 
, case 
    when calculated salesPerc <=1/3 then "High" 
    when calculated salesPerc <=2/3 then "Medium" 
    else "Low" 
    end as Bucket 
from someCustomertable as a 
order by 3 
QUIT; 
Смежные вопросы