2019年1月24日木曜日

ODS EXCELで文字変数を「文字列」として出力したい。




※今回の内容は、SASやEXCELのバージョン・環境によってうまくいくか未検証なので各時の環境でご確認下さい



「ODS EXCEL」でプロシジャの結果をEXCELに出力できますが、文字変数の書式が崩れるのが問題なんですよね。
例を見ていきます。

* Sample data ;
data test;
input x$;
cards;
001
002
003
.
;



以下は失敗例。

* NG  ;
ods excel file="出力するパスを指定\test1.xlsx" options( flow="tables" );
proc report data=test;
   define x / display;
run;
ods excel close;


*--- test1.xlsx ------------------------------------;


EXCELに出力すると、文字変数の書式が「標準」になってしまう上に、
変数Aは「001」→「1」みたいに数値に変換されちゃいます。



色々調べたところ以下SAS社の出してるProblem Noteにどんぴしゃな説明がありました。
以下は、データの中身(列ヘッダー以外)のセルの書式を「文字列」に設定しています。

* OK ;
ods excel file="出力するパスを指定\test2.xlsx" options( flow="tables" );
proc report data=test;
   define x / display style(column)={tagattr='type:String format:@'};
run;
ods excel close;


*--- test2.xlsx ------------------------------------;
※ A5セルは書式設定が適用できない点だけ注意

  • 「type:String」を入れると「001」のまま出力してくれました、、けどセルの書式が「文字列」になってくれません。実際の見た目とセルの書式が異なってしまい変な感じです。
  • そこで「format:@」を追記すると、「文字列」になってくれました。
  • ちなみに以下の通り、値がないセルは「文字列」になってくれませんでした。



あと、この「type:String」「format:@」の指定の順番を逆にすると環境によっては書式が「文字列」になってくれませんでした。各環境でちゃんと動くか確認が必要です。。



0 件のコメント:

コメントを投稿