掲示板質問の回答例:現在使用中のFootnoteの最終番号を取得する方法

掲示板の方に、質問をいただきました。有難うございます!掲示板に返事書こうと思ったのですが、結構やってて面白い内容だったので記事にしました。
(掲示板:http://tumesas.progoo.com/bbs/tumesas_topic_pr_6.html

ただ、本当にこの方法でいいのかわからないので、何かアイデアがあればコメントでも掲示板にでもメッセージください。

さて本題。質問は











なるほど、、。そういえば考えたことない、、。

検索しても、それっぽいのが出てこないので、自分の頭で考えてみました。
以下になります。


まず

data Q1;
X=1;
run;

title 'タイトル1';
footnote 'フットノート1';
footnote2 'フットノート2';
footnote3 'フットノート3';
proc print;
run;


を実行すると、当然















こうなるわけですね。
さて次のプロシジャ実行時に、すでにfootnote3まで使ったことを取得し、footnote4が展開されるようにしたいわけですね。仮にfootnote6まで使っていればfootnote7みたいな感じです。

さて、定義したタイトルやフットノートの情報はどこにいるでしょうか?











SASHELPライブラリの中には、SAS社が用意したサンプルデータセットと共に、SASの様々な定義情報がリアルタイムで更新されるビューが用意されてます。
(ちなみにSASHELPのサンプルデータセットを間違えて全部消したおバカさん(僕です)はSAS社のWebページから再ダウンロードできます)



この中のVTITLEを開けてみると










発見!

typeのTはタイトル、Fはフットノートです。

後は、もう簡単ですね

proc sql noprint;
 select max(number) into:fno
 from dictionary.TITLES
 where type='F' and text^='';
quit;

です。

sashelp.VTITLEはSQLの中ではdictionary.TITLESと書けます。そういうものなんです。

これでマクロ変数fnoには3が入ります。

そして以下

footnote%eval(&fno+1) 'プログラマー名:SASYAMA';

proc print;
run;


を実行すると














となって、確かに最後にプログラマー名がでてきます。

こんな感じです。

まあ、改善点としては、定義可能最大値が10なので、footnote10が既に定義されている場合や、全く定義されていない状態で実行した場合エラーにならないような分岐が必要ですが、そこまではやってません。

0 件のコメント:

コメントを投稿