学习了数据库相关文章和数据提取分析后想自己练手试一试
想复现以下文章

提取筛选数据的过程中就遇到了问题
,原文的纳排为下图

其他我都能自己提取到
唯一就是既往有房颤史的患者我没有思路排除
好像数据库本身是没有既往史相关记录的
恳求各位能人解答
学习了数据库相关文章和数据提取分析后想自己练手试一试
想复现以下文章

提取筛选数据的过程中就遇到了问题
,原文的纳排为下图

其他我都能自己提取到
唯一就是既往有房颤史的患者我没有思路排除
好像数据库本身是没有既往史相关记录的
恳求各位能人解答
下午好🌅🌅🌅
本答案参考通义千问
你提到在复现文章时,既往有房颤史的患者的排除是一个难点。确实,在MIMIC数据库中,既往病史(如房颤)的记录并不是像“诊断”那样直接存储在一个字段中,而是需要通过ICD-9/10编码、文本描述或临床注释等方式进行推断和提取。
下面我将详细说明如何从MIMIC数据库中筛选出既往有房颤史的患者,并给出具体步骤和代码示例,帮助你完成数据清洗和筛选。
房颤的ICD-9和ICD-10编码如下:
| ICD版本 | 编码 | 说明 | |---------|------------|----------------| | ICD-9 | 427.31 | 心房颤动 | | ICD-10 | I48.0 | 心房颤动 |
diagnoses_icd表):SELECT DISTINCT subject_id
FROM diagnoses_icd
WHERE (icd9_code = '427.31' OR icd10_code = 'I48.0')
AND hospital_expire_flag = 0; -- 排除已死亡患者
注意: 需要根据你的MIMIC版本(如MIMIC-III或MIMIC-IV)选择对应的编码。
有些患者在入院前的门诊记录或入院评估中会提到“既往有房颤史”。
noteevents表):SELECT DISTINCT subject_id
FROM noteevents
WHERE (text LIKE '%atrial fibrillation%' OR text LIKE '%房颤%')
AND category = 'Discharge summary'; -- 或其他合适的类别
注意: 需要结合具体注释类型(如“Admission Note”、“Discharge Summary”等)来提高准确性。
某些抗凝药物(如华法林、达比加群)可能提示患者有房颤史。
medevents表):SELECT DISTINCT subject_id
FROM medevents
WHERE drug IN ('warfarin', 'dabigatran', 'rivaroxaban');
注意: 药物使用可能不完全反映房颤史,需结合其他数据源。
你可以将上述方法结合起来,构建一个更全面的筛选逻辑。
WITH af_patients AS (
SELECT DISTINCT subject_id
FROM diagnoses_icd
WHERE icd9_code = '427.31' OR icd10_code = 'I48.0'
UNION
SELECT DISTINCT subject_id
FROM noteevents
WHERE text LIKE '%atrial fibrillation%' OR text LIKE '%房颤%'
AND category = 'Discharge summary'
UNION
SELECT DISTINCT subject_id
FROM medevents
WHERE drug IN ('warfarin', 'dabigatran', 'rivaroxaban')
)
SELECT *
FROM patients
WHERE subject_id NOT IN (SELECT * FROM af_patients);
注意: 上述SQL是示例,具体字段名和表结构可能因MIMIC版本而异,需根据实际数据库调整。
✅ 关键点一:ICD编码是识别房颤的主要手段
diagnoses_icd表中的ICD-9/10编码(如427.31或I48.0)可以有效识别房颤患者。✅ 关键点二:临床注释可补充房颤史信息
noteevents表中的文本内容(如“房颤史”、“心房颤动”等)可以进一步确认患者是否有房颤史。✅ 关键点三:药物使用可作为辅助判断依据
✅ 关键点四:需结合多种数据源进行交叉验证
如果你使用的是MIMIC-III数据库,可以尝试以下SQL语句:
-- 提取有房颤史的患者
WITH af_patients AS (
SELECT DISTINCT subject_id
FROM diagnoses_icd
WHERE icd9_code = '427.31'
UNION
SELECT DISTINCT subject_id
FROM noteevents
WHERE text LIKE '%atrial fibrillation%' OR text LIKE '%房颤%'
AND category = 'Discharge summary'
UNION
SELECT DISTINCT subject_id
FROM medevents
WHERE drug IN ('warfarin', 'dabigatran', 'rivaroxaban')
)
-- 最终筛选:排除有房颤史的患者
SELECT *
FROM patients
WHERE subject_id NOT IN (SELECT * FROM af_patients);
DISTINCT避免重复计数。如果你能提供具体的MIMIC版本(如MIMIC-III或MIMIC-IV),我可以进一步帮你优化SQL查询和筛选逻辑。希望以上内容对你有所帮助!如果还有其他问题,欢迎继续提问!