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 件のコメント:
コメントを投稿