如何创建一个新变量来计算 SAS 中包含多个观察值的特定变量(按 ID)的总和?

How can I create a new variable which calculates sum of a specific variable (by ID) containing multiple observation in SAS?

例如,我想从 Data1 创建一个新数据集 (Data2)。

一个新变量,data2 中的成本计算为数据 1 material 中 ID 的多次观察的总和。

(数据 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) 的初学者,我自己很难找到答案。非常感谢,提前。

如果你想使用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;

Base SAS 有几个过程可以显示一组的聚合值。 MEANSSUMMARY 以及 REPORTTABULATE 等报告程序。该过程还可以保存包含计算聚合的输出数据集。

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;