我有一个关于解决SAS中宏变量的问题。我有以下代码,这是一个更大块的简化版本。出于实际原因,我无法更改代码的结构。解决SAS中的宏变量问题
%let a = x1 x2 x3;
%let b = y1 y2 y3;
%let c = a b;
%macro test (input);
%local i;
%let string_c = %str(&input);
%do i=1 %to 2;
%put &%qscan(&string_c, &i); /* ? */
%end;
%mend test;
%test(&c);
在步骤?以上,我想解决A和B作为宏观变量和有系统打印出
x1 x2 x3
然后
y1 y2 y3
然而,上面的代码不reslove A和B作为宏观变量和系统打印出来
&a
&b
我想知道是否有解决这个问题的办法。
非常感谢!
有趣的答案。你可以添加一些解释为什么这会起作用,特别是为什么%unquote()在这里很有用,即使你用%str()和%qscan()删除了引用。例如,它有助于这个简单的测试案例: %macro x; x%修补; %let x = 1; %put%unquote(&&%x); – Quentin
谢谢Shenglin。它的工作原理!后续问题类似于Quentin的原因:) – frostman
没有%unquote,SAS将a/b解释为文本加上&,而不是宏变量&a/&b,使用%unquote,强制将&和a/b粘合在一起并恢复值的正常标记。 –