-
Notifications
You must be signed in to change notification settings - Fork 5
/
Copy pathepinephrine_info_eicu.sql
216 lines (201 loc) · 6.87 KB
/
epinephrine_info_eicu.sql
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
drop table if exists `db_name.epinephrine_info_eicu`;
create table `db_name.epinephrine_info_eicu` as
--By Xiaoli Liu
--2018.12.20 & 20201.09.07
-- get all of epinephrine information with drugrate units of mcg/kg/min
-- 1. add information of unit with 'Epinephrine ()'
-- process of 'Epinephrine ()' | 1879
-- we notice that 'drugname = 'Epinephrine ()'' might happen when :
-- 1) no value -- 0; 2) lose unit for saving time; 3) no-known reasons
-- so : we will solve the 2) by adding units considering the units before and after
with infusiondrug_new_0 as (
select infusiondrugid, patientunitstayid, infusionoffset, drugname
, cast(drugrate as numeric) as drugrate, infusionrate, drugamount, volumeoffluid, patientweight
from `physionet-data.eicu_crd.infusiondrug`
where
(
drugname like 'Epinephrine%'
or drugname like 'EPINEPHrine%'
)
and drugrate not like '%OFF%'
and drugrate not like '%50%mcg%'
and drugrate not like '%br%'
and drugrate != ''
)
, epinephrine_in_part_0 as (
select patientunitstayid
from infusiondrug_new_0
where drugname = 'Epinephrine ()' -- | 24793
group by patientunitstayid
)
, epinephrine_in_part_1 as (
select ifd.infusiondrugid
, ifd.patientunitstayid
, ifd.infusionoffset
, ifd.drugname
, case
when ifd.drugname = 'Epinephrine' then 1
else null end as unit_flag -- the imputation function is fit for float value
from infusiondrug_new_0 ifd
inner join epinephrine_in_part_0 nip
on ifd.patientunitstayid = nip.patientunitstayid
where ifd.drugname like 'Epinephrine%'
)
, epinephrine_in_part_2 as (
select nip.infusiondrugid
, nip.patientunitstayid
, nip.infusionoffset
, nip.drugname
, nip.unit_flag
, LAST_VALUE(nip.unit_flag IGNORE NULLS) OVER (partition by nip.patientunitstayid order by infusionoffset) as unit_flag_locf
, LAST_VALUE(nip.unit_flag IGNORE NULLS) OVER (partition by nip.patientunitstayid order by infusionoffset desc) as unit_flag_focb
from epinephrine_in_part_1 nip
)
, epinephrine_in_part_3 as (
select nip.infusiondrugid
, nip.patientunitstayid
, nip.infusionoffset
, nip.drugname
, nip.unit_flag
, coalesce(nip.unit_flag_locf, nip.unit_flag_focb) as unit_flag_new
from epinephrine_in_part_2 nip
)
, epinephrine_in_part_4 as (
select nip.infusiondrugid
, nip.patientunitstayid
, nip.infusionoffset
, nip.drugname
, nip.unit_flag
, case
when nip.unit_flag_new = 1 then 'Epinephrine'
else null end as drugname_new
from epinephrine_in_part_3 nip
)
, epinephrine_in_part_5 as ( -- exist the units of epinephrine ()
select nip.infusiondrugid
, nip.patientunitstayid
, nip.infusionoffset
, nip.drugname_new as drugname
, ifd.drugrate
, ifd.infusionrate
, ifd.drugamount
, ifd.volumeoffluid
, ifd.patientweight
from epinephrine_in_part_4 nip
inner join infusiondrug_new_0 ifd
on nip.infusiondrugid = ifd.infusiondrugid
)
, epinephrine_in_part_6 as (
select ifd.infusiondrugid
, ifd.patientunitstayid
, ifd.infusionoffset
, ifd.drugname as drugname
, ifd.drugrate
, ifd.infusionrate
, ifd.drugamount
, ifd.volumeoffluid
, ifd.patientweight
from infusiondrug_new_0 ifd
where ifd.drugname like 'Epinephrine%'
and ifd.patientunitstayid not in (select * from epinephrine_in_part_0)
)
, epinephrine_in_part as (
select distinct *
from (
select *
from epinephrine_in_part_5
union all
select *
from epinephrine_in_part_6
)
)
-- 2. Unified unit to mcg/kg/min
, epinephrine_1 as (
select idn.infusiondrugid
, idn.patientunitstayid
, idn.infusionoffset
, idn.drugname
, idn.infusionrate
, idn.drugamount
, idn.volumeoffluid
, idn.patientweight
, case
when idn.drugname in (
'EPINEPHrine(Adrenalin)STD 4 mg Sodium Chloride 0.9% 250 ml (mcg/min)' -- | 347
, 'EPINEPHrine(Adrenalin)STD 4 mg Sodium Chloride 0.9% 500 ml (mcg/min)' -- | 3
, 'EPINEPHrine(Adrenalin)MAX 30 mg Sodium Chloride 0.9% 250 ml (mcg/min)' -- | 223
, 'Epinephrine (mcg/min)' -- | 14660
, 'EPINEPHrine(Adrenalin)STD 7 mg Sodium Chloride 0.9% 250 ml (mcg/min)' -- | 4
)
then idn.drugrate/(coalesce(coalesce(wi.admissionweight, wi.dischargeweight),80)) -- median(admissionweight) = 80
when idn.drugname = 'Epinephrine (mcg/kg/min)' -- | 3101
then idn.drugrate
when idn.drugname = 'Epinephrine (mcg/hr)' -- | 3
then idn.drugrate/(60 * coalesce(coalesce(wi.admissionweight, wi.dischargeweight),80))
when idn.drugname = 'Epinephrine (mg/kg/min)' -- | 341
then 1000*idn.drugrate
when idn.drugname = 'Epinephrine (mg/hr)' -- | 9
then 1000*drugrate/(60 * coalesce(coalesce(wi.admissionweight, wi.dischargeweight),80))
else null end as rate_epinephrine
from epinephrine_in_part idn
left join `db_name.weight_icustay_detail_modify_eicu` wi
on idn.patientunitstayid = wi.patientunitstayid
where idn.drugname in (
'EPINEPHrine(Adrenalin)STD 4 mg Sodium Chloride 0.9% 500 ml (mcg/min)' -- | 3
, 'EPINEPHrine(Adrenalin)MAX 30 mg Sodium Chloride 0.9% 250 ml (mcg/min)' -- | 223
, 'Epinephrine (mcg/min)' -- | 14660
, 'EPINEPHrine(Adrenalin)STD 7 mg Sodium Chloride 0.9% 250 ml (mcg/min)' -- | 4
, 'Epinephrine (mcg/kg/min)'
, 'Epinephrine (mcg/hr)'
, 'Epinephrine (mg/kg/min)'
, 'Epinephrine (mg/hr)'
)
)
-- without considering : Epinephrine | 910 no value
, epinephrine_2 as (
select idn.infusiondrugid
, idn.patientunitstayid
, idn.infusionoffset
, idn.drugname
, idn.infusionrate
, idn.drugamount
, idn.volumeoffluid
, idn.patientweight
, case
when md.drugname = 'EPINEPHrine 8 MG in 250 mL NS' and idn.drugname = 'Epinephrine (ml/hr)' -- | 33272
then 1000*idn.drugrate*8/(250*60*coalesce(coalesce(wi.admissionweight, wi.dischargeweight),80))
else 1000*idn.drugrate*4/(250*60*coalesce(coalesce(wi.admissionweight, wi.dischargeweight),80))
end as rate_epinephrine
from epinephrine_in_part idn
left join `physionet-data.eicu_crd.medication` md
on idn.patientunitstayid = md.patientunitstayid
and md.drugordercancelled = 'No'
and md.drugname like 'Epinephrine%'
left join `db_name.weight_icustay_detail_modify_eicu` wi
on idn.patientunitstayid = wi.patientunitstayid
where idn.drugname = 'Epinephrine (ml/hr)' -- | 33272
and idn.infusionoffset >= md.drugstartoffset
and idn.infusionoffset <= md.drugstopoffset
)
, epinephrine as (
select distinct *
from (
select *
from epinephrine_1
union all
select *
from epinephrine_2
)
)
select infusiondrugid
, patientunitstayid
, infusionoffset
, drugname
, round(rate_epinephrine,4) as rate_epinephrine
, infusionrate
, drugamount
, volumeoffluid
, patientweight
from epinephrine
order by patientunitstayid
, infusionoffset;