Deriving a Visit Based on Visit Windowing

——————————-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

Calculating study day and difference


**** 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

CHOOSE THE EARLIER OF THE TWO OBSERVATIONS IN THE EVENT OF A TIE ON BOTH SIDES OF THE TARGET

**** 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      .