ラベル print の投稿を表示しています。 すべての投稿を表示
ラベル print の投稿を表示しています。 すべての投稿を表示

tagsets excelxpでODS出力をエクセルファイルにする時に、セルの表示形式を設定する方法

例えば、以下のようなデータセットがあったとします。

data Q1;
IDNO='001';X='い';Y=1;output;
IDNO='002';X='ろ';Y=2.2;output;
run;






これに対して

ods tagsets.excelxp file='D:\A.xls';
proc print data=Q1 noobs;
 var IDNO X Y;
run;
ods tagsets.excelxp close;

とすれば、純粋なエクセルではないのでファイルが開く際に
確認のメッセージが入りますがOKすれば








こんな感じのエクセルファイルができると思います。

便利なのでちょっとした出力の際によく使うのですが、
これだとセルの表示形式が「標準」になってしまうため、「001」といったテキストが
1になってしまいます。

そういった場合に次のように書くことで回避できます。

ods tagsets.excelxp file='D:\B.xls';
proc print data=Q1 noobs;
 var IDNO/style={tagattr='format:text'};
 var X;
 var Y/style={tagattr='format:0.0'};
run;
ods tagsets.excelxp close;
















/style={tagattr='format:text'}と打つことで「文字列」とすることができ、

また/style={tagattr='format:0.0'};で有効表示桁数を設定できます。



proc printはODS OUTPUTステートメントをサポートしていない話

今回は、思いつきが失敗した話になります。

以前、「Create tableだけがSQLプロシジャでデータセットを作る方法ではないという話」
http://sas-tumesas.blogspot.jp/2013/10/create-tablesql.html

でSQLプロシジャの出力をODS OUTPUTステートメントで捉えてデータセット化するという内容を紹介しました。
それで、最近ふと思ったのが、それってproc printでもできるのか?ということでした。

例えば以下のようなデータセットがあったとします。

data Q1;
do X=1 to 4;
 do Y=1 to 3;
  output;
  end;
 end;
run;

















そこに

proc print data=Q1 noobs;
 var Y;
 id X ;
 by X ;
run;

を実行すると
idステートメントとbyステートメントの同時指定の効果により


















のようなアウトプットがでます。
この形をデータセットで欲しいなと思って

ods output Print=OUT;
proc print data=Q1 noobs;
 var Y;
 id X ;
 by X ;
run;

として、実行しなおしてみると




「ERROR: PROC PRINT はODS OUTPUT」ステートメントをサポートしていません」
と見事に怒られてしましました。
悪くないアイデアだと思ったのですが、、。

ちなみに全然関係なく、id by sumbyの併用で、いかのような出力が得られ、たまに検算する時に
使います。

proc print data=Q1 noobs;
 var Y;
 id X;
 by X ;
 sumby X;
run;