我想在我的数据集中创建一个新的变量。这个变量只是一个二元变量,如果有人有烟草病或没有。我正在查看患者数据,每个患者最多有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;但这给了我太多的东西,让我觉得它是不正确的。任何帮助都将不胜感激。
发布于 2015-02-20 11:24:39
它不是在做你想做的事情。您当前的代码正在尝试将diag1的值与同一outpreg数据集中名为tobacco的变量进行比较。由于没有变量tobacco,因此SAS创建了一个新的变量tobacco并将其初始化为missing .。为了执行您想要的操作,我将为每个diag变量将outpreg数据集连接到tobacco数据集。
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将为true,整个表达式的计算结果为1。
您必须将其扩展为涵盖所有9个变量,而不是仅包含3个变量。
另一种选择是将您的烟草代码放入一种格式,就像乔在这个question中建议的那样。
proc format;
value $tobaccocd
'30300','30301','30302','30303'= 'Tobacco'
other='Not Tobacco';
quit;然后,您可以在数据步骤中创建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;https://stackoverflow.com/questions/28619566
复制相似问题