我对SAS中的条件求和有一个棘手的问题。实际上,这对我来说非常复杂,因此我无法用语言来解释。因此,我想展示一个例子:
A B
5 3
7 2
8 6
6 4
9 5
8 2
3 1
4 3
如您所见,我有一个包含两列的数据表。首先,我计算了A列的条件累积和(我可以自己做 - 所以这个步骤不需要帮助):
A B CA
5 3 5
7 2 12
8 6 18
6 4 8 ((12+8)-18)+6
9 5 17
8 2 18
3 1 10 (((17+8)-18)+3
4 3 14
所以我的条件值是18.如果累计超过18,那么它等于18和下一个值,如果18之后的第一个值的总和超过18的数量。(正如我所说,我可以自己做) 因此,棘手的部分是我必须根据A列计算B列的累积总和:
A B CA CB
5 3 5 3
7 2 12 5
8 6 18 9.5 (5+(6*((18-12)/8)))
6 4 8 5.5 ((5+6)-9.5)+4
9 5 17 10.5 (5.5+5)
8 2 18 10.75 (10.5+(2*((18-7)/8)))
3 1 10 2.75 ((10.5+2)-10.75)+1
4 3 14 5.75 (2.75+3)
从示例中可以看出,B列的累积总和非常具体。当列CA等于我们的条件值(18)时,我们计算获得条件值(18)的最后一个值的比例,然后使用该比例计算列B的累积和。
答案 0 :(得分:3)
当A的总和达到18或更多时,您希望在当前记录和下一记录之间拆分A和B的值。一种方法是记住A和B的剩余值,并在新的累积变量中将它们向前移动。只需确保在重置这些变量之前输出观察结果。
data want ;
set have ;
ca+a;
cb+b;
if ca >= 18 then do;
extra_a=ca - 18;
extra_b=b - b*((a - extra_a)/a) ;
ca=18;
cb=cb-extra_b ;
end;
output;
if ca=18 then do;
ca=extra_a;
cb=extra_b;
end;
drop extra_a extra_b ;
run;