特定の書式設定でデータセットから Excel ファイルを印刷するマクロ %xl を作成しました。それ自体はうまく機能しています。ただし、マクロはtitle
一時的に設定する必要があります。マクロの最後でタイトルをクリアすることはできますが、マクロ前のタイトルを保持して、マクロの最後のステップとして復元したいと考えています。
title
の現在の値をマクロ変数に取り込むにはどうすればよいですか? オプション付きの %sysfunc(GetOption()) に似ています。
ありがとう、pT
タイトルと脚注は、SASHELP.VTITLE ビューを使用して取得できます。したがって、それを使用して現在の値を保存し、プログラムを実行してから、別の手順を実行して、次call execute
のように を使用してタイトルをリセットします。
data _old_titles;
set sashelp.vtitle;
run;
/* do something */
footnote;
title;
/* reset titles and footnotes */
data _null_;
set _old_titles;
if type = 'T'
then cmd = catt('title',number," '",trim(text)," ';");
else cmd = catt('footnote',number," '",trim(text)," ';");
call execute(cmd);
run;
text
単一引用符に変換される 2 つの連続したアポストロフィを防ぐために、値の後に余分な空白が使用されていることに注意してください。また、不要なマクロ展開を防ぐために単一引用符を使用しないでください。
完全ではありませんが、多くのタイトルと脚注を使用できるため、オプションまたは SAS システム関数を作成するのが難しいことを覚えておいてください。これは何度も「機能要求」されましたが、実装されることはありませんでした。
SAS/AF のライセンスをお持ちの場合は、SCL プログラムを作成して、必要なことを行うことができます。SCL プログラムの作成については、 こちらの手順に従ってください。
あなたのSCLプログラム(私はgettitle.sclと名付けました)であなたが望む
init:
call symput('TitleOld',gettitle(1));
return;
これをコンパイルしたら、次のように呼び出すことができます
title "whatever it happens to be";
proc display c=myscl.catalog.gettitle.scl; run;
%xl;
title "&TitleOld";
最初にタイトルを設定してからマクロ変数を作成しようとするのではなく、最初にマクロ変数を設定する方がよいようです (または、繰り返し使用する複数の異なるタイトルがある場合は複数)、次に次のように、タイトル ステートメントでそれを使用します。
%let title_text = "This is my pre-macro title";
/* Set title first time. */
title "&title_text";
/* Call macro. */
%xl;
/* Restore title. */
title "&title_text";