首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将".da“文件直接读入R?

如何将".da“文件直接读入R?
EN

Stack Overflow用户
提问于 2017-07-15 02:18:46
回答 1查看 1.7K关注 0票数 1

我想和R的Health and Retirement Study一起工作,他们的网站提供了".da“文件和一个SAS提取程序。SAS程序像读取固定宽度的文件一样读取".da“文件:

代码语言:javascript
复制
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()在不显式声明数百个变量名的情况下工作?

谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-07-15 03:11:59

经过进一步的研究,似乎你可以利用Stata字典文件*.DCT来检索数据文件*.DA的格式。为此,你需要从HRS网站下载“数据文件”.zip文件和"Stata数据描述符“.zip文件。只需记住,在处理文件时,要对每个数据文件使用正确的字典文件。即,使用"W2FA.DCT“文件定义"W2FA.DA”。

代码语言:javascript
复制
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
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45109400

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档