——————————-view data——————————————
## data labs
##
## lab_
## Obs subject lab_test lab_date result
##
## 1 101 HGB 999 1.0
## 2 101 HGB 1000 1.1
## 3 101 HGB 1011 1.2
## 4 101 HGB 1029 1.3
## 5 101 HGB 1030 1.4
## 6 101 HGB 1031 1.5
## 7 101 HGB 1058 1.6
## 8 101 HGB 1064 1.7
## 9 101 HGB 1725 1.8
## 10 101 HGB 1735 1.9
##
##
##
## data dosing
##
## dose_
## Obs subject date
##
## 1 101 1001
##
##
##
## data lab_dosing (after sorting and merging)
##
## lab_ dose_
## Obs subject lab_test lab_date result date
##
## 1 101 HGB 999 1.0 1001
## 2 101 HGB 1000 1.1 1001
## 3 101 HGB 1011 1.2 1001
## 4 101 HGB 1029 1.3 1001
## 5 101 HGB 1030 1.4 1001
## 6 101 HGB 1031 1.5 1001
## 7 101 HGB 1058 1.6 1001
## 8 101 HGB 1064 1.7 1001
## 9 101 HGB 1725 1.8 1001
## 10 101 HGB 1735 1.9 1001
**** MERGE LAB DATA WITH DOSING DATE. CALCULATE STUDY DAY AND DEFINE VISIT WINDOWS BASED ON STUDY DAY.;
data lab_dosing;
merge labs(in = inlab)
dosing(keep = subject dose_date);
by subject;
**** KEEP RECORD IF IN LAB AND RESULT IS NOT MISSING.;
if inlab and lab_result ne .;
**** CALCULATE STUDY DAY.;
if lab_date < dose_date then
study_day = lab_date - dose_date;
else if lab_date >= dose_date then
study_day = lab_date - dose_date + 1;
**** SET VISIT WINDOWS AND TARGET DAY AS THE MIDDLE OF THE WINDOW.;
if . < study_day < 0 then
target = 0;
else if 25 <= study_day <= 35 then
target = 30;
else if 55 <= study_day <= 65 then
target = 60;
else if 350 <= study_day <= 380 then
target = 365;
else if 715 <= study_day <= 745 then
target = 730;
**** CALCULATE OBSERVATION DISTANCE FROM TARGET AND ABSOLUTE VALUE OF THAT DIFFERENCE.;
difference = study_day - target;
absdifference = abs(difference);
run;
**** SORT DATA BY DECREASING ABSOLUTE DIFFERENCE AND ACTUAL DIFFERENCE WITHIN A VISIT WINDOW.;
proc sort
data=lab_dosing;
by subject lab_test target absdifference difference;
run;
proc print data=lab_dosing;
title "data lab_dosing";
run;
## data lab_dosing
##
## a
## b
## s
## l d d
## a d s i i
## l l b o t f f
## s a a _ s u f f
## u b b r e d t e e
## b _ _ e _ y a r r
## j t d s d _ r e e
## O e e a u a d g n n
## b c s t l t a e c c
## s t t e t e y t e e
##
## 1 101 HGB 1011 1.2 1001 11 . . .
## 2 101 HGB 1000 1.1 1001 -1 0 -1 1
## 3 101 HGB 999 1.0 1001 -2 0 -2 2
## 4 101 HGB 1030 1.4 1001 30 30 0 0
## 5 101 HGB 1029 1.3 1001 29 30 -1 1
## 6 101 HGB 1031 1.5 1001 31 30 1 1
## 7 101 HGB 1058 1.6 1001 58 60 -2 2
## 8 101 HGB 1064 1.7 1001 64 60 4 4
## 9 101 HGB 1725 1.8 1001 725 730 -5 5
## 10 101 HGB 1735 1.9 1001 735 730 5 5
**** SELECT THE RECORD CLOSEST TO THE TARGET AS THE VISIT.
**** CHOOSE THE EARLIER OF THE TWO OBSERVATIONS IN THE EVENT OF A TIE ON BOTH SIDES OF THE TARGET.;
data lab_dosing_final;
set lab_dosing;
by subject lab_test target absdifference difference;
if first.target and target ne . then
visit_number = target;
run;
proc print data=lab_dosing_final noobs;
title "final data";
run;
## data lab_dosing 1
## 00:15 Monday, January 6, 2020
##
## a
## b
## s
## l d d
## a d s i i
## l l b o t f f
## s a a _ s u f f
## u b b r e d t e e
## b _ _ e _ y a r r
## j t d s d _ r e e
## O e e a u a d g n n
## b c s t l t a e c c
## s t t e t e y t e e
##
## 1 101 HGB 1011 1.2 1001 11 . . .
## 2 101 HGB 1000 1.1 1001 -1 0 -1 1
## 3 101 HGB 999 1.0 1001 -2 0 -2 2
## 4 101 HGB 1030 1.4 1001 30 30 0 0
## 5 101 HGB 1029 1.3 1001 29 30 -1 1
## 6 101 HGB 1031 1.5 1001 31 30 1 1
## 7 101 HGB 1058 1.6 1001 58 60 -2 2
## 8 101 HGB 1064 1.7 1001 64 60 4 4
## 9 101 HGB 1725 1.8 1001 725 730 -5 5
## 10 101 HGB 1735 1.9 1001 735 730 5 5
##
##
##
## final data
##
## a
## b v
## s i
## l d d s
## a d s i i i
## l l b o t f f t
## s a a _ s u f f _
## u b b r e d t e e n
## b _ _ e _ y a r r u
## j t d s d _ r e e m
## e e a u a d g n n b
## c s t l t a e c c e
## t t e t e y t e e r
##
## 101 HGB 1011 1.2 1001 11 . . . .
## 101 HGB 1000 1.1 1001 -1 0 -1 1 0
## 101 HGB 999 1.0 1001 -2 0 -2 2 .
## 101 HGB 1030 1.4 1001 30 30 0 0 30
## 101 HGB 1029 1.3 1001 29 30 -1 1 .
## 101 HGB 1031 1.5 1001 31 30 1 1 .
## 101 HGB 1058 1.6 1001 58 60 -2 2 60
## 101 HGB 1064 1.7 1001 64 60 4 4 .
## 101 HGB 1725 1.8 1001 725 730 -5 5 730
## 101 HGB 1735 1.9 1001 735 730 5 5 .