2016年10月20日木曜日

テキストファイル(CSVなど)の読み込みと注意点 【INFILE編】



テキストファイルをデータステップで読み込む例です。





読込むCSVファイル … C:\test\sample1.csv
あああ,10,2012/1/1,10:01
,11,,
ううう,12,2015/1/1,


CSVファイルの読み込み
data OUT1;
   attrib
      A length=$20.
      B length=8.
      C length=8.   informat=yymmdd10.  format=yymmdds10.
      D length=8.   informat=time5.         format=time5.
   ;
   infile "C:\test\sample1.csv"  dlm=","  dsd truncover lrecl=30000 firstobs=1;
   input A B C D;
run;


  A  
  B  
 C 
  D  
  あああ   10   2012/01/01   10:01 
     11   .   . 
  ううう   12   2015/01/01   . 



解説

attrib
    A length=$20.
    B length=8.
    C length=8.   informat=yymmdd10.  format=yymmdds10.
    D length=8.   informat=time5.         format=time5.
;

① 読み込んだときの変数属性(lengthやformatなど)を定義しておく。

テキストファイルのデータをSAS日付値や時間値などに変換して読み込む必要がある場合は、別途 informat も定義。


infile "C:\test\sample1.csv" dlm="," dsd truncover lrecl=30000 firstobs=1;


② 読み込むファイルのフルパスを指定します。また以下の細かい設定もしていきます。

dlm=","
テキストファイルの区切り文字をカンマ「,」に設定。各自該当する区切り文字を設定する。

lrecl=30000
 1行に読み込める長さを最大30000バイトに設定している。
この長さが足りないと、途中で文字が切れてしまう事があるので、読み込むデータの長さに応じて設定する。

dsd truncover
 欠損値の取り扱い等に関するオプション。詳細は以下参照

firstobs=
 テキストファイルの何行目から読み込みを開始するか指定。
例えば、テキストファイルの1行目に項目名、2行目にデータが入っている場合は、「firstobs=2」とします。


input A B C D;


③ テキストファイルから読み込んだ値に対して、割り当てる変数を列挙




注意点と補足

「うまく読み込めない」という場合によくあるパターンとして、
EXCEL等でセル内改行が入ってるデータをCSV形式で保存して、それをSASに読み込むという場合。

セル内改行の部分はSAS上でうまく読み込めず、読込む位置がずれてしまう事があります。


また、以下のようなテキストファイルがあったとして、

., xxx

カンマで区切られた1つ目のデータ「.」は特別な指定をしない限り欠損値の意味として読み込まれます。
カンマで区切られた2つ目のデータ「 xxx」は特別な指定をしない限り前方の半角スペースが取り除かれて「xxx」として読み込まれます。



0 件のコメント:

コメントを投稿