クリーンなセッションでローカルに実行: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()が行っていることを正確に説明できますか?あいまいな質問に対する謝罪ですが、私は関連する相互作用が何であるか不明です。同等のデータステップ構文を使用して複製することはできないので、おそらくproc SQLの特殊性が関係していますか?
しかし、なぜこのエラーが発生するマクロのコンパイル時に文字列をマスキングするのでしょうか?私は、コードが実行されるまでにすべてのマクロクォートが解決されると期待します。 – jl6
%strはコンパイル時に文字列をマスクし、その兄弟%quoteは実行中に文字列をマスクします。これは、proc SQL、マクロのコンパイルと実行を組み合わせたものです。このホワイトペーパーでは、マクロの引用について多くのことを説明しています。http://www2.sas.com/proceedings/sugi28/011-28.pdf –