-
Notifications
You must be signed in to change notification settings - Fork 1
/
Estimated_Glomerular_Filtration_Rate_Outcomes.sas
216 lines (172 loc) · 5.14 KB
/
Estimated_Glomerular_Filtration_Rate_Outcomes.sas
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
/*************** Descriptives with drugs *************************/
options compress=yes;run;
libname data '/data/dart/2014/ORD_AlAly_201403107D/Andrew/Projects/SGLT2/Data';
libname egfr '/data/dart/2014/ORD_AlAly_201403107D/Clean Data';
proc sort data=egfr.egfr2018;
by scrssn;
run;
proc sort data=data.sglt2_first;
by scrssn;
run;
data merger;
merge data.sglt2_first egfr.egfr2018;
by scrssn;
run;
*separate lab test dates before Rx date and after;
data a b;
set merger;
if DispensedDate ^= ' ' and res_date < DispensedDate then output a;
else if DispensedDate ^= ' ' and res_date > DispensedDate then output b;
run;
proc sort data=a;
by scrssn res_date;
run;
proc sort data=b;
by scrssn res_date;
run;
*closest lab test date to Rx prescription;
data c;
set a;
by scrssn res_date;
if last.scrssn;
run;
*last lab test date after Rx prescription;
data d;
set b;
by scrssn res_date;
if last.scrssn;
run;
*only records where there is a lab value before and after the drug was received;
data e;
set c d;
by scrssn;
if first.scrssn ^= last.scrssn;
run;
/*************************** DOUBLING OF SERUM CREATININE ******************/
*check if serum creatinine doubled;
data sCr1;
set e;
by scrssn;
if lab_res/lag(lab_res) >= 2 then sCr = 1;
else sCr=0;
fuptime = res_date - DispensedDate;
if last.scrssn;
keep scrssn drugclass DispensedDate fuptime sCr egfr;
run;
*reorder variables;
data data.sCr1;
retain scrssn drugclass DispensedDate fuptime sCr egfr;
set sCr1;
run;
proc sort data=data.sCr1;
by drugclass;
run;
proc means data=data.sCr1;
by drugclass;
var fuptime;
run;
proc sort data=data.sCr1;
by scrssn;
run;
proc sort data=data.sglt2_outcomes;
by scrssn;
run;
*merge with full sglt2 outcomes;
data data.sglt2_outcomes;
merge data.sglt2_outcomes data.sCr1;
by scrssn;
if DispensedDate ^= . ;
if sCr = . then sCr = 0;
double_serum_creatinine = strip(put(sCr, 1.));
rename fuptime=double_serum_creatinine_fuptime;
run;
proc sort data=data.sglt2_outcomes;
by drugclass double_serum_creatinine;
run;
proc means data=data.sglt2_outcomes;
by drugclass double_serum_creatinine;
var double_serum_creatinine_fuptime;
run;
proc freq data=data.sglt2_outcomes;
table drugclass*double_serum_creatinine;
run;
/********************* 30% DECLINE IN eGFR VALUES ***********************/
options compress=yes;run;
libname data '/data/dart/2014/ORD_AlAly_201403107D/Andrew/Projects/SGLT2/Data';
*check if 30% decline in eGFR;
data egfr1;
set e;
by scrssn;
if egfr <= 0.7*lag(egfr) then egfr30 = 1;
else egfr30=0;
fuptime = res_date - DispensedDate;
if last.scrssn;
keep scrssn drugclass DispensedDate fuptime egfr30 egfr;
run;
*reorder variables;
data data.egfr1;
retain scrssn drugclass DispensedDate fuptime egfr30 egfr;
set egfr1;
run;
proc sort data=data.egfr1;
by scrssn;
run;
proc sort data=data.sglt2_outcomes;
by scrssn;
run;
*merge with full sglt2 outcomes;
data data.sglt2_outcomes;
merge data.sglt2_outcomes data.egfr1;
by scrssn;
if DispensedDate ^= . ;
if egfr30 = . then egfr30 = 0;
egfr30_decline = strip(put(egfr30, 1.));
rename fuptime=egfr30_decline_fuptime;
drop sCr egfr30 fuptime;
run;
data data.sglt2_outcomes;
retain scrssn drugclass DispensedDate alb_incident_fuptime
alb_incident alb_progression_fuptime alb_progression
egfr double_serum_creatinine_fuptime double_serum_creatinine
egfr30_decline_fuptime egfr30_decline;
set data.sglt2_outcomes;
run;
/********************* COMBINED OUTCOMES ***************************/
*double serum creatinine and egfr <=45;
*30% decline in egfr and egfr <=60;
data data.sglt2_outcomes;
set data.sglt2_outcomes;
double_sCr_egfr45_fuptime = double_serum_creatinine_fuptime;
if double_serum_creatinine = '1' and egfr <= 45 then double_sCr_egfr45 = '1';
else double_sCr_egfr45 = '0';
egfr_decline_egfr60_fuptime = egfr30_decline_fuptime;
if egfr30_decline = '1' and egfr <= 60 then egfr_decline_egfr60 = '1';
else egfr_decline_egfr60 = '0';
run;
proc sort data=data.sglt2_outcomes;
by drugclass;
run;
proc means data=data.sglt2_outcomes (where=((fy=2015 or fy=2016 or fy=2017 or fy=2018) and (double_sCr_egfr45='1')));
by fy drugclass;
var double_sCr_egfr45_fuptime;
run;
proc means data=data.sglt2_outcomes (where=((fy=2015 or fy=2016 or fy=2017 or fy=2018) and (egfr_decline_egfr60='1')));
by fy drugclass;
var egfr_decline_egfr60_fuptime;
run;
proc freq data=data.sglt2_outcomes (where=(fy=2016 or fy=2017 or fy=2018));
table drugclass*double_sCr_egfr45*fy / nopercent norow;
table drugclass*egfr_decline_egfr60*fy / nopercent norow;
run;
/******************** RENAL OUTCOMES COMBINED *****************************/
data data.sglt2_outcomes;
set data.sglt2_outcomes;
if egfr_decline_egfr60 = '1' or alb_incident = '1' or alb_progression = '1' then renal = '1';
else renal = '0';
run;
proc sort data=data.sglt2_outcomes;
by drugclass;
run;
proc freq data=data.sglt2_outcomes (where=(fy=2016 or fy=2017 or fy=2018));
table drugclass*renal*fy / nopercent norow;
run;