如何创建一个新变量来计算 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 有几个过程可以显示一组的聚合值。 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;
例如,我想从 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 有几个过程可以显示一组的聚合值。 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;