正如我們所知,在宏編譯過程中應該隱藏特殊字符。但是如果我想將一個動態子串分配給一個宏變量呢?像這樣:將一個子字符串(可能包含引號等)傳遞給宏變量
%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