僕自身は相変わらず元気です。
連絡いただいているのに返せていない方、ごめんなさい。少し落ち着いたので徐々に
返信させていただきます。不義理な真似してすみませんでした。
あと、掲示板の方を、amatsuさんに丸投げしているようで、本当にすみません。
いつも見てはいるんですが、ついつい甘えてしまってました。
さて、いつものことですがかなり需要のない話をします。
なんかデータセットがあったとして
data Q1;
x=1;y='A';output;
x=2;y='B';output;
run;
それをSAS上で、選択して右クリックすると以下のようなメニューがでてきます。
これ見て、「もっとマシなメニューにしろよ」って怒りを感じるのは、捻くれた僕だけですか?
しかもEXCELで表示とかいいながら、内部的に実行されているコードは以下のとおりで
filename _temp_ "XXXX.xls";
ods noresults;
ods listing close;
ods html file=_temp_ rs=none style=minimal;
proc print data=Work.'Q1'N label noobs;
run;
ods html close;
ods results;
ods listing;
filename _temp_;
ods htmlで無理やりだしてるだけやん。って感じですね。純粋なEXCELじゃないから
警告出てきてうざいし、そのまま人にだすのがためらわれて嫌なんです。
とはいえ、ここのメニューをどうこうしたりとかは SAS/AF みたいなアプリケーション開発用の
ライセンスないとできないんでしょって思ってました。
ところがなんとできたんです。
手順は「えぇ?」って感じなんですが、覚えれば簡単です。
(9.4は試してないのでわからないのですが9.13-9.3までは以下の手順でできるはずです)
まず、拡張エディタがアクティブな状態で
ツールバーの「表示」で「コンテンツのみ」をクリックします。何もおきませんけど必要なんです
次に「ツール」で「オプション」→「エクスプローラ」を選択します
※この「エクスプローラー」はコンテンツのみを選択した直後しか表示されない
隠し項目になります
ここで「メンバー」タブの「テーブル」を選択して、「編集」ボタンをおします
そこで「追加」をクリックします
アクションの部分に「FREQプロシージャにかける」
アクションコマンドの部分に以下のコードを書いてください。
gsubmit "proc freq data=%8b.'%32b'N;run;"
あとはOK OK OKでウインドウを閉じます。
そしたら、再度さっきのデータセットを選択して、右クリックします。
すると以下のようにメニューが追加されていることがわかります。
そしてそれを実行してみると、
のように選択したデータセットがFREQプロシージャにかけられました。
これを応用すれば色々できます。
たとえば、さっき文句をつけたエクセル表示の場合
アクション「ちゃんとしたEXCELで表示」
アクションコマンド「
gsubmit "proc export data= %8b.'%32b'N outfile= 'c:\tmp.xlsx' dbms=excel label replace;newfile=yes;run;options noxwait noxsync;x 'c:\tmp.xlsx';"
」
とすれば、proc exportで出力したEXCELファイルが開きます
(そもそもproc exportの仕様自体に言いたいことは多いですが...)
で、肝心のアクションコマンドの書き方ですが
%8b.'%32b'Nで、ユーザーが選択したライブラリの選択したデータセットみたいな意味になります。
ここを普通のデータセット名前にしてしまうと、どれ選んで実行しても同じデータセット開いちゃいますからね。
で、どうもアクションコマンドは255までしか記述できないみたいです。
あとマクロを中で使いたい場合は%%testのように%を二度付けするとうまくいくようです。
このあたりに詳しい方がいれば逆に教えてください。情報なさすぎです。
ちなみに、この変の話は、大昔にもちょっと触れていたことがありましたので参考まで
〔記事〕
SASデータセットを開いた時にラベル名ではなく変数名を表示するのをデフォルト設定にする
http://sas-tumesas.blogspot.jp/2013/09/sas_20.html
また、当分、更新ペースはこんな感じか、下手したらさらに遅くなると思いますが
来年もよろしくお願いします
0 件のコメント:
コメントを投稿