我对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;请有人帮我理解我错在哪里;
赞赏它;
再次感谢;
答案 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,否则只是继续添加值。我想我一定是错的
再次感谢;