使用%SCAN()在SELECT..INTO子句中构造宏变量名

时间:2014-02-14 22:05:53

标签: macros sas

我正在尝试创建macrovariable,使用两个字符串的名称连接,其中一个是%SCAN()函数的结果。所有这些都发生在一个宏内。但是macrovariable未创建,并且日志表示对此macrovariable的引用未解析,但生成的开放代码看起来没问题。

以下是一个例子:

%macro test;
proc sql;
    select max(height) into :height%scan(999 3,1)
    from sashelp.class;
quit;
%mend test;
%test

%put &height999;

日志:

MACROGEN(TEST):   proc sql;
MACROGEN(TEST):   select max(height) into :height999 from sashelp.class;
MACROGEN(TEST):   quit;
NOTE: PROCEDURE SQL used (Total process time):
    real time           0.05 seconds
    cpu time            0.01 seconds



         %put &height999;
WARNING: Apparent symbolic reference HEIGHT999 not resolved.
&height999

但如果我在开放代码中做同样的事情一切正常:

proc sql;
    select max(height) into :height%scan(999 3,1)
    from sashelp.class;
quit;
%put &height999;

日志:

SYMBOLGEN:  Macro variable HEIGHT999 resolves to       72

我怀疑我仍然不了解SAS的宏观机制。或者它是否具体为SELECT INTO?

1 个答案:

答案 0 :(得分:3)

我认为这是因为在%test内创建的宏变量是%test的本地变量,所以你不能在外面调用它。

您可以使用%global hight999;

将其指定为全局变量