我想和R的Health and Retirement Study一起工作,他们的网站提供了".da“文件和一个SAS提取程序。SAS程序像读取固定宽度的文件一样读取".da“文件:
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()在不显式声明数百个变量名的情况下工作?
谢谢!
发布于 2017-07-15 03:11:59
经过进一步的研究,似乎你可以利用Stata字典文件*.DCT来检索数据文件*.DA的格式。为此,你需要从HRS网站下载“数据文件”.zip文件和"Stata数据描述符“.zip文件。只需记住,在处理文件时,要对每个数据文件使用正确的字典文件。即,使用"W2FA.DCT“文件定义"W2FA.DA”。
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.lblhttps://stackoverflow.com/questions/45109400
复制相似问题