如何借助SAS代码实现用R读取.dat格式文件?
将SPARCS_DIAG.dat导入R的代码实现
核心参数解析(从SAS代码提取)
- 分隔符:管道符
| - 跳过首行(表头行)
- 启用DSD模式:自动处理带引号的字段(若字段内包含分隔符)
- 变量类型:大部分为字符型,仅
seq_id为数值型;日期字段(如processed_dt)为8位字符格式(YYYYMMDD)
方案1:使用readr包(推荐,高效且易用)
先确保安装并加载readr包:
# 安装包(首次使用) install.packages("readr") # 加载包 library(readr)
读取数据的代码:
# 设置文件路径,替换为你的实际路径 file_path <- "./SPARCS_Extract/SPARCS_DIAG.dat" # 读取数据,指定分隔符、跳过首行、变量类型 sparcs_diag <- read_delim( file = file_path, delim = "|", skip = 1, # 对应SAS的firstobs=2 col_types = cols( clm_trans_id = col_character(), disch_yr = col_character(), dx_type_cd = col_character(), seq_id = col_double(), # 对应SAS的8.数值型 clm_type_cd = col_character(), upide = col_character(), dx_catgy_cd = col_character(), dx_grp_cd = col_character(), dx_cd = col_character(), poa_ind = col_character(), DX_VERS_TYPE_CD = col_character(), clm_key = col_character(), actv_flag = col_character(), ltst_flag = col_character(), processed_dt = col_character(), created_by = col_character(), last_updd_dt = col_character(), last_updd_by = col_character(), src_nm = col_character(), insert_row_dt = col_character(), abort_ind = col_character(), hiv_ind = col_character() ) ) # 可选:将日期字段转换为R日期格式 library(lubridate) sparcs_diag <- sparcs_diag %>% mutate( processed_dt = ymd(processed_dt), last_updd_dt = ymd(last_updd_dt), insert_row_dt = ymd(insert_row_dt) )
方案2:使用Base R的read.table
# 设置文件路径 file_path <- "./SPARCS_Extract/SPARCS_DIAG.dat" # 读取数据 sparcs_diag <- read.table( file = file_path, sep = "|", skip = 1, header = FALSE, # 首行是表头但我们跳过,后续手动命名 stringsAsFactors = FALSE, quote = "\"", # 对应SAS的DSD模式 col.names = c( "clm_trans_id", "disch_yr", "dx_type_cd", "seq_id", "clm_type_cd", "upide", "dx_catgy_cd", "dx_grp_cd", "dx_cd", "poa_ind", "DX_VERS_TYPE_CD", "clm_key", "actv_flag", "ltst_flag", "processed_dt", "created_by", "last_updd_dt", "last_updd_by", "src_nm", "insert_row_dt", "abort_ind", "hiv_ind" ), colClasses = c( rep("character", 3), "numeric", rep("character", 18) ) ) # 可选:转换日期字段 sparcs_diag$processed_dt <- as.Date(sparcs_diag$processed_dt, format = "%Y%m%d") sparcs_diag$last_updd_dt <- as.Date(sparcs_diag$last_updd_dt, format = "%Y%m%d") sparcs_diag$insert_row_dt <- as.Date(sparcs_diag$insert_row_dt, format = "%Y%m%d")
内容的提问来源于stack exchange,提问作者InfiniteRecursion
相关产品推荐
相关产品推荐

