SAS retain语句和现有变量
我试图理解retain语句应该如何处理现有变量,但由于没有得到期望的结果,似乎还是遗漏了一些东西 在下面的示例中,我的代码旨在为value变量创建一种计数器SAS retain语句和现有变量,sas,retain,Sas,Retain,我试图理解retain语句应该如何处理现有变量,但由于没有得到期望的结果,似乎还是遗漏了一些东西 在下面的示例中,我的代码旨在为value变量创建一种计数器 data new (sortedby=id); input id $ value count; datalines ; d 55 0 d 66 0 d 33 0 run; data cc; set new; by id; retain count; count+value; run; 我希望count变量是va
data new (sortedby=id);
input id $ value count;
datalines ;
d 55 0
d 66 0
d 33 0
run;
data cc;
set new;
by id;
retain count;
count+value;
run;
我希望count变量是value列累积的结果。但是,结果未实现,列保留其原始0值
我很想了解为什么“+”符号中的implict retain语句在这种情况下不起作用
这是一个与count是一个已经存在的变量相关的问题
BestsRETAIN语句所做的就是防止变量在数据步骤的顶部被设置为缺失。在代码中,SET语句读取COUNT(0)的值,因此即使保留该值,在SET语句执行时也会将其重置为0 我会使用下面这样的代码,其中包含很多PUT语句:
data cc;
put "Top of loop" (_n_ value count count2 count3)(=) ;
set new;
put "After set statement " (_n_ value count count2 count3)(=) ;
by id;
retain count;
count+value;
count2+value ;
count3=sum(count3,value) ;
put "After sum statement" (_n_ value count count2 count3)(=) ;
run;
在循环的顶部,Count和Count2被保留。由于显式retain语句以及在SET语句上读取,所以保留Count。Count2被保留,因为sum语句具有隐式retain。Count3不保留
结果如下:
Top of loop _N_=1 value=. count=. count2=0 count3=.
After set statement _N_=1 value=55 count=0 count2=0 count3=.
After sum statement _N_=1 value=55 count=55 count2=55 count3=55
Top of loop _N_=2 value=55 count=55 count2=55 count3=.
After set statement _N_=2 value=66 count=0 count2=55 count3=.
After sum statement _N_=2 value=66 count=66 count2=121 count3=66
Top of loop _N_=3 value=66 count=66 count2=121 count3=.
After set statement _N_=3 value=33 count=0 count2=121 count3=.
After sum statement _N_=3 value=33 count=33 count2=154 count3=33
Top of loop _N_=4 value=33 count=33 count2=154 count3=.
是的,变量已经存在于输入数据集中这一事实将影响您的程序。当SET语句执行时,COUNT的保留值将被从输入数据集中读取的COUNT值覆盖
请注意,实际上,SAS已经在数据步骤迭代中保留了来自输入数据集的所有变量。这解释了MERGE语句如何实现一对多合并。它还解释了当您进行N到M合并时,SAS如何保留较短组中最后一次观察的值。谢谢昆汀。我原以为可以使用一个设置为0的现有变量,并结合retain使其成为聚合器。总有新东西要学。胜过