Sas 计算运行总计时,如何在行之间保留计算值?
关于SAS中的条件和,我有一个棘手的问题。事实上,这对我来说非常复杂,因此我无法用语言来解释。因此,我想举一个例子:Sas 计算运行总计时,如何在行之间保留计算值?,sas,Sas,关于SAS中的条件和,我有一个棘手的问题。事实上,这对我来说非常复杂,因此我无法用语言来解释。因此,我想举一个例子: A B 5 3 7 2 8 6 6 4 9 5 8 2 3 1 4 3 如您所见,我有一个数据表,它有两列。首先,我计算了A列的条件累积和(我可以自己做,所以这一步不需要帮助): 所以我的条件值是18。如果累计值大于18,则等于18,如果18之后的第一个值的总和超过18,
A B
5 3
7 2
8 6
6 4
9 5
8 2
3 1
4 3
如您所见,我有一个数据表,它有两列。首先,我计算了A列的条件累积和(我可以自己做,所以这一步不需要帮助):
所以我的条件值是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的累积和。看起来,当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;
看起来,当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;