无法访问char变量in子句

时间:2016-11-03 07:14:07

标签: sas sas-macro

我想在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运算符正在工作... 如何解决这个问题,我们非常感谢。

2 个答案:

答案 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');