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代码>