ODS CSVとODS CSVALLと ODS tagsets.CSVBYLINEの違い

CSV、ファイル形式としてあんまり好きじゃないですが、やっぱり、CSVでデータ送ったり送られたりは避けがたい時があります。

SASからCSVを作る方法はたくさんあって、fileステートメントとputでもいいし、EXPORTプロシジャでもいいし、%DS2CSVっていうデフォルトで用意されているマクロを使ってもできます。

で、一口にCSVといってもクォート文字で包んだり包まなかったり、変数を1行目にだしたりださなかったり、区切り文字をカンマ以外にしたり(そしたらCSVとは言わないか)とか色々あって、また改行コードが入ってたり、欠損があった場合とかして、読み込むのも吐き出すのも結構奥深い世界です。詳しくないです。

うまく読み込めなかったり、吐き出しが変なところで改行されて崩れたりして、イーってなることは日常茶飯事です。単純な作業のはずなのにうまくいかないのが余計むかつきます。

今回紹介するのはODSで作っちゃうパターンの話です。

ところが、一口にODSでCSVといっても、実はいくつか選択の幅があります。その話です。

data A;
X=1;Y=1;Z='い';output;
X=1;Y=2;Z='ろ';output;
X=2;Y=3;Z='は';output;
run;

ods csv file="D:\SAMPLE1.csv";
ods csvall file="D:\SAMPLE2.csv"  ;
ods tagsets.csvbyline file="D:\SAMPLE3.csv"  ;
proc print data=A noobs;
run;
ods csv close;
ods csvall close;
ods tagsets.csvbyline  close;

上のコードは、printプロシジャの出力を3種類の形式でCSVファイル化しています。

以下、実際作成されるCSVの中身です

【ODS CSV】










【ODS CSVALL】












【ODS tagsets.csvbyline】











tagsets.csvbylineの特徴がわかりにくいので

ods csv file="D:\ods_CSV.csv"  ;
ods csvall file="D:\ods_CSVALL.csv"  ;
ods tagsets.csvbyline file="D:\TAGSETS_CSVBYLINE.csv"  ;
title "プロシジャのタイトル";
   proc print  data=A NOOBS;
   by X;
   run;
ods csv close;
ods csvall close;
ods tagsets.csvbyline  close;

とタイトルとbyつけてみます。


【ODS CSV】












【ODS CSVALL】

















【ODS tagsets.csvbyline】














って感じです。

まあ、実際、そんな変則的な出力を敢えてCSV形式でださなければいけないシチュエーションって
なんだろうって気がしますが。



0 件のコメント:

コメントを投稿