論理の流刑地

地獄の底を、爆笑しながら闊歩する

StataのデータをRでつくる(sjlabelledパッケージ)

とてもマニアックな備忘録シリーズ。

Introduction

Rにおけるデータフレームは他の統計ソフトのおけるデータ形式に比して、必要最小限の情報しか入っていない。
したがって、他の統計ソフト(SPSS , Stataなど)向けのデータを出力する時には、データ本体に加え必要な付加情報(値ラベル,変数ラベルなど)を与えてやる必要がある。

この記事ではデータをCSVから読み込んで、必要な情報をsjlabelledパッケージを利用して付加したうえでdta形式で出力するまでの手続きを述べる。

参考URL

参考過去記事
ronri-rukeichi.hatenablog.com

sjlabelled(R側)でやること。

前提として、CSV形式の原データと、値/変数ラベルに関するデータが別々に与えられていて、
CSVをデータフレームとして読み込んだうえでそこにラベル情報を付加してStata用に変換する、みたいな流れを想定する。

変数ラベルの付与

変数ラベル(変数名に関する情報)を与えるには、sjlabelled::set_label()を使う

sjlabelled::set_label(dta$var1 , "変数1") #方法1
sjlabelled::set_label(dta$var1 ) <-  "変数1" #方法2

 str(hs_df$var1)
# int [1:2970] 0 0 0 0 0 0 1 0 1 0 ...
# - attr(*, "label")= chr "変数1"

値ラベルの付与

値ラベルを与えるには、sjlabelled::set_labels()を使う*1

指定の方法はいくつかあるけれども、named vectorを使う方法が一番確実。
(値ベクトルの値の種類の数と、与えたラベルの数が合わない時に挙動がぶれない)

dummy <- sample(1:4 , 40 , replace=T)
dummy <- set_labels(dummy,labels= c("A"=1 , "B"=2, "C"=3, "D"=4))

 str(dummy)
# int [1:40] 4 3 3 1 3 1 1 1 1 1 ...
#- attr(*, "labels")= Named num [1:4] 1 2 3 4
#  ..- attr(*, "names")= chr [1:4] "A" "B" "C" "D"

Stata形式への変換と確認

Stata形式への変換・書き出し

write_stata(test_data ,path="/Users/user/Desktop/test1.dta", version =14)

versionは8~14がsupportedだが、一応ver16でも確認できている。


Enjoy!!!

*1:関数名が紛らわしい