データセットをcsv形式のファイルに出力する
sasデータセットをcsv形式のファイルに出力する方法として、ds2csvマクロとexportプロシジャがある。
dataステップを利用して自前で出力することもできるが、csvのルールに沿ってデータを変換してくれるため、上記2つの方法の方が便利。
- ds2csvマクロ
data temp; A = 1; B = 2; C = 3; output; A = 4; B = 5; C = 6; output; A = 7; B = 8; C = 9; output; run; %ds2csv(data=temp, runmode=b, csvfile=C:\work\SAS\output.csv);
出力ファイルの内容
"A","B","C" "1","2","3" "4","5","6" "7","8","9"
- exportプロシジャ
data temp; A = 1; B = 2; C = 3; output; A = 4; B = 5; C = 6; output; A = 7; B = 8; C = 9; output; run; proc export data=temp outfile='C:\work\SAS\output2.csv' dbms=csv replace; run;
出力ファイルの内容
A,B,C 1,2,3 4,5,6 7,8,9
ds2csvマクロは全てのデータをダブルクォテーションで括って出力する。
一方、exportプロシジャを使用する場合は空白が入った文字列など、
必要なものだけダブルクォテーションで括る。そのため出力ファイルのサイズは
exportプロシジャの方が小さくなる。
出力するデータに欠損値や改行文字が含まれている場合、csvをExcelで読み込んだ
場合の挙動が異なるので注意する。
data temp; length Case 8 Text $ 32; Case = 1; Text = 'Kitty on Your Lap'; output; Case = 2; Text = 'Kitty on "Your" Lap'; output; Case = 3; Text = 'Kitty,on,Your,Lap'; output; Case = 4; Text = 'Kitty on' || '0d0a'x || 'Your Lap'; output; Case = .; Text = ''; output; run;
- ds2csvマクロで出力したcsvファイル
"Case","Text" "1","Kitty on Your Lap" "2","Kitty on ""Your"" Lap" "3","Kitty,on,Your,Lap" "4","Kitty on Your Lap" ".",""
- exportプロシジャで出力したcsvファイル
Case,Text 1,Kitty on Your Lap 2,"Kitty on ""Your"" Lap" 3,"Kitty,on,Your,Lap" 4,Kitty on Your Lap ,
- ','を含む文字列 -> ダブルクォテーション括りになる。
- ' " 'を含む文字列 -> "が""に変換され、ダブルクォテーション括りになる。
- 改行文字を含む文字列 -> そのまま改行として出力される。
- 数値の欠損値 -> ds2csvマクロではピリオド、exportプロシジャは何も出力しない
出力したcsvファイルをExcelで読み込んだ場合、4番目のデータについて、ds2csvマクロで出力した方はセル内改行となるので元のデータセット通りに表示されるが、exportプロシジャで出力した方は改行を挟んで別の行となってしまう。