-
Notifications
You must be signed in to change notification settings - Fork 8
Expand file tree
/
Copy pathdopamine_info_eicu.sql
More file actions
225 lines (206 loc) · 6.92 KB
/
dopamine_info_eicu.sql
File metadata and controls
225 lines (206 loc) · 6.92 KB
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
217
218
219
220
221
222
223
224
225
drop table if exists `db_name.dopamine_info_eicu`;
create table `db_name.dopamine_info_eicu` as
--By Xiaoli Liu
--2018.12.20 & 2021.09.07
-- get all of dopamine information with drugrate units of mcg/kg/min
-- 1. add information of unit with 'Dopamine ()'
-- process of 'Dopamine ()' | 5020
-- we notice that 'drugname = 'Norepinephrine ()'' 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 '%dopamine%'
or drugname like '%Dopamine%'
or drugname like '%DOPamine%'
)
and drugrate not in (
'OFF'
, 'ERROR'
, 'UD'
, ''
)
and drugrate not like '%Time Correction%'
)
, dopamine_in_part_0 as (
select patientunitstayid
from infusiondrug_new_0
where drugname = 'Dopamine ()' -- | 5020
group by patientunitstayid
)
, dopamine_in_part_1 as (
select ifd.infusiondrugid
, ifd.patientunitstayid
, ifd.infusionoffset
, ifd.drugname
, case
when ifd.drugname = 'Dopamine (mcg/kg/hr)' then 1
when ifd.drugname = 'Dopamine (mcg/kg/min)' then 2
when ifd.drugname = 'Dopamine (ml/hr)' then 3
when ifd.drugname = 'Dopamine' then 4
else null end as unit_flag -- the imputation function is fit for float value
from infusiondrug_new_0 ifd
inner join dopamine_in_part_0 nip
on ifd.patientunitstayid = nip.patientunitstayid
where ifd.drugname like '%Dopamine%'
)
, dopamine_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 dopamine_in_part_1 nip
)
, dopamine_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 dopamine_in_part_2 nip
)
, dopamine_in_part_4 as (
select nip.infusiondrugid
, nip.patientunitstayid
, nip.infusionoffset
, nip.drugname
, nip.unit_flag
, case
when nip.unit_flag_new = 1 then 'Dopamine (mcg/kg/hr)'
when nip.unit_flag_new = 2 then 'Dopamine (mcg/kg/min)'
when nip.unit_flag_new = 3 then 'Dopamine (ml/hr)'
when nip.unit_flag_new = 4 then 'Dopamine'
else null end as drugname_new
from dopamine_in_part_3 nip
)
, dopamine_in_part_5 as ( -- exist the units of Dopamine ()
select nip.infusiondrugid
, nip.patientunitstayid
, nip.infusionoffset
, nip.drugname_new as drugname
, ifd.drugrate
, ifd.infusionrate
, ifd.drugamount
, ifd.volumeoffluid
, ifd.patientweight
from dopamine_in_part_4 nip
inner join infusiondrug_new_0 ifd
on nip.infusiondrugid = ifd.infusiondrugid
)
, dopamine_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 '%dopamine%'
and ifd.patientunitstayid not in (select * from dopamine_in_part_0)
)
, dopamine_in_part as (
select distinct *
from (
select *
from dopamine_in_part_5
union all
select *
from dopamine_in_part_6
)
)
-- 2. Unified unit to mcg/kg/min
, dopamine_1 as (
select idn.infusiondrugid
, idn.patientunitstayid
, idn.infusionoffset
, idn.drugname
, idn.infusionrate
, idn.drugamount
, idn.volumeoffluid
, idn.patientweight
, case
when idn.drugname in (
'DOPamine MAX 800 mg Dextrose 5% 250 ml Premix (mcg/kg/min)' -- | 151
, 'dopamine (mcg/kg/min)' -- | 21
, 'DOPamine STD 15 mg Dextrose 5% 250 ml Premix (mcg/kg/min)' -- | 2
, 'Dopamine (mcg/kg/min)' -- | 29215
, 'DOPamine STD 400 mg Dextrose 5% 500 ml Premix (mcg/kg/min)' -- | 2
, 'DOPamine STD 400 mg Dextrose 5% 250 ml Premix (mcg/kg/min)' -- | 544
)
then idn.drugrate
when idn.drugname = 'Dopamine (mcg/kg/hr)' -- | 5
then idn.drugrate/60
when idn.drugname = 'Dopamine (mcg/hr)' -- | 8
then idn.drugrate/(60 * coalesce(coalesce(wi.admissionweight, wi.dischargeweight),80))
when idn.drugname = 'Dopamine (mcg/min)' -- | 3
then idn.drugrate/(coalesce(coalesce(wi.admissionweight, wi.dischargeweight),80))
when idn.drugname = 'Dopamine (mg/hr)' -- | 2
then 1000 * idn.drugrate/(60 * coalesce(coalesce(wi.admissionweight, wi.dischargeweight),80))
when idn.drugname = 'Dopamine (nanograms/kg/min)' -- | 1
then idn.drugrate/1000
else null end as rate_dopamine
from dopamine_in_part idn
left join `db_name.weight_icustay_detail_modify_eicu` wi
on idn.patientunitstayid = wi.patientunitstayid
where idn.drugname in (
'DOPamine MAX 800 mg Dextrose 5% 250 ml Premix (mcg/kg/min)' -- | 151
, 'dopamine (mcg/kg/min)' -- | 21
, 'DOPamine STD 15 mg Dextrose 5% 250 ml Premix (mcg/kg/min)' -- | 2
, 'Dopamine (mcg/kg/min)' -- | 29215
, 'DOPamine STD 400 mg Dextrose 5% 500 ml Premix (mcg/kg/min)' -- | 2
, 'DOPamine STD 400 mg Dextrose 5% 250 ml Premix (mcg/kg/min)' -- | 544
, 'Dopamine (mcg/kg/hr)' -- | 5
, 'Dopamine (mcg/hr)' -- | 8
, 'Dopamine (mcg/min)' -- | 3
, 'Dopamine (mg/hr)' -- | 2
, 'Dopamine (nanograms/kg/min)' -- | 2
)
)
-- without considering Dopamine 1684
, dopamine_2 as (
select idn.infusiondrugid
, idn.patientunitstayid
, idn.infusionoffset
, idn.drugname
, idn.infusionrate
, idn.drugamount
, idn.volumeoffluid
, idn.patientweight
, 1000*idn.drugrate*4/(250*60*coalesce(coalesce(wi.admissionweight, wi.dischargeweight),80)) as rate_dopamine -- set mL available : 250ml, maybe not right
from dopamine_in_part idn
left join `db_name.weight_icustay_detail_modify_eicu` wi
on idn.patientunitstayid = wi.patientunitstayid
where drugname = 'Dopamine (ml/hr)' -- | 56099
)
, dopamine as (
select distinct *
from (
select *
from dopamine_1
union all
select *
from dopamine_2
)
)
select infusiondrugid
, patientunitstayid
, infusionoffset
, drugname
, round(rate_dopamine,4) as rate_dopamine
, infusionrate
, drugamount
, volumeoffluid
, patientweight
from dopamine
order by patientunitstayid, infusionoffset;