kangjiang 发表于 2024-7-17 16:39 
想问下,这个例子中,如果是call execute('%test(7,"||strip(age)||")');,为何X值为空值,且还会有一个变 ...
我理解应该是,你的单引号位置和invoke 3存在区别,你的单引号将整个%test全部括起来了,这个时候 ("||strip(age) ||" )仅仅只是属于字符,和sashelp.class里面的age没有关系。在执行test宏的时候,data a7; num = 7; x = ""||strip(age) ||""; run; 这时候,在a7这个data步编译阶段,会生成age,但是age值是空的, x的值也是空的。
楼主的invoke3 第一个单引号和第二个单引号将%test(3, 括起来了,data _null_的执行阶段 执行strip(age) 这个操作,然后age变成字符型 x = "14",然后再使用|| ')' 把整个宏程序进行括号。