Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/74.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
我怎样才能读“a”;。da";直接归档到R?_R - Fatal编程技术网

我怎样才能读“a”;。da";直接归档到R?

我怎样才能读“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

我想在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 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