无法访问子句中的 char 变量

char variable in clause cannot be accessed

我想像下面这样在 where 子句中访问 c​​har 变量-->

%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);

我正在尝试将 "in contains like" 运算符合并到 where 子句中,但它不起作用会导致语法错误...但是缺少 eq ne le gt 运算符正在工作... 我该如何解决这个问题。感谢您的帮助。

一定要在需要字符串的地方传递(引用)文字,例如:

%obs(indsn=infos, outdsn=ch,clause=where,col=name,optr=?, subset_val='Namo');

您的目标可能是过于自动化。利用 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 字符串