R语言 如何编写高效的代码导入多个SAS文件

lnlaulya  于 2022-12-20  发布在  其他
关注(0)|答案(1)|浏览(152)

我正在努力创建高效的代码导入SAS数据文件。
我的代码如下:

library(foreign)
library(haven)
f <- file.path(path = "E:/Cohortdata/Raw cohort/Nationalscreeningcohort/01.jk", 
               c("nhis_heals_jk_2002.sas7bdat","nhis_heals_jk_2003.sas7bdat" ,"nhis_heals_jk_2004.sas7bdat",
                 "nhis_heals_jk_2005.sas7bdat","nhis_heals_jk_2006.sas7bdat","nhis_heals_jk_2007.sas7bdat",
                 "nhis_heals_jk_2008.sas7bdat","nhis_heals_jk_2009.sas7bdat","nhis_heals_jk_2010.sas7bdat",       "nhis_heals_jk_2011.sas7bdat","nhis_heals_jk_2012.sas7bdat","nhis_heals_jk_2013.sas7bdat"))
d <- lapply (f, read_sas)

我知道用for循环重写会更有效,但不知道代码应该是什么样子
如果你帮助我,我将非常感激.

atmip9wb

atmip9wb1#

这是我在这里发布的代码的变体,但您也可以将其用于SAS文件。
请注意,我没有使用file.path(),而是使用了list.files(),这样我就可以读取路径"E:/Cohortdata/Raw cohort/Nationalscreeningcohort"中的所有文件,这是我假设文件所在的位置,此外,我使用参数pattern只查找sas7bdat文件。
list.files()返回一个向量,在这里您可以使用您喜欢的*apply方法。但是,我喜欢将vector更改为tbl_df,并使用tidyverse方法。这意味着使用purrr::map()tidyverse的一部分)阅读所有文件,并创建所有文件的大数据tbl_df

library(tidyverse)
library(foreign)
library(haven)

df <- list.files(path = "E:/Cohortdata/Raw cohort/Nationalscreeningcohort",
                 full.names = TRUE,
                 recursive = TRUE,
                 pattern = "*.sas7bdat") %>% 
  tbl_df() %>%
  mutate(data = map(value, read_sas)) %>%
  unnest(data)

相关问题