%bquote 不屏蔽未配对的括号

%bquote doesn't mask unpaired bracket

根据 %bquote() 宏函数文档,我不必将未配对的“(”标记为 % 即可将其分配给宏变量。

但是由于某些原因这段代码不起作用(结果变量 var 为空):

%let var=%bquote(();
%put &var;

为什么?如何修复代码以产生预期结果?

您混淆了 执行时 的屏蔽与 编译时 的屏蔽。

%BQUOTE 屏蔽特殊字符 at execution time:

The %BQUOTE function treats all parentheses and quotation marks produced by resolving macro variable references or macro calls as special characters to be masked at execution time. (It does not mask parentheses or quotation marks that are in the argument at compile time.)

要在 编译 时屏蔽它,您必须这样做,因为您在 %let 中分配它的值,您必须使用 %str,其中 是否需要在括号前加上 %

%let var=%str(%();

%put &var;