针对SAS宏进行debug笔记总结
这是一篇针对工作中遇到SAS宏报错,如何debug的总结笔记:
先看SAS宏本身是不是能够运行的
先仅运行SAS宏,也就是
%macro到%mend的部分,观察是否能够正常运行,如果出错一般是宏内部SAS语句不全造成的,不全的几种情况:(1)SAS语句的符号漏、错;(2)SAS宏内的if-then-else-end之类的语句忘记加%,但正常data步里不需要;
打开options,方便调试
加
options mprint mlogic symbolgen;,开了这几个options之后,mprint会将执行的宏代码内容编译显示;mlogic会显示宏执行的开始结束以及宏变量的解析;symbolgen会显示宏变量在宏语句执行过程中的赋值和解析。

加入%put,定位错误位置
在你认为出错的地方加
%put,语句正常就能打印内容出来,方便定位宏出错的位置和宏变量的内容。
分段运行程序,查看报错位置与原因
用
%return或者%abort cancel,控制宏运行的部分,前者是不打断宏运行,后者是写在哪里,后续部分就不运行。%abort后面虽然有其他选项,但是最好只用cancel,因为其他语句可能会将SAS进程暴力终止。
options mprint mlogic symbolgen;
%macro test(var1=, var2=,);
data a;
a = 1;
b = 2;
c = a + b + &var2;
d = "&var1";
run;
/* 在这里进行调试 */
%return;
/* %return,该宏只运行上半部分,不打断全部sas程序运行;%abort cancel,全部sas程序只运行到这里 */
data b;
a = 'Yes';
b = 'No';
c = catx('-', a, b, &var2);
run;
%mend test;
%test(var1=%str(Insert Var), var2=5);程序内多个宏,打印宏运行结果
如果一个sas程序里有很多宏要运行,也可以在宏内部加这样一句代码:
%put %str(W)ARNING: [&sysmacroname.] did not execute normally.注意要结合宏里面的条件写,比如某数据集某变量为空等,在条件里加这句代码。这样,在运行sas程序如果条件不满足,就能够迅速定位到该宏。
总结
上述内容只是debug的一些小方法,能否debug成功更重要的是要了解整个宏的功能、用到各个数据集的来源及去处、对SAS宏和代码的熟悉程度。 如果有我没提到的debug方法,欢迎各位发布在评论区,相互探讨!
本文是原创文章,采用 CC BY-NC-ND 4.0 协议,完整转载请注明来自 药企SP程序员Allen
评论
匿名评论
隐私政策
你无需删除空行,直接评论以获取最佳展示效果