在SAS中按患者ID将多行二分类变量折叠为单一行的代码求助
SAS实现患者ID维度多行二分类变量折叠为单行的代码方案
以下是两种常用实现方案,可根据你的实际场景选择:
方案1:PROC SQL快速实现(适用于需保留同一患者所有指标是否存在阳性的场景)
如果需求是同一患者ID下,只要任意一行记录对应二分类指标为1,最终结果中该指标就取1,无阳性记录则取0,可直接用聚合函数实现,代码简洁:
proc sql; create table 输出表名 as select 患者ID字段名, max(二分类变量1) as 二分类变量1, max(二分类变量2) as 二分类变量2 /* 剩余二分类变量按以上格式补充即可 */ from 原始输入表名 group by 患者ID字段名; quit;
方案2:PROC TRANSPOSE通用转宽实现(适用于需保留同一患者所有行的二分类值的场景)
如果需求是把同一患者的多次记录的二分类值,分别作为不同列存储到单行中,可使用转宽逻辑实现:
/* 步骤1:为同一患者ID下的多条记录生成顺序号 */ data temp; set 原始输入表名; by 患者ID字段名; if first.患者ID字段名 then seq=1; else seq+1; run; /* 步骤2:按患者ID转宽为单行结构 */ proc transpose data=temp out=输出表名(drop=_name_) prefix=分类记录_; by 患者ID字段名; id seq; var 要折叠的二分类字段名; run;
使用前请将代码中的中文占位符替换为你实际数据集的表名、字段名即可运行
内容的提问来源于stack exchange,提问作者Sophia
相关产品推荐
相关产品推荐

