★データ解析備忘録★

ゆる〜い技術メモ

{haven}パッケージでストレスなくRとSASで分析する

前置き

僕のメイン言語はSASとRなので、この二つを連携させたり行き来したりということがどうしても発生します。*1 そんなわけで、以前SASの中でRを動かす方法を書きました。

SAS/IML StudioでRを使う - データ解析備忘録

SAS/STATでもPROC IMLしてRを使う - データ解析備忘録

SASの中でRからSASにデータを渡す - データ解析備忘録

RでSASファイル(.sas7bdat)を扱う

一方、RでSASファイル(拡張子は.sas7bdat)を読む方法も以下の記事で触れてます。

sas7bdatファイルの作成と各種ソフトでの読み込み - データ解析備忘録

Rでsas.7bdat形式を読むパッケージとして{sas7bdat}、{foreign}、そして神Hadleyの作りし*2{haven}があるわけですが、これまで僕は安定さを理由に*3{sas7bdat}をよく使っていました。ただ、このパッケージは遅い上に読み込みしかできません。

ところが、先日のアップデートで色々変化があったのでそれを書こうと思います。

新しい{haven}を使う

インストール

以前はあまり安定していなかったのですが、RStudio1.0.0のリリースと同時に出たCRAN版(1.0.0)は特にストレスなく使えるようです。もし仮にSASファイルをうまく読めない事があればGitHubから開発版をインストールすれば、動くことが多いです。ここでは普通にCRAN版を使います。

install.packages("haven")
library(haven)

tidyverseについて

神Hadleyを先程話題に上げましたが、彼は最近はtidyverseという概念のもと開発を行っています。 これについては @yutannihilationさんが詳しく解説なさっているので、そちらを読みましょう。

notchained.hatenablog.com

さて僕が何を言いたいのかというと、{haven}パッケージはこのtidyverseの中に含まれていて、{tidyverse}というパッケージを読み込めば{haven}の関数はすべて使えるようになるということです。{tidyverse}では他にも様々なパッケージを読んでくるのですが、詳しくは上記の @yutannihilationさんの記事を参照してください。

ということで、{haven}のインストールは以下でも可です。

install.packages("tidyverse")

.sas7bdatを読む

read_sas 関数を使います。

library(haven)

# SAS形式の読み込み
d <- read_sas("hoge.sas7bdat")

.sas7bdatで書き出す

このパッケージの驚くべきところは、なんとSAS形式のファイルをRで作れてしまうことです。 この機能については実は夏にはHadley氏が言及していました。

write_sas 関数でいけるようです。

# d に何かしらの処理をしてd_1とした上で
write_sas(d_1,  "fuga.sas7bdat")

便利ですね!

文字コードについて

さて、Hadley作・tidyvese群のパッケージはすべてUTF8で処理をしています。一方、SASの製品版はLinuxWindowsのみ提供されており、ユーザー数的にはおそらくShift-JISで.sas7bdatを扱ってう人が多いはずです。

また、無料で使えるSAS University Editionは文字コードはUTF8のみだったりと、相変わらず文字コード周りは注意が必要です。

まとめ

これでR↔SASの行き来がほんとうの意味で自由になりました。

シームレスな解析が可能になりますね!!

Enjoy!

*1:大規模データだとSASでないとできない場合もあるし、可視化はやっぱりRの方が楽だし綺麗なので。あと形態素解析のようにSASではできないものも意外とある。

*2:tidyverseの関係で、今はHadleyひとりのものではないようです。

*3:{haven}だと読み込めないことが結構あった。