From 54d82eb0ce62768cf8ab1dd1c21fa1c96d33111f Mon Sep 17 00:00:00 2001 From: Taksh Date: Fri, 31 Jul 2026 13:16:08 +0300 Subject: [PATCH 1/3] fix(mimic-iv): filter MCHC to g/dL rows in complete_blood_count Itemid 51249 is sometimes recorded with valueuom '%' in labevents. Keep only g/dL values when building the derived MCHC column. --- mimic-iv/concepts/measurement/complete_blood_count.sql | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/mimic-iv/concepts/measurement/complete_blood_count.sql b/mimic-iv/concepts/measurement/complete_blood_count.sql index 4e754a1d2..50e3f32a9 100644 --- a/mimic-iv/concepts/measurement/complete_blood_count.sql +++ b/mimic-iv/concepts/measurement/complete_blood_count.sql @@ -8,7 +8,11 @@ SELECT , MAX(CASE WHEN itemid = 51221 THEN valuenum ELSE NULL END) AS hematocrit , MAX(CASE WHEN itemid = 51222 THEN valuenum ELSE NULL END) AS hemoglobin , MAX(CASE WHEN itemid = 51248 THEN valuenum ELSE NULL END) AS mch - , MAX(CASE WHEN itemid = 51249 THEN valuenum ELSE NULL END) AS mchc + , MAX( + CASE + WHEN itemid = 51249 AND valueuom = 'g/dL' THEN valuenum ELSE NULL + END + ) AS mchc , MAX(CASE WHEN itemid = 51250 THEN valuenum ELSE NULL END) AS mcv , MAX(CASE WHEN itemid = 51265 THEN valuenum ELSE NULL END) AS platelet , MAX(CASE WHEN itemid = 51279 THEN valuenum ELSE NULL END) AS rbc @@ -30,6 +34,8 @@ WHERE le.itemid IN , 51301 -- WBC ) AND valuenum IS NOT NULL + -- MCHC (51249) is sometimes recorded with valueuom '%' in error; keep g/dL only + AND (itemid != 51249 OR valueuom = 'g/dL') -- lab values cannot be 0 and cannot be negative AND valuenum > 0 GROUP BY le.specimen_id From 9c46d906fb6bf44b36e14c6c4ee8977b91413824 Mon Sep 17 00:00:00 2001 From: Taksh Date: Fri, 31 Jul 2026 13:16:08 +0300 Subject: [PATCH 2/3] fix(mimic-iv): filter CRP to mg/L rows in inflammation concept Itemid 50889 rows with missing valueuom are excluded; mg/L is the expected unit for C-reactive protein in hosp.labevents. Fixes #1922 --- mimic-iv/concepts/measurement/inflammation.sql | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/mimic-iv/concepts/measurement/inflammation.sql b/mimic-iv/concepts/measurement/inflammation.sql index c41066db6..1a64d10a4 100644 --- a/mimic-iv/concepts/measurement/inflammation.sql +++ b/mimic-iv/concepts/measurement/inflammation.sql @@ -4,7 +4,11 @@ SELECT , MAX(charttime) AS charttime , le.specimen_id -- convert from itemid into a meaningful column - , MAX(CASE WHEN itemid = 50889 THEN valuenum ELSE NULL END) AS crp + , MAX( + CASE + WHEN itemid = 50889 AND valueuom = 'mg/L' THEN valuenum ELSE NULL + END + ) AS crp FROM `physionet-data.mimiciv_hosp.labevents` le WHERE le.itemid IN ( @@ -12,6 +16,8 @@ WHERE le.itemid IN 50889 -- crp ) AND valuenum IS NOT NULL + -- CRP (50889) rows with missing valueuom are excluded; mg/L is the expected unit + AND (itemid != 50889 OR valueuom = 'mg/L') -- lab values cannot be 0 and cannot be negative AND valuenum > 0 GROUP BY le.specimen_id From 53303c7f566b52127d79b04b6e1150183cc689ee Mon Sep 17 00:00:00 2001 From: Taksh Date: Fri, 31 Jul 2026 13:16:11 +0300 Subject: [PATCH 3/3] chore(mimic-iv): regenerate postgres and duckdb lab concept copies --- .../concepts_duckdb/measurement/complete_blood_count.sql | 5 ++++- mimic-iv/concepts_duckdb/measurement/inflammation.sql | 9 +++++++-- .../measurement/complete_blood_count.sql | 5 ++++- mimic-iv/concepts_postgres/measurement/inflammation.sql | 5 ++++- 4 files changed, 19 insertions(+), 5 deletions(-) diff --git a/mimic-iv/concepts_duckdb/measurement/complete_blood_count.sql b/mimic-iv/concepts_duckdb/measurement/complete_blood_count.sql index 6dfabe267..18f16e7de 100644 --- a/mimic-iv/concepts_duckdb/measurement/complete_blood_count.sql +++ b/mimic-iv/concepts_duckdb/measurement/complete_blood_count.sql @@ -8,7 +8,7 @@ SELECT MAX(CASE WHEN itemid = 51221 THEN valuenum ELSE NULL END) AS hematocrit, MAX(CASE WHEN itemid = 51222 THEN valuenum ELSE NULL END) AS hemoglobin, MAX(CASE WHEN itemid = 51248 THEN valuenum ELSE NULL END) AS mch, - MAX(CASE WHEN itemid = 51249 THEN valuenum ELSE NULL END) AS mchc, + MAX(CASE WHEN itemid = 51249 AND valueuom = 'g/dL' THEN valuenum ELSE NULL END) AS mchc, MAX(CASE WHEN itemid = 51250 THEN valuenum ELSE NULL END) AS mcv, MAX(CASE WHEN itemid = 51265 THEN valuenum ELSE NULL END) AS platelet, MAX(CASE WHEN itemid = 51279 THEN valuenum ELSE NULL END) AS rbc, @@ -19,6 +19,9 @@ FROM mimiciv_hosp.labevents AS le WHERE le.itemid IN (51221, 51222, 51248, 51249, 51250, 51265, 51279, 51277, 52159, 51301) AND NOT valuenum IS NULL + AND ( + itemid <> 51249 OR valueuom = 'g/dL' + ) AND valuenum > 0 GROUP BY le.specimen_id \ No newline at end of file diff --git a/mimic-iv/concepts_duckdb/measurement/inflammation.sql b/mimic-iv/concepts_duckdb/measurement/inflammation.sql index 6557801ce..18a2c7397 100644 --- a/mimic-iv/concepts_duckdb/measurement/inflammation.sql +++ b/mimic-iv/concepts_duckdb/measurement/inflammation.sql @@ -5,9 +5,14 @@ SELECT MAX(hadm_id) AS hadm_id, MAX(charttime) AS charttime, le.specimen_id, - MAX(CASE WHEN itemid = 50889 THEN valuenum ELSE NULL END) AS crp + MAX(CASE WHEN itemid = 50889 AND valueuom = 'mg/L' THEN valuenum ELSE NULL END) AS crp FROM mimiciv_hosp.labevents AS le WHERE - le.itemid IN (50889) AND NOT valuenum IS NULL AND valuenum > 0 + le.itemid IN (50889) + AND NOT valuenum IS NULL + AND ( + itemid <> 50889 OR valueuom = 'mg/L' + ) + AND valuenum > 0 GROUP BY le.specimen_id \ No newline at end of file diff --git a/mimic-iv/concepts_postgres/measurement/complete_blood_count.sql b/mimic-iv/concepts_postgres/measurement/complete_blood_count.sql index 3c408cfec..5a8157584 100644 --- a/mimic-iv/concepts_postgres/measurement/complete_blood_count.sql +++ b/mimic-iv/concepts_postgres/measurement/complete_blood_count.sql @@ -9,7 +9,7 @@ SELECT MAX(CASE WHEN itemid = 51221 THEN valuenum ELSE NULL END) AS hematocrit, MAX(CASE WHEN itemid = 51222 THEN valuenum ELSE NULL END) AS hemoglobin, MAX(CASE WHEN itemid = 51248 THEN valuenum ELSE NULL END) AS mch, - MAX(CASE WHEN itemid = 51249 THEN valuenum ELSE NULL END) AS mchc, + MAX(CASE WHEN itemid = 51249 AND valueuom = 'g/dL' THEN valuenum ELSE NULL END) AS mchc, MAX(CASE WHEN itemid = 51250 THEN valuenum ELSE NULL END) AS mcv, MAX(CASE WHEN itemid = 51265 THEN valuenum ELSE NULL END) AS platelet, MAX(CASE WHEN itemid = 51279 THEN valuenum ELSE NULL END) AS rbc, @@ -31,6 +31,9 @@ WHERE 51301 /* WBC */ ) AND NOT valuenum IS NULL + AND /* MCHC (51249) is sometimes recorded with valueuom '%' in error; keep g/dL only */ ( + itemid <> 51249 OR valueuom = 'g/dL' + ) AND /* lab values cannot be 0 and cannot be negative */ valuenum > 0 GROUP BY le.specimen_id \ No newline at end of file diff --git a/mimic-iv/concepts_postgres/measurement/inflammation.sql b/mimic-iv/concepts_postgres/measurement/inflammation.sql index 4f7f0bc2b..263ae093d 100644 --- a/mimic-iv/concepts_postgres/measurement/inflammation.sql +++ b/mimic-iv/concepts_postgres/measurement/inflammation.sql @@ -5,11 +5,14 @@ SELECT MAX(hadm_id) AS hadm_id, MAX(charttime) AS charttime, le.specimen_id, /* convert from itemid into a meaningful column */ - MAX(CASE WHEN itemid = 50889 THEN valuenum ELSE NULL END) AS crp + MAX(CASE WHEN itemid = 50889 AND valueuom = 'mg/L' THEN valuenum ELSE NULL END) AS crp FROM mimiciv_hosp.labevents AS le WHERE le.itemid IN (50889 /* 51652 -- high sensitivity CRP */ /* crp */) AND NOT valuenum IS NULL + AND /* CRP (50889) rows with missing valueuom are excluded; mg/L is the expected unit */ ( + itemid <> 50889 OR valueuom = 'mg/L' + ) AND /* lab values cannot be 0 and cannot be negative */ valuenum > 0 GROUP BY le.specimen_id \ No newline at end of file