Study SAS

統計解析ソフトウェアSASについて学習したことのまとめやSAS認定試験対策など

データセットを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プロシジャの方が小さくなる。

出力するデータに欠損値や改行文字が含まれている場合、csvExcelで読み込んだ
場合の挙動が異なるので注意する。

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プロシジャで出力した方は改行を挟んで別の行となってしまう。