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連続の場合,その間を欠測とみなしてくれます)