根据索引变量所采用的值更新索引变量

问题描述 投票:0回答:1

假设有以下数据集

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。

提前谢谢您。

最好

sas
1个回答
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
© www.soinside.com 2019 - 2024. All rights reserved.