2017-07-14 11 views
0

RのHealth and Retirement Studyと協力したいと思っています。彼らのウェブサイトは ".da"ファイルとSAS抽出プログラムを提供しています。 SASプログラムは、固定幅ファイルのような ".da"ファイルを読み込みます。「.da」ファイルをRに直接読み込むにはどうすればよいですか?

libname EXTRACT 'c:\hrs1994\sas\' ; 

DATA EXTRACT.W2H; 
INFILE 'c:\hrs1994\data\W2H.DA' LRECL=358; 

INPUT 
    HHID $ 1-6 
    PN $ 7-9 
    CSUBHH $ 10-10 
    ETC ETC  
; 

LABEL 
    HHID ="HOUSEHOLD IDENTIFIER" 
    PN ="PERSON NUMBER" 
    CSUBHH ="1994 SUB-HOUSEHOLD IDENTIFIER" 
    ASUBHH ="1992 SUB-HOUSEHOLD IDENTIFIER" 
    ETC ETC 
; 

1)これはどのような種類のファイルですか?このファイルタイプについては何も見つかりません。

2)SASから.csvをエクスポートする途中でRに読み込む方法はありますか? read.fwf()が何百という変数名を明示的に記述することなく動作する方法はありますか?

ありがとうございました!

+0

Health and Retirement Studyのウェブサイトにアカウントを作成して、運のないファイルの解析を試みました。 SPSSまたはSTATAまたはSASにアクセスできますか?これらのプラットフォームのうちの1つを使用して、Rパッケージ 'foreign'が読み込むネイティブ形式でエクスポートすることができます。 –

+1

ご意見ありがとうございました。目的は、ファイルを直接読み込み、SPSS、STATA、またはSASを使用しないことです。これは可能で実用的ですか? – awunderground

+0

すばらしいGoogle検索では、R関数 'read.fwf'への参照が返されました。あなたはそれを使ってみましたか? – Tom

答えて

1

もう少し研究を重ねると、Stata辞書ファイル* .DCTを使用してデータファイル* .DAの書式を取得できるように見えます。これを行うには、HRSのWebサイトから、 "データファイル" .zipファイルと "Stataデータ記述子" .zipファイルの両方をダウンロードする必要があります。各データファイルで正しい辞書ファイルを使用するようにファイルを処理するときは、覚えておいてください。 IEでは、 "W2FA.DAT"を定義するために "W2FA.DCT"ファイルを使用します。

library(readr) 

# Set path to the data file "*.DA" 
data.file <- "C:/h94da/W2FA.DA" 

# Set path to the dictionary file "*.DCT" 
dict.file <- "C:/h94sta/W2FA.DCT" 

# Read the dictionary file 
df.dict <- read.table(dict.file, skip = 1, fill = TRUE, stringsAsFactors = FALSE) 

# Set column names for dictionary dataframe 
colnames(df.dict) <- c("col.num","col.type","col.name","col.width","col.lbl") 

# Remove last row which only contains a closing } 
df.dict <- df.dict[-nrow(df.dict),] 

# Extract numeric value from column width field 
df.dict$col.width <- as.integer(sapply(df.dict$col.width, gsub, pattern = "[^0-9\\.]", replacement = "")) 

# Convert column types to format to be used with read_fwf function 
df.dict$col.type <- sapply(df.dict$col.type, function(x) ifelse(x %in% c("int","byte","long"), "i", ifelse(x == "float", "n", ifelse(x == "double", "d", "c")))) 

# Read the data file into a dataframe 
df <- read_fwf(file = data.file, fwf_widths(widths = df.dict$col.width, col_names = df.dict$col.name), col_types = paste(df.dict$col.type, collapse = "")) 

# Add column labels to headers 
attributes(df)$variable.labels <- df.dict$col.lbl 
+0

アイデアをありがとう、それは動作しません。 'read_fwf(INFILE、fwf_empty(INFILE)、guess_max = 100000)'の結果、11,596行と乱数列が生成されます。私は幅を特定する必要があると思いますか?あなたはファイルタイプを知っていますか? – awunderground

+0

各フィールドの幅を 'read.fwf'に伝える必要があります。その情報は、データを読むために公開したSAS、SPSS、またはSTATAプログラムでは、容易に理解できるはずです。 – Tom

+0

最新のアップデートでは、Stata .DCTファイルのデータ辞書を使用して固定幅ファイルを読み込むことができます。実際にデータが何を意味するかについての詳細は、Codebook zipファイルでは.txtファイルにデータに関する情報が提供され、Questionnaire zipファイルにはデータの取得時に実際に質問された質問が表示されます。 –

関連する問題