1

特定の書式設定でデータセットから Excel ファイルを印刷するマクロ %xl を作成しました。それ自体はうまく機能しています。ただし、マクロはtitle一時的に設定する必要があります。マクロの最後でタイトルをクリアすることはできますが、マクロ前のタイトルを保持して、マクロの最後のステップとして復元したいと考えています。

titleの現在の値をマクロ変数に取り込むにはどうすればよいですか? オプション付きの %sysfunc(GetOption()) に似ています。

ありがとう、pT

4

3 に答える 3

4

タイトルと脚注は、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 システム関数を作成するのが難しいことを覚えておいてください。これは何度も「機能要求」されましたが、実装されることはありませんでした。

于 2013-09-10T21:34:22.007 に答える
0

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";
于 2013-09-10T17:04:22.280 に答える
0

最初にタイトルを設定してからマクロ変数を作成しようとするのではなく、最初にマクロ変数を設定する方がよいようです (または、繰り返し使用する複数の異なるタイトルがある場合は複数)、次に次のように、タイトル ステートメントでそれを使用します。

%let title_text = "This is my pre-macro title";

/* Set title first time. */
title "&title_text";

/* Call macro. */
%xl;

/* Restore title. */
title "&title_text";
于 2013-09-10T16:34:31.497 に答える