正如我们所知,在宏编译过程中应该隐藏特殊字符。但是如果我想将一个动态子串分配给一个宏变量呢?像这样:将一个子字符串(可能包含引号等)传递给宏变量
%let mvSubstr = %substr(&mvString, 1, 1);
mvString
可以包含任何符号,包括不匹配的单引号或双引号。
所以,在这个例子程序正常工作:
%lev mvString = Test;
%let mvSubstr = %substr(&mvString, 1, 1);
并在以下情况下,程序不能正常工作和SAS报告ERROR: Literal contains unmatched quote.
:
%lev mvString = %str(%'Test%');
%let mvSubstr = %substr(&mvString, 1, 1);
我怎样才能战胜这个问题(请程序独立于mvString
值)?
听起来像只是使用为这种情况构建的函数做了很多额外的工作。 – Tom
不确定是否有很多额外的工作(一个宏语句?)...'qsubstr'虽然很好,我还没有看到。 – Joe
'%QSUBSTR()'和'%QSCAN()'是最初几个宏函数的一部分。当他们引入'%SYSFUNC()'时,出于同样的原因,他们包含'%QSYSFUNC()'。 – Tom