我在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
答案 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;