关于在SAS中保留声明的简单帮助

时间:2016-05-02 16:43:27

标签: sas retain

我对sas很新,所以我还在学习保留声明;我有一个ID和总支出的数据集;我想通过使用retain语句获得每个客户的累计支出;我的代码正在跟随;

data ex03.try1; set ex03.sorted;
  by ID;
if first.ID then do;
   retain total 0;
    total = total+amount; end;
   else do; total=total+amount; end;
run;

但是,我的代码并没有真正为每个新ID设置total的初始值为0;请有人帮我理解我错在哪里;

赞赏它;

再次感谢;

2 个答案:

答案 0 :(得分:2)

在编译数据步骤期间评估RETAIN语句。你放置的地方并不重要,它会产生同样的效果。特别是将它放在条件内部什么都不做。 RETAIN语句告诉SAS,在数据步骤的下一次迭代开始时,不要将值设置为missing。 retain语句的可选初始值将设置数据步骤第一次迭代之前的值。

要更改每个新ID值的值,您需要使用在数据步骤运行期间实际执行某些操作的实际赋值语句。

您可以使用SUM语句并缩短代码。使用SUM语句意味着保留变量并将其初始化为零。

data want;
  set have;
  by id;
  if first.id then total=0;
  total+amount;
run;

请注意,SUM语句还将处理AMOUNT变量的缺失值。它实际上相当于:

retain total 0;
total=sum(total,amount);

答案 1 :(得分:0)

我已经将保留总数0置于if then else语句之外,如

  by ID;
   retain total 0;
   if first.ID then do;
     total=0;
     total=total+amount;
   else do;
    total=total+amount;
 run;

但是,有人可以向我解释为什么我的透明代码不起作用。我在想它是否是一个新的ID,然后将total设置为0,否则只是继续添加值。我想我一定是错的

再次感谢;