infileでの文字切れとその対処方法

hogehogehogehoge,hogehogehogehoge,hogehogehogehoge
hafuhafuhafu,hafuhafuhafu,hafuhafu

上記のようなhogehoge.csvというファイルがあった場合,

data d1;
 infile 'hogehoge.csv' dlm=',';
 input a $ b $ c $;
run;

proc print;
run;

とすると,

a        b        c
hogehoge hogehoge hogehoge
hafuhafu hafuhafu hafuhafu

と,途切れてしまいます。一方,

data d2;
 infile 'hogehoge.csv' dlm=',';
 input a $16. b $16. c $16.;
run;

とすると,2番目のオブザベーションで勢いあまって

a
hafuhafuhafu,haf

となってしまいます。


このどうしようもない文字切れをなくすためには

data d2;
 infile 'hogehoge.csv' dlm=',';
 input a : $16. b : $16. c : $16.;
run;

という風に,文字変数(a)と文字フォーマット($16.)の間に
:(コロン)をつけてあげればおっけぃです。


ちなみに,csvファイルの場合は,
infileステートメントdsdオプションを指定することで,
区切りをカンマに指定し,上記の文字切れも自動的になくしてくれます。
(さらに,カンマ2連続の場合,その間を欠測とみなしてくれます)

http://support.sas.com/techsup/technote/ts673.html