SAS中的编译与执行

Bor*_*iev 3 sas

这个问题在SAS论坛上进行了讨论,与会者最终同意不同意.

问题很简单:SAS missing value在编译时为所有变量分配一个UNLESS 变量显示在a中sum statement(在这种情况下,SAS 0在编译时指定一个值).这是我的简单证明

  data test;
  put _all_;
  var1+1;
  var2=5;
  put _all_;
  run;
Run Code Online (Sandbox Code Playgroud)

记录屏幕

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.
Run Code Online (Sandbox Code Playgroud)

var2分配了一个missing valueBUT var1被分配,0因为它是一部分sum statement(我相信如此)


我的问题是为什么?我很确定SAS missing values在编译时会为所有变量分配.为什么它会在一个变量中出现异常sum statement?还有其他例外吗?

vas*_*sja 7

我不会称之为总结陈述.

该声明

var1+1;
Run Code Online (Sandbox Code Playgroud)

相当于

retain var1 0;
var1 = var1 + 1;
Run Code Online (Sandbox Code Playgroud)

也不是"长"的总结陈述

var1 = var1 + 1;
Run Code Online (Sandbox Code Playgroud)

也不

var1 = sum(var1, 1);
Run Code Online (Sandbox Code Playgroud)

它本身会执行RETAIN行为,也不会初始化为零.所以回答这个问题:

初始化为零是a + b; 变量语法隐式请求的RETAIN行为的一部分 a.

我想不出其他例外.