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

SAS格式表匹配ICD码:如何设置Other参数避免返回原ICD值?

解决SAS中未匹配ICD码返回空值的问题

针对你遇到的使用CNTLIN生成字符格式后,未匹配的ICD码会返回自身值的问题,这里有两种高效的解决方案,完全不需要手动编写数百条VALUE语句:

方法1:在格式定义中添加OTHERS规则(推荐)

这种方法从格式本身入手,让未匹配的所有值统一返回空值,后续任何使用该格式的地方都会自动生效,适合长期复用。

修改步骤:

  1. 在生成格式数据集时,明确指定格式类型为字符型(TYPE='C'),避免SAS默认识别错误;
  2. 追加一条OTHER记录,定义未匹配时的返回值为空字符串。

完整代码:

/* 从CSV表生成基础格式数据集,重命名列并指定格式属性 */
DATA FORMAT;
    SET FORMAT_TABLE(RENAME = (ICD_CODE = START CANCER_TYPE = LABEL));
    RETAIN FMTNAME '$CANCER_TYPE' TYPE 'C'; /* TYPE='C'明确标记为字符格式 */
RUN;

/* 添加OTHERS规则:未匹配的ICD码返回空值 */
DATA FORMAT_FINAL;
    SET FORMAT;
    OUTPUT; /* 输出原有所有ICD-癌症映射关系 */
    /* 仅在第一条记录后插入OTHER规则,避免重复生成 */
    IF _N_ = 1 THEN DO;
        START = 'OTHER';
        LABEL = ''; /* 空字符串,也可根据需求改为'未匹配'等自定义内容 */
        OUTPUT;
    END;
RUN;

/* 生成永久格式(LIB=LIBRARY可根据你的实际库名调整) */
PROC FORMAT LIB = LIBRARY CNTLIN = FORMAT_FINAL; RUN;

/* 应用格式生成CANCER列 */
DATA LOOKUP_DATA;
    SET DATA;
    CANCER = PUT(ICD, $CANCER_TYPE.);
RUN;

方法2:数据步中直接判断并替换未匹配值

如果不想修改已有的格式定义,可以在执行PUT函数后,直接判断结果是否与原ICD值一致——若一致则说明未匹配到,将其替换为空值。

代码示例:

/* 保留你原来的格式生成代码不变 */
DATA FORMAT; 
    SET FORMAT_TABLE(RENAME = (ICD_CODE = START CANCER_TYPE = LABEL)); 
    RETAIN FMTNAME '$CANCER_TYPE'; 
RUN;
PROC FORMAT LIB = LIBRARY CNTLIN = CAL.FMT; RUN;

/* 应用格式后处理未匹配值 */
DATA LOOKUP_DATA;
    SET DATA;
    CANCER = PUT(ICD, $CANCER_TYPE.);
    /* 未匹配时PUT会返回原ICD值,直接替换为空 */
    IF CANCER = ICD THEN CANCER = '';
RUN;

两种方法对比:

  • 方法1更高效,一次定义后所有场景通用,适合有大量重复查询的需求;
  • 方法2更灵活,适合临时处理,不需要调整已有的格式定义。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 04:39:08