我想在我的数据集中创建一个列,用于计算另一个字段的当前行和下一行的总和。数据中有几个组,如果下一行是当前组的一部分,我只想取下一行的总和。如果一行是该组的最后一条记录,我想用空值填充。
我正在引用reading next observation's value in current observation,但仍然无法弄清楚如何获得我需要的解决方案。
例如:
data have;
input Group ID Salary;
cards;
10 1 1
10 2 2
10 3 2
10 4 1
11 1 2
11 2 2
11 3 1
11 4 1
;
run;
我想在这里得到的结果是:
data want;
input Group ID Salary Sum;
cards;
10 1 1 3
10 2 2 4
10 3 2 3
10 4 1 .
11 1 2 4
11 2 2 3
11 3 1 2
11 4 1 .
;
run;
答案 0 :(得分:3)
与Tom的答案类似,但使用“预见”合并(没有by
语句和firstobs=2
):
data want ; merge have have (firstobs=2 keep=Group Salary rename=(Group=NextGroup Salary=NextSalary)) ; if Group = NextGroup then sum = sum(Salary,NextSalary) ; drop Next: ; run ;
答案 1 :(得分:2)
使用BY组处理和跳过第一次观察的第二个SET语句。
data want ;
set have end=eof;
by group ;
if not eof then set have (keep=Salary rename=(Salary=Sum) firstobs=2);
if last.group then Sum=.;
else sum=sum(sum,salary);
run;