SAS使用双&符号宏变量定义%LET宏变量

时间:2017-10-17 23:27:59

标签: sas sas-macro ampersand

我正在尝试使用%LET语句创建一个本地宏变量,其值是一个需要多个&符号才能解析的宏变量。在分配本地宏变量的名称之前,SAS没有解析多个&符号。

%macro example;
%do i=1 %to %sysevalf(&max_n);
    %let dg= &&max_&i..;
    {stuff happens here}
%end;
%mend;
%example;

例如,& max_1。解析为我在代码的{stuff happen here}部分中使用的APPLE。但是,SAS正在给我警告 "警告:表示符号引用MAX_未解析。" DG宏变量返回&& max_1到&& max_17。呼叫和DG。此时将返回&& max_1,它将自行解析为APPLE,但这不适用于我未显示的代码中的语法。

任何想法如何制作宏变量以便& DG。将返回APPLE?

2 个答案:

答案 0 :(得分:2)

(我知道这不是答案,但我不能在评论中发布格式化的代码。之后我会编辑/删除这篇文章)

您在此处发布的代码不是您的罪魁祸首。如果我按原样使用它,请在前面初始化几个变量,并在%put

中添加stuff happens语句
%let max_1=APPLE;
%let max_n=1;

%macro example;
%do i=1 %to %sysevalf(&max_n);
    %let dg= &&max_&i..;
    %put &dg;
%end;
%mend;
%example;

您可以复制/粘贴并运行它,然后打印出“APPLE'按预期记录到您的日志。

你必须要做的事情更多,这会导致你的问题。

答案 1 :(得分:1)

此外,在调用宏的宏执行时间之前,宏变量不会被解析(或者不需要存在于父或当前作用域中)。因此,max_1和max_n的赋值可以在宏定义之后和%示例之前进行。

您遇到的行为可能是由于您在宏调用之前应用于变量的宏引用。您可以在被调用范围内的宏中使用%unquote,在调用范围内使用宏解析,或者确定如何使用减少的引用量来处理您的概念和输入。

注意:数字索引的宏变量有时称为“宏数组”。后缀为符号的宏变量有时称为“宏关联数组”或“宏对象”