宏中的冒号修饰符

Colon modifier in macro

我正在尝试在宏中使用冒号修饰符功能,但它的工作方式似乎与在数据步骤中的工作方式不同。下面显示了我正在尝试做的一个示例。

data _null_;
str = "hello";
if str =: "h" then put "y";
else put "n";
run;

if-statement 在数据步骤中计算 TRUE 但当我在宏语言中应用类似的逻辑时,这似乎不再起作用。

%let str = hello;
%put %eval(&str =: h);

上面的代码现在计算为 FALSE。我在这里遗漏了什么或者这个修饰符在宏语言中不可用吗?我知道我可以使用 %eval(%substr(&str,1,1)=h),但我更想知道 : 是否有效。

不,:不在宏操作符列表中;有关详细信息,请参阅 macro language reference

注意=:在其他地方也是无效的,比如在PROC SQL。在这些上下文中,eqt 是等效的运算符,但这在宏语言中也不起作用。