假设有以下数据集
data DB;
input ID :$20. morbidity;
cards;
0001 1
0001 1
0001 0
0001 2
0002 2
0002 0
0002 2;
run;
有办法获得以下内容吗?
data DB1;
input ID :$20. morbidity;
cards;
0001 1
0001 1
0001 0
0001 0
0002 2
0002 0
0002 2;
run;
换句话说,如果患者至少有一次发病率 = 1,则所有剩余次数发病率 = 2,则其应变为 0。
提前谢谢您。
最好
一种简单的方法是使用哈希表查找查找发病率为 1 的所有 ID。如果表中 ID 的值与哈希表中 ID 的值和发病率值匹配是 2,则将其设置为 0。换句话说,如果我们在该查找表中找到某个 ID 的匹配项,且该查找表only 包含至少具有一个
morbidity = 1
值的 ID:
ID
0001
然后我们知道,对于我们正在读取的
set
表中的 ID,在某个时刻发病率 = 1。既然我们找到了匹配,我们就可以检查发病率的值是否为 2。如果是,则将其设置为 0。
data want;
set db;
if(_N_ = 1) then do;
dcl hash lookup(dataset: 'db(where=(morbidity=1))');
lookup.defineKey('id');
lookup.defineDone();
end;
if(lookup.Check() = 0 AND morbidity = 2)
then morbidity = 0;
run;
ID morbidity
0001 1
0001 1
0001 0
0001 0
0002 2
0002 0
0002 2