MIMIC-IV数据库, 判断是否多次入住ICU的患者是同一次入住ICU?
一、icustays表
ICU住院资讯(患者在ICU内的住院概要,比如进出ICU的时间)该文件记录了患者在重症监护室(ICU)的留观信息。 |
- 此表记录了病患的ICU的住院资讯,包括入住和出院的时间、住院天数等
- 记录患者进入和离开ICU的表格为icustays,这个表格中有两个时间较为重要,分别是intime和outtime,前者表示进入ICU的时间,后者表示离开ICU的时间。
- 当然,如果患者在ICU死亡,那么dischartime、outtime和deathtime理论上就是同一个时间,但实际上会稍微有些出入,估计是由于录入不及时造成的;
- subject_id:患者的唯一标识符。
- hadm_id:入院号,表示患者的住院标识符。
- stay_id:留观号,指患者在医院中的留观期间的唯一标识符。
- first_careunit:首次护理单元,表示患者在住院期间所在的第一个护理单元。
- last_careunit:最后护理单元,表示患者在住院期间所在的最后一个护理单元。
- intime:入院时间,指患者入院的时间。
- outtime:出院时间,表示患者出院的时间。
- los:住院天数,表示患者在医院中的住院天数
以前取ICU相关的资料我们都需要到icustays里面把icustay_id取出来,不过现在要取的是stay_id了。intime和outtime大家都懂的,los是ICU住院时间
二、判断是否多次入住ICU的患者是同一次入住IC(结果显示全部都是。。。)
这段 SQL 代码的作用是判断是否有多次入住 ICU 的患者是同一次入住 ICU。
- 具体来说,代码首先使用了一个 CTE(Common Table Expression)语句,将 `mimiciv_icu.icustays` 表中的数据按照 `hadm_id` 分组,并按照 `intime` 排序,然后为每个分组中的记录分配一个序号 `icu_count`,
- 同时使用 `LAG` 函数获取前一个记录的 `outtime` 值,存储在 `outtime_change` 列中。
- 接下来,代码使用了另一个 CTE 语句,将第一个 CTE 语句中的结果作为输入,计算每个记录是否属于同一次入住 ICU。
- 具体来说,对于每个记录,如果它是该 `hadm_id` 分组中的第一条记录,或者它的 `intime` 值等于前一个记录的 `outtime` 值,则将 `judge_the_same` 列设置为 1,否则设置为 0。
- 最后,代码从第二个 CTE 语句的结果中选择 `judge_the_same` 列为 0 的记录,即多次入住 ICU 但不是同一次入住的记录。由于结果集为空,说明所有多次入住 ICU 的患者都是同一次入住 ICU。
2.1 为什么使用partition by, 而不是group by?
group by分组汇总后改变了表的行数,一行只有一个类别。而partiition by和rank函数不会减少原表中的行数。例如下面统计每个医院的人数。
这里主要两个作用
- 同时具有分组和排序的功能
- 不减少原表的行数
注意事项partition子句是可省略,省略就是不指定分组
2.2 为什么使用row_number,而不是rank 或者dense_rank?
专用窗口函数rank, dense_rank, row_number有什么区别呢?
它们的区别我举个例子,你们一下就能看懂:
select *,
rank() over (order by intime desc) as rank_stay_order,
dense_rank() over (order by intime desc) as dese_rank_stay_order,
row_number() over (order by intime desc) as row_num_stay_order
from mimiciv_icu.icustays
得到结果:
我们把intime字段换成subject_id, 因为subject_id是有可能相同的
从上面的结果可以看出:
rank函数:这个例子中是7位,7位,9位,也就是如果有并列名次的行,会占用下一名次的位置。比如正常排名是1,2,3,4,但是现在前3名是并列的名次,结果是:1,1,1,4。 dense_rank函数:这个例子中是7位,7位,8位,也就是如果有并列名次的行,不占用下一名次的位置。比如正常排名是1,2,3,4,但是现在前3名是并列的名次,结果是:1,1,1,2。 row_number函数:这个例子中是7位,8位,9位,也就是不考虑并列名次的情况。比如前3名是并列的名次,排名是正常的1,2,3,4。 这三个函数的区别如下:
三、结论
以上代码判断是否多次入住ICU的患者是同一次入住ICU,结果显示全部都是。。。
也就意味着查和stay_id相关的参数时要转换成hadm_id来查,因为都是同一次入住ICU的,就是stay_id不同而已
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研究万古霉素的剂量 (一)