【发布时间】:2018-04-26 18:51:16
【问题描述】:
我想通过 var1 计算总和。你能用两种方法来计算吗? SQL 和数据步与 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;
我的两种方式:
下面的代码适用于这个小数据集,但我想知道它是否适用于大数据集,因为很难检查结果。
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;
【问题讨论】:
-
请提供您迄今为止为解决此问题所做的任何尝试。除了数据步骤或 SQL 之外,还应考虑 PROC MEANS/SUMMARY/UNIVARIATE,因为它们旨在有效地汇总数据。
-
我更新了我的“解决方案”
-
你的方法是正确的,是常用的一种方式,另一种是通过merge。在此处查看此示例:github.com/statgeek/SAS-Tutorials/blob/master/…
-
如果你有非常大的数据——你需要先排序,这是密集的——你可能想要一个 DoW 循环解决方案,而不是通过数据步骤,但那是更多的代码。除非您有数千万条记录,否则 SQL 或 PROC MEANS 解决方案应该足以满足 IMO 的需求。
标签: sas