如何使用SAS按组分组下一行的值?

时间:2016-03-08 18:13:35

标签: sas

我想在我的数据集中创建一个列,用于计算另一个字段的当前行和下一行的总和。数据中有几个组,如果下一行是当前组的一部分,我只想取下一行的总和。如果一行是该组的最后一条记录,我想用空值填充。

我正在引用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;

2 个答案:

答案 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;