Sas 基于id对组进行求和的函数独立于基于id的组
目前,我正在尝试编写一些代码,每次数据集独立于整个组出现时,都会对每个组进行求和。这就是它目前的样子,而不是我想要的样子。我认为这很简单,但sas 9.3不支持sum over语句/Sas 基于id对组进行求和的函数独立于基于id的组,sas,sum,Sas,Sum,目前,我正在尝试编写一些代码,每次数据集独立于整个组出现时,都会对每个组进行求和。这就是它目前的样子,而不是我想要的样子。我认为这很简单,但sas 9.3不支持sum over语句/ week ID var2 ... MinUnits group 24jun2019 1 x 5 0 01jul2019 1 x 4 1 08jul2019 1
week ID var2 ... MinUnits group
24jun2019 1 x 5 0
01jul2019 1 x 4 1
08jul2019 1 x 7 1
15jul2019 1 x 2 1
22jul2019 1 x 0 2
29jul2019 1 x 5 2
05aug2019 1 x 2 2
24jun2019 1 x 9 0
01jul2019 2 x 5 1
08jul2019 2 x 6 1
15jul2019 2 x 8 1
22jul2019 2 x 1 2
29jul2019 2 x 5 2
05aug2019 3 x 3 2
我想要它展示什么
week ID var2 ... MinUnits group SumMinUnits
24jun2019 1 x 5 0 5
01jul2019 1 x 4 1 13
08jul2019 1 x 7 1
15jul2019 1 x 2 1
22jul2019 1 x 0 2 7
29jul2019 1 x 5 2
05aug2019 1 x 2 2
24jun2019 1 x 9 0 9
01jul2019 2 x 5 1 19
08jul2019 2 x 6 1
15jul2019 2 x 8 1
22jul2019 2 x 1 2 9
29jul2019 2 x 5 2
05aug2019 2 x 3 2
正如您所看到的,简单地按组求和是不可行的,因为组号会针对不同的ID重复(最终是相同的ID,但在这些情况下,位置变量与ID显示的原始时间不同)
请注意,我不是要求你为我编码,因为这是太多的工作。我只是想知道是否有一个functin我可以用来做这件事。我曾考虑过使用循环和groupby,但这将汇总总组数您可以在BY语句中使用NOTSORTED关键字,使用GROUP变量按组生成
data want;
do until (last.group);
set have ;
by group notsorted;
SumMinUnits=sum(SumMinUnits,MinUnits);
end;
do until (last.group);
set have ;
by group notsorted;
output;
end;
run;
注意:这将为组中的所有观察值将SUMMINUNITS设置为相同的值。您可以添加额外的代码,在第二个DO循环中,当它不是组的第一个观察值时,将其设置为missing。这样做不管用吗?它会将总数添加到组的每个记录中,但在其他情况下,您的数据似乎是按ID和组排序的
proc sql;
create table want as
select *, sum(minUnits) as total_units
from have
group by ID, GROUP;
quit;
通常情况下,汇总时会减少记录数。因为你有6组,所以你只能输出6个观察结果。有额外的观察是令人困惑的。聪明,谢谢你的帮助。它工作得很好。NOTSORTED关键字似乎在将来对我来说是一个非常有用的工具。再次感谢!这一个最终为每个ID添加了所有分钟,这是我一直遇到的问题。然而,如果你有兴趣看看它是如何解决的,汤姆的建议是有效的。