Imasasor 发表于 2013-2-20 15:47
data a;
input city $;
cards;
经过两天的冥思苦想,我终于能够解读这段代码了
,不对之处请指正!多谢指教了!
call execute用于在data step调用宏,
原则是,除了data步涉及的变量之外的内容都需要用引号,且是宏专用的引号。
这里实际上是
call execute要引用一段内容,这内容是 %report(city=city),其中第二个city是变量,其他都是需要加引号的
SAS连接变量和文本可以用!!和||,文本!!变量!!文本,于是可以这样写:
"%report(city=" !! city !! ")"
而宏引用需要特定的写法,不能直接用“”,要用到%nrstr和%str,一个包括%和&,一个不包括,
再变身就成了 %nrstr("文本")!!变量!!%str("文本"),也就是
%nrstr("%report(city=")!!city!!%str(")")
最后,套上外皮
call execute(%nrstr("%report%(city=")!!city!!%str(")"));
真够闹心的啊……接下来再研究下一段代码