9.4からODS EXCELでエクセルファイルが作れる話

連続投稿。
次は9.4の話です。持ってない方、すみません。家でuniversityで試してください。

SASからEXCELファイルを生成する方法はたくさんあります。

ただODS経由で、生成する場合、今まではods tagsets.excelxp というものがあったのですが、
弱点として

・純粋なXLS形式ではない(XML)ため、開くときにメッセージがでたりする。
・XLSX形式は生成できないこともあり、ファイルサイズが大きくなりがち
・グラフなどの画像の挿入にテクニックがいる(できなくはないらしいですが)

などなどがありました。
(ただ、EXCEL周りは難しいところが多いので、僕の話をあまり信用しないでください)

特にグラフ等の画像をEXCELに挿入するのは、中々悩ましいところで、僕は以前DDEでやってました。
それも、一旦画像を外部ファイルとしてどこかに保存し、それをddeでコピーしてエクセルに
ペタッと貼るというコードだったので、あまりスマートではないなぁと思ってました。

ところが9.4からODS EXCELという、名前そのままの機能が実装されました。
(またしても、もっと早く実装してよ!絶対要望あっただろ!アドイン製品ばっか売ろうと...まあこの辺にしておきましょう)

9.4をどうにか会社にぶち込みたい方は、素人にもわかりやすく便利な機能で、見た目おおっ!てなるので、これを武器に上司をうまく丸め込んでみるとか?(Universityでデモ作れるし)


さて使い方ですが、僕もまだ今日初めてなので、基本だけ

data Q1;
X='い';Y=1;Z=3;output;
X='い';Y=2;Z=1;output;
X='い';Y=3;Z=2;output;
X='ろ';Y=1;Z=2;output;
X='ろ';Y=2;Z=4;output;
run;

という適当なデータがあったとして、コードは

ods excel file='/folders/myfolders/example.xlsx'
 style=pearl
 options(sheet_interval='none' 
         heet_name='シート名'
         embedded_title='yes'); 

ods text='自由にテキスト入れれます';

proc print data=Q1 noobs;
run;

proc freq data=Q1;
tables X*Y;
run;

ods graphics / height=400 width=700;
proc sgplot;
 series x=y y=z/group=x;
run;

ods excel close;

結果は











































と、要はods excelとods excel closeの間にあるプロシジャ出力が
全部エクセル化されるよってことです。

DDEのように、セル番地を指定して、値を出力といった感じではなく、
デザインは完全にプロシジャのアウトプットに依存します。

きめ細かい書式のリスト出力が欲しいのであれば、proc reportとかでなんとか頑張りましょう。

ちなみに、このODS EXCELはエクセルがインストールされてない環境で使えます。
実際に上のサンプルは、入ってないやつで動かして、キングソフトとかで開いたものです。

2 件のコメント:

  1. ODS EXCEL初めて知りました。
    サンプルプログラム動かしてみたんですが、sgplotプロシジャ内のserieseは
    seriesのスペルミスですよね。
    あと、最後の行のexcelとcloseの間に全角スペースが入っているようです。
    細かい話でスイマセン。

    返信削除
  2. ぷるううぬすさん、コメント有難うございます!
    いや、全角いれるとか、初歩的なことして、お恥ずかしい…。ご指摘有難うございます!
    精進します!

    返信削除