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

SAS新手技术咨询:ICD-10码处理及Proc SQL队列创建问题

问题解决方案

一、ICD-10编码处理问题(去小数点、开头逗号、末尾字母丢失)

1. 核心问题排查

你当前代码存在3个关键错误:

  • 读取CSV时未指定逗号分隔符,导致ICD10_dcode读取异常(开头带逗号);
  • 字符变量长度未正确声明,导致编码末尾字母被截断;
  • compress函数调用时变量名写错,且length语句语法错误(未指定字符类型和长度)。

2. 修正代码

第一步:正确读取CSV文件

指定逗号分隔符,同时给ICD10_dcode设置足够的字符长度(ICD-10最长为7位,设为$10足够覆盖):

data EE2106;
    infile '/home/u62039685/DatasetEE2016/PUF_ICD10_DCODE2016.csv' dlm=',' dsd truncover;
    input inc_key :9. ICD10_dcode :$10.;
run;
  • dlm=',':明确CSV的分隔符为逗号;
  • dsd:处理带引号的字段,自动忽略字段内的逗号;
  • truncover:避免行尾数据不足时截断变量;
  • :修饰符:让SAS自动识别输入格式,避免固定长度读取导致的错误。

第二步:去除小数点并保留完整编码

修正length语句和compress函数的变量名,建议用新变量存储处理后的编码,避免覆盖原数据:

* 去除ICD10编码中的小数点;
data EE2106final;
    set EE2106;
    length cleaned_icd10 $10.;
    cleaned_icd10 = compress(ICD10_dcode, '.');
run;

如果要直接修改原变量,需先声明长度再赋值:

data EE2106final;
    set EE2106;
    length ICD10_dcode $10.;
    ICD10_dcode = compress(ICD10_dcode, '.');
run;

二、用Proc SQL匹配300+ ICD-10编码创建研究队列

你的SQL代码连接条件错误,应使用ICD编码字段而非inc_key进行匹配,以下是两种可行方案:

1. 方案一:JOIN匹配(需统一编码格式)

先确保编码表和主表的ICD格式一致(都去除小数点):

* 预处理编码表,去除小数点;
data icd10codes_clean;
    set icd10codes;
    diag_code_clean = compress(diag_code, '.');
run;

* 执行匹配;
proc sql;
    create table cohort as
    select a.*
    from cohort2016 a
    inner join icd10codes_clean b
        on compress(a.ICD10_dcode, '.') = b.diag_code_clean;
quit;

2. 方案二:IN子句(更简洁)

直接用子查询筛选符合条件的样本,无需预处理编码表:

proc sql;
    create table cohort as
    select *
    from cohort2016
    where compress(ICD10_dcode, '.') in (select compress(diag_code, '.') from icd10codes);
quit;
  • 如果编码存在大小写差异,可添加upcase()函数统一格式,例如:upcase(compress(ICD10_dcode, '.'))。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 18:42:36