Суммирование по вертикали в sas - PullRequest
0 голосов
/ 02 марта 2020

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

Данные имеют:

Measure   Jan_total   Feb_total
Startup      100         200
Switcher     300         500

Требуемые данные:

Measure   Jan_total   Feb_total
Startup      100         200
Switcher     300         500
Total        400         700

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

Может кто-нибудь помочь мне найти решение по этому запросу, пожалуйста?

Ответы [ 3 ]

2 голосов
/ 02 марта 2020
proc means noprint
    data = have;
    output out= want
    class measure;
    var Jan_total   Feb_total;
run;
1 голос
/ 02 марта 2020

Чтобы сделать это в коде шага данных, вы должны сделать что-то вроде:

data want;
  set have end=end;       * Var 'end' will be true when we get to the end of 'have'.;
  jan_sum + jan_total;    * These 'sum statements' accumulate the totals from each observation.;
  feb_sum + feb_total;
  output;                 * Output each of the original obbservations.;
  if end then do;         * When we reach the end of the input...;
    measure = 'Total';    * ...update the value in Measure...;
    jan_total = jan_sum;  * ...move the accumulated totals to the original vars...;
    feb_total = feb_sum;
    output;               * ...and output them in an additional observation.
  end;
  drop jan_sum feb_sum;   * Get rid of the accumulator variables (this statement can go anywhere in the step).;
run;

Вы можете сделать это многими другими способами. Предполагая, что у вас фактически есть столбцы для всех месяцев, вы можете переписать код шага данных для использования массивов или использовать PRO C SUMMARY или PRO C SQL для вычисления итогов и добавления итоговых итогов. назад, используя намного более короткий шаг данных, и т. д. c.

0 голосов
/ 02 марта 2020

Зависит от того, предназначен ли он для отображения или для набора данных. Обычно нет смысла иметь общее количество в наборе данных, и он просто используется для отчетов.

PRO C PRINT имеет оператор SUM, который добавит итоги в конец отчета. PRO C TABULATE также предоставляет еще один механизм отчетности, подобный этому.

пример отсюда.

options obs=10 nobyline;
proc sort data=exprev;
   by sale_type;
run;
proc print data=exprev noobs label sumlabel
           n='Number of observations for the order type: '
           'Number of observations for the data set: ';
   var country order_date quantity price;
   label  sale_type='Sale Type'
          price='Total Retail Price* in USD'
          country='Country' order_date='Date' quantity='Quantity';
   sum price quantity;
   by sale_type;
   format price dollar7.2;
   title 'Retail and Quantity Totals for #byval(sale_type) Sales';
run;
options byline;

Результаты:

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...