我怎样才能读“a”;。da";直接归档到R?
我想在R工作。他们的网站提供“.da”文件和SAS提取程序。SAS程序读取“.da”文件就像读取固定宽度的文件一样:我怎样才能读“a”;。da";直接归档到R?,r,R,我想在R工作。他们的网站提供“.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
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()
在不显式声明数百个变量名的情况下工作
谢谢大家! 经过进一步研究,似乎可以利用Stata字典文件*.DCT检索数据文件*.DA的格式。为此,您需要从HRS网站下载“数据文件”.zip文件和“Stata数据描述符”.zip文件。请记住,在处理文件时,在每个数据文件上使用正确的字典文件。例如,使用“W2FA.DCT”文件定义“W2FA.DA”
库(readr)
#设置数据文件“*.DA”的路径
data.file我刚刚在健康和退休研究网站上创建了一个帐户,并尝试解析他们的一些文件,但没有成功。您有权访问SPSS、STATA或SAS吗?您可以使用其中一个平台,并以本机格式导出R软件包foreign
以供阅读。感谢您的评论和努力。目标是直接读取文件,而不是使用SPSS、STATA或SAS。这是可行的吗?快速的谷歌搜索产生了对R函数read.fwf
的引用。你试过使用它吗?如果他们没有在机器可读的表中发布数据文件的元数据,那么你可以只解析SAS程序中的值。将HHID从第1列读取到第6列的命令意味着HHID使用6个字符。谢谢您的想法,但这不起作用read_fwf(infle,fwf_empty(infle),guess_max=100000)
生成11596行和一列随机数。我想我需要指定宽度?您知道文件类型吗?您需要告诉read.fwf
每个字段的宽度。这些信息在任何SAS、SPSS或STATA程序中都应该很容易看到,他们发布了这些程序来读取数据。我的最新更新将允许您使用数据字典从STATA.DCT文件中读取固定宽度的文件。有关数据实际含义的更多信息,Codebook zip文件提供了.txt文件和数据信息,问卷zip文件提供了获取数据时实际提出的问题。@MattJewett哇,这非常有效。谢谢你的帮助!你知道*.da文件是什么吗?我不知道*.da是否有特定的定义。在本例中,它似乎只是表示它是一个数据文件这一事实。因为文件的结构只是一个固定宽度的文件。您可以很容易地为文件指定一个.txt扩展名,并获得相同的结果。
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