You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于SAS脚本在R中读取CDC免疫数据.dat文件遇错求助

解决CDC NIS数据读取错误并转换为易用格式

错误原因

zero-length pattern错误源于SAScii包解析SAS输入文件(.sas)时,遇到了不规范的注释格式(比如未闭合的/* */注释、嵌套注释,或者注释写法不符合包的处理逻辑)。

可行解决方案

方案1:清理SAS输入文件后重试SAScii

  1. 下载目标.sas文件到本地
  2. 用文本编辑器打开,清理所有注释:
    • 删除所有/* */包裹的内容
    • 移除以*开头的注释行
    • 确保无嵌套注释或未闭合的注释块
  3. 调用read.SAScii读取本地文件:
    library(SAScii)
    read.SAScii("本地路径/nispuf14.dat", "本地路径/清理后的nispuf14.sas", zipped = FALSE)
    

方案2:用readr手动解析固定宽度数据

如果SAScii仍报错,可直接提取SAS文件中的字段定义,用read_fwf读取:

  1. 从.sas文件的input语句中提取每个变量的起始位置、结束位置和变量名。例如SAS输入语句通常格式为:

    input VAR1 1-2 VAR2 3-5 VAR3 6-10;

  2. 整理成readr可识别的格式并读取:
    library(readr)
    # 根据SAS文件提取的字段信息填写
    col_pos <- fwf_positions(
      start = c(1, 3, 6),
      end = c(2, 5, 10),
      col_names = c("VAR1", "VAR2", "VAR3")
    )
    nis_data <- read_fwf("本地路径/nispuf14.dat", col_pos)
    
  3. 导出为易用格式:
    # 导出为CSV
    write_csv(nis_data, "nispuf14_clean.csv")
    # 或高效的Parquet格式(需arrow包)
    library(arrow)
    write_parquet(nis_data, "nispuf14_clean.parquet")
    

方案3:Python pandas替代方案

熟悉Python的话,用pandas处理固定宽度文件更稳定:

  1. 解析SAS文件获取字段的起始/结束位置和变量名,然后读取:
    import pandas as pd
    # 示例:替换为实际从SAS文件提取的字段信息
    colspecs = [(0, 2), (2, 5), (5, 10)]
    col_names = ["VAR1", "VAR2", "VAR3"]
    nis_data = pd.read_fwf("本地路径/nispuf14.dat", colspecs=colspecs, names=col_names)
    
  2. 导出为常用格式:
    nis_data.to_csv("nispuf14_clean.csv", index=False)
    nis_data.to_parquet("nispuf14_clean.parquet")
    

最优格式建议

转换后优先保存为Parquet格式,它比CSV占用空间更小、读写速度更快,还能保留数据类型信息,适合长期研究使用。

内容的提问来源于stack exchange,提问作者Nhu Nguyen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.28 15:12:55