SAS,按组求和 [英] SAS, sum by group
本文介绍了SAS,按组求和的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我想通过 var1 计算总和.你能不能用两种方法来计算.SQL 和数据步骤与 if first.var1.
I want to calculate the sum by var1. Could you use two methods to do the calculation. SQL and data step with if first.var1.
data have;
input var1 var2$ var3;
datalines;
1 a 3
1 a 4
1 a 3
2 b 5
2 b 3
3 c 1
;
run;
data want;
input var1 var2 $ var3 sum_by_var1;
datalines;
1 a 3 10
1 a 4 10
1 a 3 10
2 b 5 9
2 b 3 9
3 c 1 9
;
run;
我的两种方式:
下面的代码适用于这个小数据集,但我想知道它是否适用于大数据集,因为很难检查结果.
The code below works on this small data set, but I wonder if it will work on large data sets because it is hard to check the results.
proc sql;
create table new as
select
*
,sum(var3) as sum_by_var1
from have
group by var1
order by var1
;
run;
下面的代码不起作用
data new2;
set have;
by var1;
if first.var1 then
by_var1 + var3;
run;
推荐答案
要使用需要使用的数据步骤修正计算:
To fix your calculation using the data step you need to use:
Retain
关键字,用于计算 var1 的总和,Output
关键字只输出一次 var1 的和;那是到达 var1 的最后一个观察值时,- 如果您想要分离的数据,您必须重新连接到您的 Have 表.
Retain
keyword to calculate the sum by var1,Output
keyword to output only once sum by var1 is calculated; that's when reaching the last observation for var1,- If you want the segregated data you have to join back to your Have table.
修复:
data new2;
set have;
by var1;
retain sum_by_var1;
if first.var1 then do; sum_by_var1=0; end;
sum_by_var1 + var3;
if last.var1 then do; output; end;
run;
输出:
var1=1 var2=a var3=3 sum_by_var1=10
var1=2 var2=b var3=3 sum_by_var1=8
var1=3 var2=c var3=1 sum_by_var1=1
这篇关于SAS,按组求和的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文