在乾淨的會話本地執行:SAS宏引用如何與格式文字進行交互?
%let x = %str(put(age, best.));
proc sql;
select &x from sashelp.class;
quit;
這會產生以下錯誤:
1 put(age, best.)
----
22
----
76
ERROR 22-322: Syntax error, expecting one of the following: a format name, ?.
ERROR 76-322: Syntax error, statement will be ignored.
但這種 「手動解決」 的版本沒有票據,警告或錯誤運行:
proc sql;
select put(age, best.) from sashelp.class;
quit;
有人可以解釋在這個程序中%str()在做什麼時會造成問題嗎?對這個模糊的問題抱歉,但我不確定相關的相互作用是什麼;我無法使用等效的數據步語法進行復制,因此可能涉及到SQL特性。
但爲什麼會掩蓋宏編譯過程中的字符串會導致這個錯誤?我希望所有的宏引用都能在代碼執行的時候解決。 – jl6
%str在編譯期間屏蔽了字符串,而其兄弟%引號在執行期間屏蔽了字符串。這是proc sql,宏編譯和執行的結合。本文解釋了很多關於宏觀報價的內容:http://www2.sas.com/proceedings/sugi28/011-28.pdf –