MIMIC数据库, 如何统计特定年龄以上具有两个特定icd代码的患者记录数?
注意是:具有两个特定icd代码(即两种疾病)
上篇文章我们讲了MIMIC数据库, 如何统计特定icd代码超过特定年龄的患者住院记录数?
这里很类似, 不同的是需要查询两个特定icd代码(即两种疾病)
其实前面都一样,不同的是我们需要再增加一个子查询(虚拟表)
-- Count the number of patients with two specific icd9 codes above a certain age -- 统计特定年龄以上具有两个特定icd代码的患者记录数 WITH agetbl AS ( SELECT ad.subject_id, -- 患者表中记录的是年龄是脱敏数据,是一个相对年龄,必须经过转换才可得出患者的真实年龄 -- 年龄计算公式为 患者相对年龄+患者入院时间年份-偏移年份 MAX(ROUND(p.anchor_age + mimiciv_derived.DATETIME_DIFF(ad.admittime, mimiciv_derived.DATETIME(p.anchor_year, 1, 1, 0, 0, 0), 'YEAR'),2)) AS age FROM mimiciv_hosp.admissions ad INNER JOIN mimiciv_hosp.patients p ON ad.subject_id = p.subject_id GROUP BY ad.subject_id ), tbl01 as (
SELECT dia.subject_id, age
from mimiciv_hosp.diagnoses_icd dia
INNER JOIN agetbl dt ON dia.subject_id = dt.subject_id
WHERE dia.icd_code
-- 278% relates to obesity 与肥胖症相关
LIKE '278%'
AND age > 40
GROUP BY dia.subject_id, dt.age)
SELECT dib.subject_id, COUNT(DISTINCT dib.hadm_id) AS "Obesity_vs_Hypertension_Age_40+", tbl01.age
from tbl01 INNER JOIN mimiciv_hosp.diagnoses_icd dib ON tbl01.subject_id = dib.subject_id
-- 401% relates to hypertension 与高血压有关
WHERE dib.icd_code LIKE '401%'
AND age > 40
GROUP BY dib.subject_id, tbl01.age
我们来看看代码解释:
这段代码的功能是统计年龄大于40岁且同时患有肥胖症(ICD代码以'278%'开头)和高血压(ICD代码以'401%'开头)的患者记录数。
首先,通过使用两个公共表达式(CTE)agetrbl
和tbl01
来创建必要的数据集。agetrbl
用于计算患者的真实年龄,其中包括患者的相对年龄和入院时间。tbl01
则用来筛选出年龄大于40岁且患有肥胖症的患者。
在主查询中,通过将tbl01
与诊断表diagnoses_icd
连接,筛选出同时患有高血压的患者。最后,利用COUNT(DISTINCT dib.hadm_id)
来计算符合条件的患者数量,并按照患者ID和年龄进行分组统计。
WITH agetbl AS
: 使用WITH
语句创建一个公共表达式(CTE)agetrbl
,用于存储计算患者真实年龄所需的数据。MAX(ROUND(p.anchor_age + mimiciv_derived.DATETIME_DIFF(ad.admittime, mimiciv_derived.DATETIME(p.anchor_year, 1, 1, 0, 0, 0), 'YEAR'),2)) AS age
: 计算患者的真实年龄,通过患者的相对年龄、入院时间和偏移年份的差异来计算。INNER JOIN mimiciv_hosp.patients p ON ad.subject_id = p.subject_id
: 通过患者ID将admissions
表和patients
表进行内连接,以获取患者的信息。GROUP BY ad.subject_id
: 将结果按照患者ID进行分组,以便后续统计每位患者的年龄信息。tbl01 as (SELECT dia.subject_id, age from mimiciv_hosp.diagnoses_icd dia INNER JOIN agetbl dt ON dia.subject_id = dt.subject_id WHERE dia.icd_code LIKE '278%' AND age > 40 GROUP BY dia.subject_id, dt.age)
: 创建名为tbl01
的临时表,筛选出年龄大于40岁且患有肥胖症的患者信息。SELECT dib.subject_id, COUNT(DISTINCT dib.hadm_id) AS "Obesity_vs_Hypertension_Age_40+", tbl01.age from tbl01 INNER JOIN mimiciv_hosp.diagnoses_icd dib ON tbl01.subject_id = dib.subject_id
: 从临时表tbl01
和diagnoses_icd
表中选择患者ID、满足条件的患者入院ID数量以及患者年龄信息。WHERE dib.icd_code LIKE '401%' AND age > 40
: 筛选出患有高血压(ICD代码以'401%'开头)且年龄大于40岁的患者。GROUP BY dib.subject_id, tbl01.age
: 将结果按照患者ID和年龄进行分组,以统计符合条件的患者数量。
mimic数据库使用介绍:
MIMIC数据库提取教程-提取某种疾病下的患者人口统计学指标
MIMIC-IV数据库衍生表格mimic_derived配置和使用
MIMIC-IV数据分析 - 使用Python进行心脏病案例分析
MIMIC-IV数据分析 - 使用Python进行心脏病案例分析(二)
MIMIC-IV数据分析 - 使用R语言探索icustay_detail视图
MIMIC数据提取教程 - 如何提取患者入ICU后第一个WBC和SpO2值
MIMIC数据提取教程 - 提取入住ICU第一天生命体征(血氧饱和度、血压、呼吸、体温)
MIMIC数据提取教程 - 提取血管紧张素受体阻滞剂(ARB)药物
MIMIC-IV-ED适合科研小白的安装方法(提供数据集下载)
MIMIC数据库, 使用Python研究万古霉素的剂量 (一)