使用SAS计算非零值

时间:2019-06-25 17:31:12

标签: sas sum cumulative-sum

我有以下数据。限制金额变量仅适用于第一条记录

如果Limit为0,则PostBal应与Balance相同,否则为Limit + Balance之和

   Id        date              Limit          Balance
   101      4/1/2019        0         50
   101      4/1/2019                 120
   101      4/2/2019                 150
   102      4/1/2019        100   100
   102      4/1/2019                    50
   102      4/2/2019                    25

所需结果:

   Id        date           Limit      Balance  PostBal
   101      4/1/2019        0            50             50
   101      4/1/2019                    120          120   
   101      4/2/2019                    150          150
   102      4/1/2019       100       100           200
   102      4/1/2019                      50          250
   102      4/2/2019                      25          275

我的代码:

    Data want;
     Set have;
    By id date;
    if first.date and not first.id then Limit=PostBal;
    If first.date then do;
     PostBal=Limit;
   End;
   PostBal+Balance;
 Run;

如果“限制”> 0而不是“限制= 0”,则此方法工作正常。感谢您的提前帮助。

1 个答案:

答案 0 :(得分:0)

您需要跟踪LIMIT为零的事实,以便可以使用该事实来更改PostBal的计算方式。因此,为此创建一个新变量。

data want;
  set have;
  by id ;
  if first.id then limit_copy =limit;
  retain limit_copy;
  if first.id then PostBal=limit;
  if limit_copy ne 0 then PostBal+Balance;
  else postbal=balance;
run;