Как я могу создать новую переменную, которая вычисляет сумму конкретной переменной (по идентификатору), содержащей несколько наблюдений в SAS? - PullRequest
0 голосов
/ 03 июля 2019

Например, я хочу создать новый набор данных (Data2) из ​​Data1.

Новая переменная, стоимость в data2, рассчитывается как сумма множественных наблюдений по ID в материале данных 1.

(Данные1)

ID  material
1   4
1   4
1   4
2   2
2   4
2   4
3   2
3   6
3   6
4   5
4   5
4   5
4   5
5   2
5   4
5   4
5   8

(Данные2)

ID  cost    
1   12  #4+4+4
2   10  #2+4+4
3   14  #2+6+6
4   20  #5+5+5+5
5   18  #2+4+4+8

Я использовал версию SAS EG только для простого анализа, а недавно я начал использовать процедуру proc sql.Будучи новичком в кодировании SAS (proc sql), мне было очень трудно найти ответ.Заранее большое спасибо.

Ответы [ 2 ]

0 голосов
/ 03 июля 2019

Базовый SAS имеет несколько процедур, которые будут представлять агрегированные значения по группе. MEANS, SUMMARY и процедуры отчетности, такие как REPORT и TABULATE. Процедуры также могут сохранять выходные наборы данных, содержащие вычисленные агрегаты.

data have; input
ID  material_cost;datalines;
1   4
1   4
1   4
2   2
2   4
2   4
3   2
3   6
3   6
4   5
4   5
4   5
4   5
5   2
5   4
5   4
5   8
run;

title "Proc MEANS";
proc means data=have sum noNobs maxdec=0;
  class id;
  var material_cost;
run;

title "Proc SUMMARY";
proc summary data=have print sum noNobs maxdec=0;
  class id;
  var material_cost;
run;

title "Proc REPORT";
proc report data=have;
  columns id material_cost;
  define id / group;
run;

title "Proc TABULATE";
proc tabulate data=have;
  class id;
  var material_cost;
  table id, material_cost*sum / NoCellMerge;
run;
0 голосов
/ 03 июля 2019

Если вы хотите использовать PROC SQL, это прямое использование GROUP BY

proc sql;
  select id, sum(material) as sum from mydataset group by id;
  quit;

Вы можете вручную вычислить это в шаге данных, если вы не хотите использовать PROC SQL

proc sort data=mydataset;
  by id;
run;

data sums;
  set mydataset;
  by id;

  if first.id then sum = 0;
  sum + material;
  if last.id then output;

  keep id sum;

run;

proc print data=sums;
run;
...