在上一篇数据库提取教程中,小编教大家提取了“肺栓塞”患者的实验室指标,具体步骤可以参考MIMIC数据库提取教程-提取某种疾病下的实验室指标。
在本期数据库提取教程,小编依旧以“肺栓塞”患者为例,教大家如何提取患者的人口统计学指标。
在mimiciv数据库中,患者的人口统计学信息主要分为两部分。
第一部分为患者的“语言”,“种族”,“婚姻状态”这几种信息,这些信息直接记录在了hosp模块的admissions表中,大家直接提取即可。
第二部分为患者的“年龄”,“身高”,“体重”这几个信息,这几个信息都不可以直接从表中直接提取,而是要经过计算才能获取患者正确的指标。
本期小编就教大家如何在mimiciv数据库中获取患者的“年龄”,“身高”,“体重”这几个很重要的指标。
一,获取患者的真实年龄
mimiciv数据库为了保护患者的隐私,并没有直接记录患者的真实年龄,patients表中记录了两个关于年龄的字段:
anchor_age:患者相对anchor_year的相对年龄。
anchor_year:计算患者年龄的基准年份。
anchor_age并不是患者的入院时的真实年龄,而是根据anchor_year做了偏移,真实年龄的计算公式是:
患者的真实年龄=anchor_age 患者的入院时间-anchor_year
上图中的ROUND函数是将年龄转为2位小数。
上图小编使用到了DATETIME_DIFF函数,该函数为mimiciv官方函数,作用是求两个时间的差,这个函数小编是安装在mimiciv_derived模块中,如果大家不是安装在这个模块中,请把函数前缀替换成自己的模块名哈。
代码语言:javascript复制SELECT ad.subject_id, -- 患者表中记录的是年龄是脱敏数据,是一个相对年龄,必须经过转换才可得出患者的真实年龄 -- 年龄计算公式为 患者相对年龄 患者入院时间年份-偏移年份 MAX(ROUND(pa.anchor_age mimiciv_derived.DATETIME_DIFF(ad.admittime, mimiciv_derived.DATETIME(pa.anchor_year, 1, 1, 0, 0, 0), 'YEAR'),2)) AS age FROM admissions ad, patients pa WHERE ad.subject_id = pa.subject_id GROUP BY ad.subject_id
二,获取患者的身高
mimiciv数据库中患者的身高数据存放在icu模块的chartevents表中,并且身高会使用两种单位进行记录,分别是英寸跟厘米,为了数值的正确,必须将单位统一,这里小编会将使用英寸的测量数据转成厘米。
代码语言:javascript复制-- MIMIC中测量身高有两种单位,分别是英寸跟厘米,两种都要统计,最终单位统一转成厘米base_ht AS ( SELECT c.subject_id -- 单位统一转成厘米,取最大值 ,MAX( CASE WHEN c.itemid = 226707 THEN ROUND(CAST(c.valuenum * 2.54 AS NUMERIC), 2) ELSE ROUND(CAST(c.valuenum AS NUMERIC), 2) END) as height FROM mimiciv_icu.chartevents c WHERE c.valuenum IS NOT NULL -- 226707身高测试使用的是英寸,226730使用的是厘米 AND c.itemid in(226707,226730) GROUP BY c.subject_id)
三,获取患者的体重
mimiciv数据库中患者的体重数据也存放在icu模块的chartevents表中,患者的体重数据有两种类型,分别是入院时测量的体重跟医院每天的测量体重。小编这里取的是患者两种体重的平均值。
代码语言:javascript复制-- 测量体重,测量体重有两种类型,一种是患者入院时测量,另一种是在ICU中每日的测量值,-- 我们直接取平均值base_wt AS ( SELECT c.subject_id, ROUND(CAST(AVG(c.valuenum) AS NUMERIC),2) AS weight FROM mimiciv_icu.chartevents c WHERE c.valuenum IS NOT NULL AND c.itemid IN(226512, 224639) AND c.valuenum > 0 GROUP BY c.subject_id )
最终提取出来的“肺栓塞”患者的人口统计学信息如下,小编为了大家学习的连贯性,直接把人口统计学指标加在了原有的指标上面。