关于 SAS 中 Retain 语句的简单帮助

Easy help about Retain statement in SAS

我是 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的总计初始值设置为0;请任何人帮助我了解我哪里做错了;

很欣赏;

再次感谢;

我通过将 retain total 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 否则就继续添加值。我想我一定是错了

再次感谢;

RETAIN 语句在数据步骤的编译过程中被评估。你把它放在哪里并不重要,它会产生同样的效果。特别是将它放在条件中什么都不做。 RETAIN 语句告诉 SAS 在数据步的下一次迭代开始时不要将值设置为 missing。保留语句上的可选初始值将在数据步骤的第一次迭代之前设置该值。

要更改每个新 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);