我想在我的数据集中创建一个新变量。如果有人患有烟草疾病,这个变量只是一个二元变量。我正在查看患者数据,每位患者最多有9个疾病代码。我有一个名为烟草的数据集,存储所有烟草疾病代码。
这就是我认为我能做到的:
data outpreg;
set outpreg;
if diag1 = tobacco OR diag2 = tobacco OR diag3 = tobacco or diag4 = tobacco or diag5 = tobacco or diag6 = tobacco or
diag7 = tobacco or diag8 = tobacco or diag9 = tobacco then co2=1;
run;
但是这给了我太多,因为它是正确的。 任何帮助将不胜感激。
答案 0 :(得分:1)
它没有做你想做的事。您当前的代码正在尝试将diag1
的值与同一tobacco
数据集中名为outpreg
的变量进行比较。由于没有变量tobacco
,因此SAS正在创建新变量tobacco
并将其初始化为缺少.
。为了做您想做的事情,我会将outpreg
数据集加入到每个tobacco
变量的diag
数据集中。
proc sql;
select
o.*,
t1.tobacco_cd is not null or
t2.tobacco_cd is not null or
t3.tobacco_cd is not null as co2
from
outpreg as o
left join tobacco as t1
on o.diag1 = t1.tobacco_cd
left join tobacco as t2
on o.diag2 = t2.tobacco_cd
left join tobacco as t3
on o.diag3 = t3.tobacco_cd
;
quit;
这会根据代码列表检查每个diag
变量,如果匹配则将co2
设置为1
,如果匹配则设置为0
。diag1
例如,如果t1.tobacco_cd is not null
匹配,那么1
将为true,整个表达式的计算结果为proc format;
value $tobaccocd
'30300','30301','30302','30303'= 'Tobacco'
other='Not Tobacco';
quit;
。
您必须将其展开以涵盖所有九个变量,而不仅仅是三个。
另一个选择是将您的烟草代码设置为乔在question中建议的格式。
co2
然后,您可以在数据步骤中创建data outpreg2;
set outpreg;
if put(diag1,$tobaccocd.) = 'Tobacco' or
put(diag2,$tobaccocd.) = 'Tobacco' or
put(diag3,$tobaccocd.) = 'Tobacco' then co2 = 1;
else co2 = 0;
run;
变量,如下所示:
{{1}}