SAS 程序冷知识——if 0 then set的妙用

有一个数据集,当他没有观测的时候,给宏变量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,都可以正常运行。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容