我想在where子句中访问char变量,如下面的那样 - >
%macro obs(indsn=, outdsn=, clause=, col=, optr=, subset_val=);
data &outdsn;
set &indsn;
&clause &col &optr &subset_val;
run;
proc print data= &outdsn;run;
%mend obs;
%obs(indsn=infos, outdsn=ch,clause=where,col=name,optr=?, subset_val=Namo);
我正试图将#34;包含在" where子句中的运算符但它不起作用会给出语法错误...但缺少eq ne le gt运算符正在工作... 如何解决这个问题,我们非常感谢。
答案 0 :(得分:1)
您的目标可能是自动化程度过高。使用WHERE可以独立的事实,我建议修改如下:
%macro obs(indsn=, outdsn=, filter=);
data &outdsn;
set &indsn;;
Where &filter;
run;
proc print data= &outdsn;run;
%mend obs;
%obs(indsn=infos, outdsn=ch, filter=name ? 'Namo');
如果您最终遇到了通过解析问题的非常复杂的过滤器,则可能需要屏蔽FILTER字符串
答案 1 :(得分:0)
确保传递(引用)需要字符串的文字,例如:
%obs(indsn=infos, outdsn=ch,clause=where,col=name,optr=?, subset_val='Namo');