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

如何在SAS EG中转置含多数据类型列的ICD诊断数据集?

SAS数据集宽表转长表(配对ICD代码与描述)解决方案

一、是否误用Proc Transpose?

是的,直接使用Proc Transpose无法满足需求。Proc Transpose是单维度列转行工具,无法同时保留ICD代码与对应描述的配对关系,强行转置会把两类数据混在同一列,导致结构混乱。你需要用Unpivot(列转置配对)或数组循环的方式实现目标结构。

二、SAS EG可视化操作步骤(无需代码)

使用EG内置的Unpivot任务可以轻松完成配对转置:

  1. 打开目标数据集,在顶部菜单选择数据 > Unpivot(或在任务面板的「数据转换」分类中找到Unpivot)。
  2. 在Unpivot设置界面:
    • 保留列:选中SSN(唯一标识符列),确保每个分组的标识保留。
    • 配对列组:创建6组配对,每组包含对应的ICD代码列和描述列(比如第一组选ICD1和Desc1,第二组选ICD2和Desc2,依次到第6组)。
    • 新列命名:将所有配对后的代码列统一命名为ICD_Code,描述列统一命名为ICD_Desc。
  3. 点击运行,生成的数据集即为每行对应一个SSN+一个ICD代码+对应描述的结构。

三、SAS代码实现方案

如果习惯用代码处理,以下两种方案更灵活:

方案1:数组循环(适合固定数量的配对列)

假设你的ICD代码列名为ICD1-ICD6,描述列名为Desc1-Desc6,代码如下:

data target_data;
    set original_data;
    /* 定义数组存储所有ICD代码和描述列 */
    array icd_codes[6] ICD1-ICD6;
    array icd_descs[6] Desc1-Desc6;
    
    /* 循环遍历每组配对,输出单行记录 */
    do i = 1 to 6;
        /* 跳过空诊断记录(可选,根据需求调整) */
        if not missing(icd_codes[i]) then do;
            ICD_Code = icd_codes[i];
            ICD_Desc = icd_descs[i];
            output;
        end;
    end;
    
    /* 保留需要的列,删除临时变量和原多列 */
    keep SSN ICD_Code ICD_Desc;
    drop i ICD1-ICD6 Desc1-Desc6;
run;

方案2:Proc Unpivot代码(与EG任务逻辑一致)

直接用Proc Unpivot指定配对列:

proc unpivot data=original_data out=target_data;
    by SSN;
    /* 明确指定每组代码与描述的配对关系 */
    pair ICD1 with Desc1 as (ICD_Code ICD_Desc),
         ICD2 with Desc2 as (ICD_Code ICD_Desc),
         ICD3 with Desc3 as (ICD_Code ICD_Desc),
         ICD4 with Desc4 as (ICD_Code ICD_Desc),
         ICD5 with Desc5 as (ICD_Code ICD_Desc),
         ICD6 with Desc6 as (ICD_Code ICD_Desc);
run;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 16:50:20