# convert_label_to_xlsx.R
args <- commandArgs(trailingOnly = TRUE)

if (length(args) == 0) {
  stop("请将 .sas7bdat 文件拖到本脚本上运行")
}

# 取第一个参数作为文件路径
input_path <- args[1]

# 检查是否为 .sas7bdat 文件
if (!grepl("\\.sas7bdat$", input_path, ignore.case = TRUE)) {
  stop("只支持 .sas7bdat 文件")
}

# 加载必要包
suppressMessages({
  library(haven)
  library(writexl)
})

# 读取数据
df <- read_sas(input_path)

# 提取列标签并替换列名(如果有 label 就替换)
labels <- sapply(df, function(x) attr(x, "label"))
names(df) <- ifelse(nzchar(labels), labels, names(df))

# 生成输出文件路径
output_path <- sub("\\.sas7bdat$", ".xlsx", input_path, ignore.case = TRUE)

# 写入 Excel
write_xlsx(df, path = output_path)

cat("转换完成:", output_path, "\n")
@echo off
set RScriptPath="C:\Program Files\R\R-4.3.3\bin\Rscript.exe"
set ScriptPath="D:\convert_to_xlsx.R"
%RScriptPath% %ScriptPath% %1
exit

直接将sas7bdat文件拖到bat文件上,即可在同目录下生成执行转换位xlsx,并将列名替换为标签。