Вычисление доли и совокупных данных в SAS

Aman kashyap спросил: 28 апреля 2018 в 09:03 в: sas

У меня есть набор данных, называемый хранит. Я хочу извлечь total_sales (retail_price), долю продаж и совокупную долю продажи по каждому хранилищу inSAS.

Пример набора данных: - Магазины

Date       Store_Postcode   Retail_Price    month   Distance
08/31/2013  CR7 8LE              470           8    7057.8
10/26/2013  CR7 8LE              640           10   7057.8
08/19/2013  CR7 8LE              500           8    7057.8
08/17/2013  E2 0RY               365           8    1702.2
09/22/2013  W4 3PH               395.5         12   2522
06/19/2013  W4 3PH               360.5         6    1280.9
11/15/2013  W10 6HQ              475           12   3213.5
06/20/2013  W10 6HQ              500           1    3213.5
09/18/2013  E7 8NW               315           9    2154.8
10/23/2013  E7 8NW               570           10   5777.9
11/18/2013  W10 6HQ              455           11   3213.5
08/21/2013  W10 6HQ              530           8    3213.5

Код, который я пробовал: -

Proc sql;                                                                                                                               Create table work.Top_sellers as                                                                                                         Select Store_postcode as Stores,SUM(Retail_price) as Total_Sales,Round((Retail_price/Sum(Retail_price)),0.01) as               
Proportion_of_sales                                                                                                                     From work.stores                                                                                                           Group by Store_postcode                                                                                                                 
Order by total_sales;                                                                                                                   Quit;  

Я не знаю, как вычислить кумулятивную переменную в proc sql ... Пожалуйста, помогите мне улучшить мой код!


2 ответа

Richard ответил: 28 апреля 2018 в 10:16

Вычисление кумулятивного результата в SQL требует, чтобы данные имели явный уникальный упорядоченный ключ, а запрос включал рефлексивное соединение с "треугольными" критериями для кумулятивного аспекта.

data have;
  do id = 100 to 120;
    sales = ceil (10 + 25 * ranuni(123));
    output;
  end;
run;proc sql;
  create table want as
  select 
    have1.id
  , have1.sales
  , sum(have2.sales) as sales_cusum
  from
    have as have1
  join
    have as have2
  on 
    have1.id >= have2.id  /* 'triangle' criteria */
  group by
    have1.id, have1.sales
  order by
    have1.id
  ;
quit;

Второй способ - перекомпоновка cusum по строке за строкой

proc sql;
  create table want as
  select have.id, have.sales, 
   ( select sum(inner.sales) 
     from (select * from have) as inner
     where inner.id <= have.id
   )
   as cusum
  from
   have;
Reeza ответил: 29 апреля 2018 в 05:07

Я передумаю, CDF - это другой расчет. Вот как это сделать с помощью шага данных. Сначала вычислите совокупные итоговые значения (я использовал шаг данных здесь, но я мог использовать PROC EXPAND, если у вас был SAS / ETS).

*sort demo data;
proc sort data=sashelp.shoes out=shoes;
by region sales;
run;data cTotal last (keep = region cTotal);
set shoes;
by region;*calculate running total;
if first.region then cTotal=0;
cTotal = cTotal + sales;*output records, everything to cTotal but only the last record which is total to Last dataset;
if last.region then output last;
output cTotal;retain cTotal;
run;*merge in results and calculate percentages;
data calcs;
merge cTotal Last (rename=cTotal=Total);
by region;percent = cTotal/Total;
run;

Если вам нужно более эффективное решение, я "Попробуйте решение DoW.

Aman kashyap ответил: 29 апреля 2018 в 05:32
Спасибо за помощь Реэза ... это поможет мне!