在没有移调的情况下标记一集中的第一个实例

时间:2014-12-16 13:40:17

标签: sas

我在SAS工作,我正在尝试创建一个列疾病标志,用于标记数组中给定疾病代码出现的第一行。在这种情况下,我关心的疾病代码是A36'。理想情况下,我希望在没有第一次转置的情况下这样做。

所以说我的数据如下:

 episode_id diagcode1 diagcode2 diagcode3 
        121       A36       B11
        121       A36       B11       B12  
        121       B12       B05       B06 
        122       B12
        122       A36       B12       B13 
        122       B12       B01
        123       B12       B13       B11  
        123       B12       A36
        123       B13       B12

我想添加一个名为disease_flag的附加列,在列diagcode1 - diagcode3列中标记A36的第一个实例。

因此最终输出将如下所示:

episode_id diagcode1 diagcode2 diagcode3 disease_flag
       121       A36       B11                    1
       121       A36       B11       B12          0
       121       B12       B05       B06          0
       122       B12                              0
       122       A36       B12       B13          1
       122       B12       B01                    0
       123       B12       B13       B11          0
       123       B12       A36                    1
       123       B13       B12                    0

1 个答案:

答案 0 :(得分:3)

您可以使用保留的辅助变量执行此操作,该变量对每个ID重置为0,并且从第一次找到A36时保持设置为1:

data have;
input episode_id diagcode1 $ diagcode2 $ diagcode3 $;
infile cards missover;
cards;
        121       A36       B11
        121       A36       B11       B12  
        121       B12       B05       B06 
        122       B12
        122       A36       B12       B13 
        122       B12       B01
        123       B12       B13       B11  
        123       B12       A36
        123       B13       B12
;
run;

data want;
    set have;
    by episode_id;
    retain t_flag;
    if first.episode_id then t_flag = 0;
    disease_flag = (diagcode1 = 'A36' or diagcode2 = 'A36' or diagcode3 = 'A36') and t_flag = 0;
    if disease_flag then t_flag = 1;
    drop t_flag;
run;