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」みたいに数値に変換されちゃいます。



実は「ODS TAGSETS.EXCELXP」でも同様の問題があり、データステップ100万回で解決法を紹介してます。
http://sas-tumesas.blogspot.com/2014/01/tagsets-excelxpods.html


しかし、「ODS EXCEL」ではこの書き方ではダメっぽくて、色々調べたところ以下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 ------------------------------------;

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



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



0 件のコメント:

コメントを投稿