关于 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);
我是 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);