-- THIS SCRIPT IS AUTOMATICALLY GENERATED. DO NOT EDIT IT DIRECTLY. DROP TABLE IF EXISTS gcs_first_day; CREATE TABLE gcs_first_day AS -- ITEMIDs used: -- CAREVUE -- 723 as GCSVerbal -- 454 as GCSMotor -- 184 as GCSEyes -- METAVISION -- 223900 GCS - Verbal Response -- 223901 GCS - Motor Response -- 220739 GCS - Eye Opening -- The code combines the ITEMIDs into the carevue itemids, then pivots those -- So 223900 is changed to 723, then the ITEMID 723 is pivoted to form GCSVerbal -- Note: -- The GCS for sedated patients is defaulted to 15 in this code. -- This is in line with how the data is meant to be collected. -- e.g., from the SAPS II publication: -- For sedated patients, the Glasgow Coma Score before sedation was used. -- This was ascertained either from interviewing the physician who ordered the sedation, -- or by reviewing the patient's medical record. with base as ( SELECT pvt.ICUSTAY_ID , pvt.charttime -- Easier names - note we coalesced Metavision and CareVue IDs below , max(case when pvt.itemid = 454 then pvt.valuenum else null end) as GCSMotor , max(case when pvt.itemid = 723 then pvt.valuenum else null end) as GCSVerbal , max(case when pvt.itemid = 184 then pvt.valuenum else null end) as GCSEyes -- If verbal was set to 0 in the below select, then this is an intubated patient , case when max(case when pvt.itemid = 723 then pvt.valuenum else null end) = 0 then 1 else 0 end as EndoTrachFlag , ROW_NUMBER () OVER (PARTITION BY pvt.ICUSTAY_ID ORDER BY pvt.charttime ASC) as rn FROM ( select l.ICUSTAY_ID -- merge the ITEMIDs so that the pivot applies to both metavision/carevue data , case when l.ITEMID in (723,223900) then 723 when l.ITEMID in (454,223901) then 454 when l.ITEMID in (184,220739) then 184 else l.ITEMID end as ITEMID -- convert the data into a number, reserving a value of 0 for ET/Trach , case -- endotrach/vent is assigned a value of 0, later parsed specially when l.ITEMID = 723 and l.VALUE = '1.0 ET/Trach' then 0 -- carevue when l.ITEMID = 223900 and l.VALUE = 'No Response-ETT' then 0 -- metavision else VALUENUM end as VALUENUM , l.CHARTTIME FROM chartevents l -- get intime for charttime subselection inner join icustays b on l.icustay_id = b.icustay_id -- Isolate the desired GCS variables where l.ITEMID in ( -- 198 -- GCS -- GCS components, CareVue 184, 454, 723 -- GCS components, Metavision , 223900, 223901, 220739 ) -- Only get data for the first 24 hours and l.charttime between b.intime and DATETIME_ADD(b.intime, INTERVAL '1' DAY) -- exclude rows marked as error AND (l.error IS NULL OR l.error = 0) ) pvt group by pvt.ICUSTAY_ID, pvt.charttime ) , gcs as ( select b.* , b2.GCSVerbal as GCSVerbalPrev , b2.GCSMotor as GCSMotorPrev , b2.GCSEyes as GCSEyesPrev -- Calculate GCS, factoring in special case when they are intubated and prev vals -- note that the coalesce are used to implement the following if: -- if current value exists, use it -- if previous value exists, use it -- otherwise, default to normal , case -- replace GCS during sedation with 15 when b.GCSVerbal = 0 then 15 when b.GCSVerbal is null and b2.GCSVerbal = 0 then 15 -- if previously they were intub, but they aren't now, do not use previous GCS values when b2.GCSVerbal = 0 then coalesce(b.GCSMotor,6) + coalesce(b.GCSVerbal,5) + coalesce(b.GCSEyes,4) -- otherwise, add up score normally, imputing previous value if none available at current time else coalesce(b.GCSMotor,coalesce(b2.GCSMotor,6)) + coalesce(b.GCSVerbal,coalesce(b2.GCSVerbal,5)) + coalesce(b.GCSEyes,coalesce(b2.GCSEyes,4)) end as GCS from base b -- join to itself within 6 hours to get previous value left join base b2 on b.ICUSTAY_ID = b2.ICUSTAY_ID and b.rn = b2.rn+1 and b2.charttime > DATETIME_SUB(b.charttime, INTERVAL '6' HOUR) ) , gcs_final as ( select gcs.* -- This sorts the data by GCS, so rn=1 is the the lowest GCS values to keep , ROW_NUMBER () OVER (PARTITION BY gcs.ICUSTAY_ID ORDER BY gcs.GCS ) as IsMinGCS from gcs ) select ie.subject_id, ie.hadm_id, ie.icustay_id -- The minimum GCS is determined by the above row partition, we only join if IsMinGCS=1 , GCS as mingcs , coalesce(GCSMotor,GCSMotorPrev) as gcsmotor , coalesce(GCSVerbal,GCSVerbalPrev) as gcsverbal , coalesce(GCSEyes,GCSEyesPrev) as gcseyes , EndoTrachFlag as endotrachflag -- subselect down to the cohort of eligible patients FROM icustays ie left join gcs_final gs on ie.icustay_id = gs.icustay_id and gs.IsMinGCS = 1 ORDER BY ie.icustay_id;