Macros SAS宏如何定义单词的一部分?

Macros SAS宏如何定义单词的一部分?,macros,sas,Macros,Sas,我的程序是这样的: data a; input p1-p3; datalines; 1 2 3 4 5 6 ; %macro hello(version=); proc print data=a; where &version2=5; run; %mend hello; %hello(version=p) 如何找到p2=5的位置?另一种方法是从代码中删除2并将其添加到宏调用中,如下所示: %macro hello(version=); proc print data=a;

我的程序是这样的:

data a;
input p1-p3;
datalines;
1 2 3
4 5 6
;
%macro hello(version=);
proc print data=a;
where &version2=5;
run;
%mend hello;
%hello(version=p)

如何找到p2=5的位置?

另一种方法是从代码中删除2并将其添加到宏调用中,如下所示:

%macro hello(version=);  
  proc print data=a;  
    where &version=5;  
  run;  
%mend hello;  
%hello(version=p2)  

萨斯福格在评论中给出了正确的答案。只需更改
where&version2=5
其中&version.2=5你是金色的。原因是SAS认为&version2实际上是宏变量的名称,但它找不到名为&version2的宏变量!将句点放在那里会告诉SAS“这是宏变量名称的结尾,所以请像平常一样对待它后面的所有内容。”

您好!您可能希望通过使用更常规的间距来更好地格式化代码,以便其他人更容易阅读。干杯。您需要用句点分隔宏分辨率:
where&version.2=5