Годовая условная сумма в SAS - PullRequest
0 голосов
/ 28 октября 2018

У меня есть таблица ниже

+------+------+------+------+------+-----+
|  Yr  | col1 | col2 | col3 | col4 | PQR |
+------+------+------+------+------+-----+
| 2012 |    1 |    0 |    1 |    1 |   2 |
| 2012 |    0 |    1 |    0 |    0 |   4 |
| 2013 |    1 |    1 |    1 |    1 |   6 |
| 2014 |    0 |    0 |    0 |    0 |   8 |
| 2012 |    1 |    0 |    1 |    1 |   7 |
| 2013 |    0 |    1 |    0 |    0 |   3 |
| 2014 |    1 |    0 |    1 |    1 |   2 |
| 2012 |    0 |    1 |    0 |    0 |  10 |
| 2014 |    0 |    0 |    1 |    0 |  12 |
| 2014 |    0 |    0 |    0 |    0 |   5 |
+------+------+------+------+------+-----+

Я хочу получить следующий вывод

+------+-------+------+------+------+
|      | Total | 2012 | 2013 | 2014 |
+------+-------+------+------+------+
| col1 |    17 |    9 |    6 |    2 |
| col2 |    23 |   14 |    9 |    0 |
| col3 |    29 |    9 |    6 |   14 |
| col4 |    17 |    9 |    6 |    2 |
+------+-------+------+------+------+

Для строки col1 в моей таблице вывода

The column `Total` is `SUM(PQR)` when `col1` is 1 my input table

The value `17` is `SUM(PQR)` when `col1` is 1 in my input table

The value in  col `2012` is `SUM(PQR)` when `col1` is 1 and `Yr=2012` in my input table

The value `9` is `SUM(PQR)` when `col1` is 1 and `Yr=2012` in my input table

Аналогично 6 в столбце 2013 равно SUM(PQR), когда col1 равно 1, а Yr равно 2013

Надеюсь, что процесс получения таблицы вывода понятен

Iхочу добиться вышеуказанного результата с SAS.Любая помощь будет по достоинству оценена

1 Ответ

0 голосов
/ 28 октября 2018

Транспонируйте данные в категориальную форму и используйте PQR в качестве веса в вашей суммирующей сумме.Proc TABULATE очень искусен в создании таких таблиц.

data have;
infile datalines dlm='|'; input
   Yr    col1   col2   col3   col4   PQR ; datalines;
| 2012 |    1 |    0 |    1 |    1 |   2 |
| 2012 |    0 |    1 |    0 |    0 |   4 |
| 2013 |    1 |    1 |    1 |    1 |   6 |
| 2014 |    0 |    0 |    0 |    0 |   8 |
| 2012 |    1 |    0 |    1 |    1 |   7 |
| 2013 |    0 |    1 |    0 |    0 |   3 |
| 2014 |    1 |    0 |    1 |    1 |   2 |
| 2012 |    0 |    1 |    0 |    0 |  10 |
| 2014 |    0 |    0 |    1 |    0 |  12 |
| 2014 |    0 |    0 |    0 |    0 |   5 |
run;

data have_row_id / view=have_row_id;
  set have;
  rowid+1;
run;

proc transpose data=have_row_id out=have_categorical;
  by rowid yr pqr;
run;

proc tabulate data=have_categorical;
  class yr _name_;
  var col1;
  weight pqr;
  table _name_='', col1='' * sum=''*f=8. * (all='Total' yr='') / nocellmerge;
run;

='' удаляет ячейки с метками и уплотняет вывод.

Proc TABULATE output

...