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,

关于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列的累积和:

 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;