sas7bdatファイルの作成と各種ソフトでの読み込み
sas7bdatとは何か
sas7bdatというファイル形式があります。これは一言で言えばSASで作ったデータのファイル形式です。
このファイル形式はSASのいろいろなアウトプットを格納できて、例えば回帰分析後のパラメーター推定値や予測値、ベイズ推定のMCMCであればサンプリング結果なんかもいろいろ入れられます。しかもこの形式のファイルを作るのに必要なコマンドは一つだけなので、Rのcsv出力みたいにいちいちwrite.csv()
とかやらなくても済みます。
このファイル形式の凄さは格納できるデータサイズにあって、10億行×30カラムのデータもきちんと書き込み、読み込みでき、さすが高いソフトだなあという感じです。
sast7bdatファイルを作る(SAS)
sas7bdatファイルの作り方ですが、SASにはライブラリという重要な概念があります。これは「このライブラリ名のなかでは出力を統一させますよ」といったものです。多分具体例があったほうがわかりやすいと思います。
まず、SASファイルの先頭で
libname ライブラリ名 'ディレクトリ名' ;
というふうにライブラリを指定します。これでこの後にどんな処理をしてもライブラリ名によって紐付けることができます。
具体的には例えば年収についての分析をしているのであれば
というふうにすることでincome.sas7bdatファイルが作成されます。
つまり、ライブラリ名.
でライブラリ名を紐付けることができます。
proc reg
であればoutput out = income.regout
とすれば回帰分析の結果がsas7bdatファイルになります。
また、proc format
やproc datasets
のようにoutの引数がない場合はlibrary = income
とすることでライブラリ名を紐付けます。
ちなみに、libname=
を指定しなかった場合はworkライブラリが自動的に割り当てられます。
sas7bdatファイルを読み込む(SAS, R, Python)
sas7bdatファイルを読み込みます。読み込んで他の分析をしたりすること自体は実はRやPythonでもできます。
書き出しはもちろんSASでしかできませんが。
R
{sas7bdat}
Rでsas7bdatファイルを読み込む{sas7bdat}パッケージがCRANにあるようなのでそれを使います。
https://cran.r-project.org/web/packages/sas7bdat/sas7bdat.pdf
install.packages("sas7bdat") library(sas7bdat) dat <- read.sas7bdat("C:/Users/ユーザー名/Desktop/income_analysis/income.sas7bdat", debug=FALSE)
とすれば先程のincome.sas7bdatを読み込めます。
2016/5/9追記
{haven}
神Hadley製のパッケージ{haven}もSASファイルに対応しています。
上記のファイルだと、
install.packages("haven") library(haven) dat <- read_sas("C:/Users/ユーザー名/Desktop/income_analysis/income.sas7bdat")
で読み込めます。
ただし、{haven}はまだ不安定なようで、僕の環境で試したところ読めるものと読めないものがありました。
読めない場合、以下のエラーが出ました。
Invalid file, or file has unsupported features.
Unable to load big data files · Issue #92 · tidyverse/haven · GitHub
では解決したようになってますが、エラーでした。
改善しないかなあ。
Python
一番楽なのはpandasを使うことですね。
pandas.read_sas — pandas 0.23.4 documentation
import pandas as pd df = pd.read_sas('income.sas7bdat')
また、sas7bdatファイルを読み込む専用モジュールもあるのでそれでもいいと思います。
Pythonの2系にも3系にも対応していて、pip install
で入れられます。
sas7bdat · PyPI
pip insatll sas7bdat
from sas7bdat import SAS7BDAT with SAS7BDAT('income.sas7bdat') as f: for row in f: print row
上のページにもありますが、pandasのDataFrameを使いたい場合は
df = f.to_data_frame()
とすればOKです。