如何在循环中得到:var1,var2?我知道取消对j的引用是行不通的,但是含义对于我想做的事情更加清楚(见下文)
%let var1 = apple;
%let var2 = pear;
data _null_;
do j=1 to j=2;
put &var&j; //<---?
end;
run;
在日志中:
apple pear
答案 0 :(得分:4)
如上所述,J不是宏变量,因此不能这样使用。您可以使用SYMGET函数来检索该值。假设出于某些原因需要数据步进逻辑:
data _null_;
do i=1 to 2;
x= symget(catt('var', i));
put x;
end;
run;
答案 1 :(得分:0)
听起来像您想通过将另一个宏变量的值附加到某个常量前缀来解析要创建其名称的宏变量。
如果您尝试使用如下代码:
.for
您将收到一条错误消息,提示名为%let var1 = apple;
%let var2 = pear;
%let j=1 ;
%put &var&j;
的宏变量不存在。
您需要通知宏处理器,它需要延迟尝试评估VAR
的时间,直到添加后缀为止。这样做的方法是将第一个&var
翻倍。
&
双%put &&var&j;
的存在将导致宏处理器将其替换为单个&
,并向自身设置提醒,以重新扫描结果以获取更多的宏变量引用。
因此,第一遍将&
替换为&&
,并将&
替换为&j
。然后第二遍将1
替换为&var1
。