有一个数据集,当他没有观测的时候,给宏变量x赋值0,否则赋值1。如果用以下代码会出现错误。
data _null_;
set dataset nobs=k;
if k=0 then call symput('x','0');
else call symput('x','1');
run;
因为如果dataset这个数据集没有观测,那么以上data步就不会在PDV运行,后面的if语句也不会执行。这个时候if 0 then set就有用了。如果把代码改成:
data _null_;
if 0 then set dataset nobs=k;
if k=0 then call symput('x','0');
else call symput('x','1');
run;
以上代码就可以运行,因为set不会真正执行,因此data步相当于运行一个没有set的过程步,此时他的观测数是1,但由于在编译阶段,set和nobs都会执行,因此k又是有值的,所以这段代码不论数据集是否观测为0,都可以正常运行。