R语言批量导入sas7bdat文件时保留原数据集名的方法
实现方法
你原代码用循环序号给导入的数据集命名,没有关联SAS原始文件名,按下面的逻辑调整即可,不需要额外依赖:
path <- 'C:/path2file/' print(path) files <- list.files(path = path, pattern="*.sas7bdat", full.names=FALSE) print(files) # 提取去掉.sas7bdat后缀的原始SAS数据集名称 sas_ds_names <- tools::file_path_sans_ext(files) mydf <- list() for (i in seq_along(files)){ filename <- paste0(path, files[i]) print(filename) # 单次读取数据暂存 tmp_data <- haven::read_sas(data_file=filename) print(names(tmp_data)) # 列表元素直接用原始SAS数据集名命名 mydf[[sas_ds_names[i]]] <- tmp_data # 如果需要在全局环境生成和SAS数据集同名的独立数据框就保留这行,否则建议删掉 assign(sas_ds_names[i], tmp_data) }
修改说明
- 用R内置
tools包的file_path_sans_ext()函数自动剔除文件名末尾的.sas7bdat后缀,直接拿到SAS原始数据集名,比手动写正则拆分字符串稳妥,不会因为文件名本身带点就拆错。 - 列表
mydf的元素索引直接绑定原始SAS数据集名,导入完成后可以直接用mydf$对应SAS数据集名调取数据,不用记序号和文件的对应关系。 - 把原来
eval(parse)的赋值写法换成了更简洁安全的assign(),直接用原始SAS名作为独立数据框的变量名,不会生成mydf_1这类和原始文件名无关的对象。
小提示:更推荐统一用命名列表管理所有导入的数据集,不要在全局环境散落大量独立数据框。后续做批量清洗、格式转换、导出操作时,直接遍历列表就能批量处理,效率比挨个操作散变量高很多,也能避免变量重名意外覆盖现有对象的问题。
内容的提问来源于stack exchange,提问作者user19315317
相关产品推荐
相关产品推荐

