2013年9月2日月曜日

SASデータセットをRに取り込むときの流れと注意

頻度はそんなに多くないかとおもうのですが、
SASデータセットをRに移す作業をしたのでメモしておきます。

※下記の方法よりも早く取り込む方法があります。
http://daaataaa.blogspot.jp/2013/09/sasr_3.html

■SAS側でのデータ作成について

SASデータセットを作るときに圧縮をかけるのが通常なのですが、
Rに取り込むときに圧縮をかけていると、
読み込みがエラーになるので注意が必要です。

⇒SASにて、データを取り込むときに「compress = no」とオプションをつける!

■R側でのデータ取り込みについて

①パッケージ「sas7bdat」のインストール
とくに注意点なし

②sas7bdatの読み込み
作業効率的に、小さいデータから順に確認しながら取り込みます。
500MBぐらいのデータだと、測ってはいませんが1時間以上はかかります。

#使ったマシンはMacBook Air
 メモリ:4G CPU:Intel Core i5

③データの確認
日本語の変数要素が入っている場合は
文字化けしている可能性があります。

■データのクレンジングについて

すごく効率の悪いやり方なのかもしれませんが、
一回データを取り込んだものをCSVで吐き出して、
シェルで一気にエンコードしました。
#R内での処理<sas7bdatのcsv化>
 

insatall.packages("sas7bdat")
library(sas7bdat)
x <- read.sas7bdat("sample.sas7bdat" )
write.csv(x,"sample.csv")

#シェル(ターミナル)での処理<全角文字のエンコード>
 

nkf -w sample.csv > sample_utf.csv

■クレンジングしたCSVのDB化
sqliteでデータベース化して、Rに取り込みます。
なおCSVを、わざわざSQLにした理由ですが、
管理したりSQLでちょっとした作業をする時用です。
※場合によって、SQL化の作業は省いても問題ないです!
#sqlite3でcsvをデータベース化
 

sqlite3

create tabele sample(rowno,V1,V2,・・・・,Vn);
#Rから吐き出した際に、CSVの最初のカラムに行数が挿入されているので、
#「rowno」+「sas7bdatのカラム」とカラムがひとつ増えることに注意。

.separator ,
.import sample_utf.csv sample

■DBをRに取り込む
このあたりはRwikiが詳しいです。
■おわりに
※まあ、MacBook Airでやるなとか、
 SASデータセットをわざわざRに取り込むなって話ですが、
 どーしても、やむにやまれずにSASデータセットを
 Rで分析するときのための参考情報です。
※そもそも、SASデータセットを圧縮せずに作っている人はごくまれですし。。。
※というよりかは、最初からCSVデータがあるのであれば、
 SASデータセットよりも、CSVデータをもらった方が早いよ。
 という話なのかも知れません。。