【问题标题】:How can I create a new variable which calculates sum of a specific variable (by ID) containing multiple observation in SAS?如何创建一个新变量来计算包含 SAS 中多个观察值的特定变量(按 ID)的总和?
【发布时间】:2019-07-03 02:35:01
【问题描述】:

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

data2 中的一个新变量 cost 被计算为 data1 的材料中按 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) 的初学者,我自己很难找到答案。非常感谢,提前。

【问题讨论】:

  • 提示:GROUP BY.

标签: sql sas sum new-operator proc


【解决方案1】:

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;

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • 非常感谢您的帮助!!根据您的建议,稍后我将在我的办公室尝试进行如下分析。过程 sql;创建 Data2 作为选择 ID,sum(material) 作为从 Data1 按 ID 分组的总和;退出;
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-05
    • 2012-12-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-12
    相关资源
    最近更新 更多