This commit is contained in:
2026-05-05 10:22:17 +02:00
commit 9a24865016
30 changed files with 5735 additions and 0 deletions

215
sql/sepsis/antibiotic.sql Normal file
View File

@@ -0,0 +1,215 @@
-- ------------------------------------------------------------------
-- Title: Antibiotic prescriptions
--
-- Adapted from the MIMIC-IV upstream
-- concepts/medication/antibiotic.sql
-- and ported to MIMIC-III v1.3 vanilla PostgreSQL.
--
-- PORT NOTES:
-- 1. MIMIC-III `prescriptions` has DATE-precision `startdate` /
-- `enddate` instead of MIMIC-IV's TIMESTAMP `starttime` /
-- `stoptime`. We carry these through unchanged; downstream
-- consumers (suspicion_of_infection.sql) treat the antibiotic
-- time as the start-of-day timestamp of `startdate`.
-- 2. MIMIC-III `prescriptions` already has a populated `icustay_id`
-- column on most rows, so we can pick the ICU stay directly
-- rather than recomputing from `intime`/`outtime`. We still
-- back-fill it from `icustays` where missing, the same way
-- MIMIC-IV does.
-- ------------------------------------------------------------------
DROP TABLE IF EXISTS antibiotic;
CREATE TABLE antibiotic AS
WITH abx AS
(
SELECT DISTINCT
drug
, route
, CASE
WHEN LOWER(drug) LIKE '%adoxa%' THEN 1
WHEN LOWER(drug) LIKE '%ala-tet%' THEN 1
WHEN LOWER(drug) LIKE '%alodox%' THEN 1
WHEN LOWER(drug) LIKE '%amikacin%' THEN 1
WHEN LOWER(drug) LIKE '%amikin%' THEN 1
WHEN LOWER(drug) LIKE '%amoxicill%' THEN 1
WHEN LOWER(drug) LIKE '%amphotericin%' THEN 1
WHEN LOWER(drug) LIKE '%anidulafungin%' THEN 1
WHEN LOWER(drug) LIKE '%ancef%' THEN 1
WHEN LOWER(drug) LIKE '%clavulanate%' THEN 1
WHEN LOWER(drug) LIKE '%ampicillin%' THEN 1
WHEN LOWER(drug) LIKE '%augmentin%' THEN 1
WHEN LOWER(drug) LIKE '%avelox%' THEN 1
WHEN LOWER(drug) LIKE '%avidoxy%' THEN 1
WHEN LOWER(drug) LIKE '%azactam%' THEN 1
WHEN LOWER(drug) LIKE '%azithromycin%' THEN 1
WHEN LOWER(drug) LIKE '%aztreonam%' THEN 1
WHEN LOWER(drug) LIKE '%axetil%' THEN 1
WHEN LOWER(drug) LIKE '%bactocill%' THEN 1
WHEN LOWER(drug) LIKE '%bactrim%' THEN 1
WHEN LOWER(drug) LIKE '%bactroban%' THEN 1
WHEN LOWER(drug) LIKE '%bethkis%' THEN 1
WHEN LOWER(drug) LIKE '%biaxin%' THEN 1
WHEN LOWER(drug) LIKE '%bicillin l-a%' THEN 1
WHEN LOWER(drug) LIKE '%cayston%' THEN 1
WHEN LOWER(drug) LIKE '%cefazolin%' THEN 1
WHEN LOWER(drug) LIKE '%cedax%' THEN 1
WHEN LOWER(drug) LIKE '%cefoxitin%' THEN 1
WHEN LOWER(drug) LIKE '%ceftazidime%' THEN 1
WHEN LOWER(drug) LIKE '%cefaclor%' THEN 1
WHEN LOWER(drug) LIKE '%cefadroxil%' THEN 1
WHEN LOWER(drug) LIKE '%cefdinir%' THEN 1
WHEN LOWER(drug) LIKE '%cefditoren%' THEN 1
WHEN LOWER(drug) LIKE '%cefepime%' THEN 1
WHEN LOWER(drug) LIKE '%cefotan%' THEN 1
WHEN LOWER(drug) LIKE '%cefotetan%' THEN 1
WHEN LOWER(drug) LIKE '%cefotaxime%' THEN 1
WHEN LOWER(drug) LIKE '%ceftaroline%' THEN 1
WHEN LOWER(drug) LIKE '%cefpodoxime%' THEN 1
WHEN LOWER(drug) LIKE '%cefpirome%' THEN 1
WHEN LOWER(drug) LIKE '%cefprozil%' THEN 1
WHEN LOWER(drug) LIKE '%ceftibuten%' THEN 1
WHEN LOWER(drug) LIKE '%ceftin%' THEN 1
WHEN LOWER(drug) LIKE '%ceftriaxone%' THEN 1
WHEN LOWER(drug) LIKE '%cefuroxime%' THEN 1
WHEN LOWER(drug) LIKE '%cephalexin%' THEN 1
WHEN LOWER(drug) LIKE '%cephalothin%' THEN 1
WHEN LOWER(drug) LIKE '%cephapririn%' THEN 1
WHEN LOWER(drug) LIKE '%chloramphenicol%' THEN 1
WHEN LOWER(drug) LIKE '%cipro%' THEN 1
WHEN LOWER(drug) LIKE '%ciprofloxacin%' THEN 1
WHEN LOWER(drug) LIKE '%claforan%' THEN 1
WHEN LOWER(drug) LIKE '%clarithromycin%' THEN 1
WHEN LOWER(drug) LIKE '%cleocin%' THEN 1
WHEN LOWER(drug) LIKE '%clindamycin%' THEN 1
WHEN LOWER(drug) LIKE '%cubicin%' THEN 1
WHEN LOWER(drug) LIKE '%dicloxacillin%' THEN 1
WHEN LOWER(drug) LIKE '%dirithromycin%' THEN 1
WHEN LOWER(drug) LIKE '%doryx%' THEN 1
WHEN LOWER(drug) LIKE '%doxycy%' THEN 1
WHEN LOWER(drug) LIKE '%duricef%' THEN 1
WHEN LOWER(drug) LIKE '%dynacin%' THEN 1
WHEN LOWER(drug) LIKE '%ery-tab%' THEN 1
WHEN LOWER(drug) LIKE '%eryped%' THEN 1
WHEN LOWER(drug) LIKE '%eryc%' THEN 1
WHEN LOWER(drug) LIKE '%erythrocin%' THEN 1
WHEN LOWER(drug) LIKE '%erythromycin%' THEN 1
WHEN LOWER(drug) LIKE '%factive%' THEN 1
WHEN LOWER(drug) LIKE '%flagyl%' THEN 1
WHEN LOWER(drug) LIKE '%fortaz%' THEN 1
WHEN LOWER(drug) LIKE '%furadantin%' THEN 1
WHEN LOWER(drug) LIKE '%garamycin%' THEN 1
WHEN LOWER(drug) LIKE '%gentamicin%' THEN 1
WHEN LOWER(drug) LIKE '%kanamycin%' THEN 1
WHEN LOWER(drug) LIKE '%keflex%' THEN 1
WHEN LOWER(drug) LIKE '%kefzol%' THEN 1
WHEN LOWER(drug) LIKE '%ketek%' THEN 1
WHEN LOWER(drug) LIKE '%levaquin%' THEN 1
WHEN LOWER(drug) LIKE '%levofloxacin%' THEN 1
WHEN LOWER(drug) LIKE '%lincocin%' THEN 1
WHEN LOWER(drug) LIKE '%linezolid%' THEN 1
WHEN LOWER(drug) LIKE '%macrobid%' THEN 1
WHEN LOWER(drug) LIKE '%macrodantin%' THEN 1
WHEN LOWER(drug) LIKE '%maxipime%' THEN 1
WHEN LOWER(drug) LIKE '%mefoxin%' THEN 1
WHEN LOWER(drug) LIKE '%metronidazole%' THEN 1
WHEN LOWER(drug) LIKE '%meropenem%' THEN 1
WHEN LOWER(drug) LIKE '%methicillin%' THEN 1
WHEN LOWER(drug) LIKE '%minocin%' THEN 1
WHEN LOWER(drug) LIKE '%minocycline%' THEN 1
WHEN LOWER(drug) LIKE '%monodox%' THEN 1
WHEN LOWER(drug) LIKE '%monurol%' THEN 1
WHEN LOWER(drug) LIKE '%morgidox%' THEN 1
WHEN LOWER(drug) LIKE '%moxatag%' THEN 1
WHEN LOWER(drug) LIKE '%moxifloxacin%' THEN 1
WHEN LOWER(drug) LIKE '%mupirocin%' THEN 1
WHEN LOWER(drug) LIKE '%myrac%' THEN 1
WHEN LOWER(drug) LIKE '%nafcillin%' THEN 1
WHEN LOWER(drug) LIKE '%neomycin%' THEN 1
WHEN LOWER(drug) LIKE '%nicazel doxy 30%' THEN 1
WHEN LOWER(drug) LIKE '%nitrofurantoin%' THEN 1
WHEN LOWER(drug) LIKE '%norfloxacin%' THEN 1
WHEN LOWER(drug) LIKE '%noroxin%' THEN 1
WHEN LOWER(drug) LIKE '%ocudox%' THEN 1
WHEN LOWER(drug) LIKE '%ofloxacin%' THEN 1
WHEN LOWER(drug) LIKE '%omnicef%' THEN 1
WHEN LOWER(drug) LIKE '%oracea%' THEN 1
WHEN LOWER(drug) LIKE '%oraxyl%' THEN 1
WHEN LOWER(drug) LIKE '%oxacillin%' THEN 1
WHEN LOWER(drug) LIKE '%pc pen vk%' THEN 1
WHEN LOWER(drug) LIKE '%pce dispertab%' THEN 1
WHEN LOWER(drug) LIKE '%panixine%' THEN 1
WHEN LOWER(drug) LIKE '%pediazole%' THEN 1
WHEN LOWER(drug) LIKE '%penicillin%' THEN 1
WHEN LOWER(drug) LIKE '%periostat%' THEN 1
WHEN LOWER(drug) LIKE '%pfizerpen%' THEN 1
WHEN LOWER(drug) LIKE '%piperacillin%' THEN 1
WHEN LOWER(drug) LIKE '%tazobactam%' THEN 1
WHEN LOWER(drug) LIKE '%primsol%' THEN 1
WHEN LOWER(drug) LIKE '%proquin%' THEN 1
WHEN LOWER(drug) LIKE '%raniclor%' THEN 1
WHEN LOWER(drug) LIKE '%rifadin%' THEN 1
WHEN LOWER(drug) LIKE '%rifampin%' THEN 1
WHEN LOWER(drug) LIKE '%rocephin%' THEN 1
WHEN LOWER(drug) LIKE '%smz-tmp%' THEN 1
WHEN LOWER(drug) LIKE '%septra%' THEN 1
WHEN LOWER(drug) LIKE '%septra ds%' THEN 1
WHEN LOWER(drug) LIKE '%solodyn%' THEN 1
WHEN LOWER(drug) LIKE '%spectracef%' THEN 1
WHEN LOWER(drug) LIKE '%streptomycin%' THEN 1
WHEN LOWER(drug) LIKE '%sulfadiazine%' THEN 1
WHEN LOWER(drug) LIKE '%sulfamethoxazole%' THEN 1
WHEN LOWER(drug) LIKE '%trimethoprim%' THEN 1
WHEN LOWER(drug) LIKE '%sulfatrim%' THEN 1
WHEN LOWER(drug) LIKE '%sulfisoxazole%' THEN 1
WHEN LOWER(drug) LIKE '%suprax%' THEN 1
WHEN LOWER(drug) LIKE '%synercid%' THEN 1
WHEN LOWER(drug) LIKE '%tazicef%' THEN 1
WHEN LOWER(drug) LIKE '%tetracycline%' THEN 1
WHEN LOWER(drug) LIKE '%timentin%' THEN 1
WHEN LOWER(drug) LIKE '%tobramycin%' THEN 1
WHEN LOWER(drug) LIKE '%unasyn%' THEN 1
WHEN LOWER(drug) LIKE '%vancocin%' THEN 1
WHEN LOWER(drug) LIKE '%vancomycin%' THEN 1
WHEN LOWER(drug) LIKE '%vantin%' THEN 1
WHEN LOWER(drug) LIKE '%vibativ%' THEN 1
WHEN LOWER(drug) LIKE '%vibra-tabs%' THEN 1
WHEN LOWER(drug) LIKE '%vibramycin%' THEN 1
WHEN LOWER(drug) LIKE '%zinacef%' THEN 1
WHEN LOWER(drug) LIKE '%zithromax%' THEN 1
WHEN LOWER(drug) LIKE '%zosyn%' THEN 1
WHEN LOWER(drug) LIKE '%zyvox%' THEN 1
ELSE 0
END AS antibiotic
FROM prescriptions
WHERE drug_type NOT IN ('BASE')
-- match upstream: NULL routes are excluded by the NOT IN.
AND route NOT IN ('OU','OS','OD','AU','AS','AD','TP')
AND LOWER(route) NOT LIKE '%ear%'
AND LOWER(route) NOT LIKE '%eye%'
AND LOWER(drug) NOT LIKE '%cream%'
AND LOWER(drug) NOT LIKE '%desensitization%'
AND LOWER(drug) NOT LIKE '%ophth oint%'
AND LOWER(drug) NOT LIKE '%gel%'
)
SELECT pr.subject_id
, pr.hadm_id
, COALESCE(pr.icustay_id, ie.icustay_id) AS icustay_id
, pr.drug AS antibiotic
, pr.route
-- DATE-precision in MIMIC-III; downstream treats this as the
-- start-of-day timestamp.
, pr.startdate AS starttime
, pr.enddate AS stoptime
FROM prescriptions pr
INNER JOIN abx
ON pr.drug = abx.drug
AND pr.route = abx.route
LEFT JOIN icustays ie
ON pr.hadm_id = ie.hadm_id
AND pr.startdate >= CAST(ie.intime AS DATE)
AND pr.startdate <= CAST(ie.outtime AS DATE)
WHERE abx.antibiotic = 1;
CREATE INDEX IF NOT EXISTS antibiotic_idx
ON antibiotic (subject_id, hadm_id, starttime);