Сумма SAS по группам, а затем создать новую переменную для каждой группы - PullRequest
0 голосов
/ 16 апреля 2020

Я хочу сделать суммирование для каждой группы и создать новую переменную для суммы для каждой группы. Я пробовал pro c sql, но он только создал новую переменную. Мой набор данных выглядит следующим образом:

data have;
input firm year product$ value;
datalines;
1 2012 a 5
1 2012 a 6
1 2012 b 3
1 2013 a 4
1 2013 a 3
1 2013 b 4
1 2013 b 3
2 2012 a 5
2 2012 a 6
2 2012 b 3
2 2012 b 4
2 2012 b 2
2 2013 a 4
2 2013 a 5
2 2013 b 3
2 2013 b 3
;
run;

Мне нужна таблица с четырьмя столбцами: год фирмы productA_sum productB_sum.

Я пробовал следующим образом:

proc sql;
create table h.want as
select a.*, sum(a.value) as sumvalue
from h.have as a
group by firm, year, product;
quit;

Но это только создает новый столбец.

Ответы [ 3 ]

0 голосов
/ 16 апреля 2020

Вы сводите совокупную сумму. Двухэтапный подход может быть более желательным, если существует более двух значений продукта, с которыми приходится бороться.

proc summary data=have nway noprint;
  class firm year product;
  var value;
  output out=class_sums sum=sum;
run;

proc transpose data=sums suffix=_sum out=want(drop=_name_);
  by firm year;
  id product;
  var sum;
run;
0 голосов
/ 23 апреля 2020

потому что вы группируете три переменные, но в select вы выбираете все переменные. это приведет к бесполезному группированию по функции.

/*Try this one*/     
proc sql;
    create table h.want as
    select a.firm, a.year, a.product, sum(a.value) as sumvalue
    from h.have as a
    group by firm, year, product;
    quit;
0 голосов
/ 16 апреля 2020

Чтобы получить отдельные результаты SUM (), основанные на значении другой переменной, вам нужно использовать оператор CASE, а не включать его в переменные группировки.

proc sql;
create table want as
  select firm, year
       , sum(case when (product='a') then value else . end) as sum_product_A
       , sum(case when (product='b') then value else . end) as sum_product_B
  from have
  group by firm,year
;
quit;

Если вы хотите, чтобы сумма была нулевой, а не отсутствует, если продукт никогда не появляется, замените отсутствующие значения в предложениях else на 0.

...