按ID和日期比对SAS数据集变量并生成New_Var的方法
SAS数据集匹配生成新变量解决方案
核心思路
- 先清理DB1的重复数据:由于同一ID+入院/出院日期对应的Variable_值一致,直接按这三个字段去重,保留唯一行即可
- 以DB为主表,和去重后的DB1做左连接,确保DB的所有记录都能保留到结果集里
- 根据连接后的字段值,按规则生成新变量New_Var
具体代码实现
/* 第一步:对DB1去重,消除重复的日期记录 */ proc sort data=DB1 nodupkey; by ID Admission Discharge; run; /* 第二步:左连接数据集并生成新变量 */ proc sql; create table DB2 as select DB.*, /* 严格按规则赋值:仅当DB.Variable=0且匹配到的DB1.Variable_=1时New_Var=1,其余情况为0 */ case when DB.Variable = 0 and DB1.Variable_ = 1 then 1 else 0 end as New_Var from DB left join DB1 on DB.ID = DB1.ID and DB.Admission = DB1.Admission and DB.Discharge = DB1.Discharge order by DB.ID, DB.Admission, DB.Discharge; quit;
关键说明
- 左连接保证DB的所有记录都被保留,即使在DB1中找不到对应匹配项,此时New_Var会自动取0
nodupkey去重是安全的,因为题目明确DB1重复日期对应的Variable_值一致,不会丢失有效信息- 如果DB中存在多条相同ID+日期的记录,连接后会正常匹配,不会出现异常
内容的提问来源于stack exchange,提问作者NewUsr_stat
相关产品推荐
相关产品推荐

