我有一个数据集,需要排除在上次报告的感染后6个月内死亡的患者。
以下是示例数据:
id icd9 AgeAtDx AgeAtFirstDM AgeAtDeath disbetes infection
479174 I288.2 68 NULL 68.166666 0.0 0.0
479174 IV45.82 68.16 NULL 68.166666 0.0 0.0
479174 IV45.82 68 NULL 68.166666 0.0 0.0
479174 I272.4 68 NULL 68.166666 0.0 0.0
479174 I276.8 68 NULL 68.166666 0.0 0.0
479174 I338.3 68.16 NULL 68.166666 0.0 0.0
479174 I197.7 68 NULL 68.166666 0.0 0.0
479174 I600.00 68 NULL 68.166666 0.0 0.0
479174 I790.5 67.6 NULL 68.166666 0.0 0.0
479174 I573.8 67.75 NULL 68.166666 0.0 0.0
479174 IV66.7 68.16 NULL 68.166666 0.0 0.0
479174 I154.1 68.16 NULL 68.166666 0.0 0.0
479174 I401.9 68 NULL 68.166666 0.0 0.0
479174 I578.1 67.66 NULL 68.166666 0.0 0.0
479174 I414.01 68.16 NULL 68.166666 0.0 0.0
479174 IV45.82 68 NULL 68.166666 0.0 1.0
479174 I715.98 67.66 NULL 68.166666 0.0 0.0
479174 I607.84 67.66 NULL 68.166666 0.0 0.0
479174 I154.1 68 NULL 68.166666 0.0 0.0
479174 I300.00 68.16 NULL 68.166666 0.0 0.0
0.0 =无感染,1.0 =感染
到目前为止,我有以下代码
select *
from #Data1
except
select *
from #Data1
where infection = 1.0
and AgeAtDeath < AgeAtDx + interval '6 month'
它不起作用。任何帮助将不胜感激。
答案 0 :(得分:0)
在我看来,最简单的方法是使用天数而不是数月,因为您可以避免必须每月计算天数等。这就是您的解决方案可以留出余地的方法。
select *
from #Data1
except
select *
from #Data1
where infection = 1.0
and DATEDIFF(DAY,AgeAtDeath, AgeAtDx) <= 180 --6 months
如果您的解决方案不允许这样做,那么这个人Calculating number of full months between two dates in SQL编写了一个UDF,可以使您更加精确。但是使用功能可能会稍微影响性能。