我正在尝试使用%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?
答案 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,在调用范围内使用宏解析,或者确定如何使用减少的引用量来处理您的概念和输入。
注意:数字索引的宏变量有时称为“宏数组”。后缀为符号的宏变量有时称为“宏关联数组”或“宏对象”