我的代码中有一个计数器,如下所示:
%let counter = %sysfunc(countw(&&CLMNS&j.));
但是,这对于某些宏变量无法正常工作。对于包含值 variable_1
的 Parent_Name, Name
,计数器返回 3(应为 2)。对于包含 variable_2
的 Alt_Parent_Name, Alt_Name
,计数器正确返回值 2。
如果我添加一对括号,那么现在是:
%let counter = %sysfunc(countw((&&CLMNS&j.)));
,现在它会正确输出 variable_1
和 variable_2
的值 2。
我已阅读帮助卡但无济于事,我想弄清楚为什么会发生这种情况以及额外的括号的作用。我最困惑的是第一次结果的不一致。
也许这有帮助:
SAS 将按以下顺序对其进行分解:
%let counter = %sysfunc(countw(&&CLMNS&j.));
&&
) 解析为一个 & 符号 (&
),并且扫描仪继续。&j.
。例如。到1
。&CLMNS1
。例如。到 variable_1
(必须用另一个 & 符号来解决)或只是 Parent_Name, Name
。%let counter = %sysfunc(countw(Parent_Name, Name));
现在您也许可以看到出了什么问题。当编译器继续运行时,它将把
Name
理解为 <character(s)>
中的可选参数 countw
。
您想要的是屏蔽宏处理器的
&&CLMNS&j.
的输出。 IE。使用%NRSTR
:
%let counter = %sysfunc(countw(%NRSTR(&&CLMNS&j.)));
这些资源可能与您相关: