SAS中的编译与执行
讨论了这个问题,与会者最终同意不同意 问题很简单:SAS在编译时为所有变量分配一个SAS中的编译与执行,sas,Sas,讨论了这个问题,与会者最终同意不同意 问题很简单:SAS在编译时为所有变量分配一个缺失值,除非sum语句中出现一个变量(在这种情况下,SAS在编译时分配一个0)。这是我的简单证明 data test; put _all_; var1+1; var2=5; put _all_; run; 日志屏幕 var1=0 var2=. _ERROR_=0 _N_=1 var1=1 var2=5 _ERROR_=0 _N_=1 NOTE: The data set WORK.TES
缺失值
,除非sum语句中出现一个变量(在这种情况下,SAS在编译时分配一个0
)。这是我的简单证明
data test;
put _all_;
var1+1;
var2=5;
put _all_;
run;
日志屏幕
var1=0 var2=. _ERROR_=0 _N_=1
var1=1 var2=5 _ERROR_=0 _N_=1
NOTE: The data set WORK.TEST has 1 observations and 2 variables.
var2
被分配了一个缺失值
,但var1
被分配了0
,因为它是求和语句的一部分
(我相信是这样)
我的问题是为什么?我很确定SAS在编译时会将缺失的值
分配给所有变量。为什么它会对将在sum语句中显示的变量产生异常?还有其他例外吗?我不会称之为sum语句
声明
var1+1;
var1 = var1 + 1;
相当于
retain var1 0;
var1 = var1 + 1;
也不是“长”和语句
var1+1;
var1 = var1 + 1;
也不是
它本身将执行RETAIN行为,也不会初始化为零。
因此,要回答这个问题:
初始化为零是由隐式请求的保留行为的一部分
a+b代码>
变量a
的语法
我想不出还有什么例外。很好的解释。还值得注意的是,您实际放置retain
语句的datastep中的位置并不影响识别该语句的时间。因此,将retain语句作为最后一行代码放置与将其作为第一行代码放置是相同的。