1.
宏执行的产品是SAS代码。楼主的宏执行后,PROC SQL语句,以及后面的 n(%) 都会作为宏的结果返回。
data test;
code="%count(in=adsl,where=age < 65);";
put code=;
run;
如果是需要宏只返回最后的n(%),那就需要前面的整个计算都用宏语句来完成。
2.
首先,call execute语句中对宏的调用不是在编译过程中执行的,而是:
a. 其中的宏语句,如%LET语句,是在data步执行过程中为countx赋值的;
b. 其中的SQL语句,是在data out1这个data步执行完毕后才开始执行。也就是说,宏对COUNTX的“赋值”,其实是在SQL语句执行之前。
另外,%let语句为countx赋值时应该借用了已经存在的宏变量count,也就是之前的某个步骤中产生的宏变量count。楼主可以在data out;语句之前加%symdel count/nowarn; 来验证。


雷达卡





京公网安备 11010802022788号







