(掲示板: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 件のコメント:
コメントを投稿