DAPA01 NCA

Author

Mohammed Shas

Import Packages

using DataFramesMeta
using ReadStatTables
using Statistics
using Dates
include("con-fun.jl")
find_next_nominal_time (generic function with 1 method)

Define the path and load the data

path = joinpath(@__DIR__, "..", "Datasets") |> normpath
pc = @chain readstat(joinpath(path, "pc1.xpt")) DataFrame convert_blanks_to_missing
ex = @chain readstat(joinpath(path, "ex1.xpt")) DataFrame convert_blanks_to_missing
first(ex, 5)
5×15 DataFrame
Row STUDYID DOMAIN USUBJID EXSEQ EXTRT EXDOSE EXDOSU EXDOSFRM EXDOSFRQ EXROUTE VISITNUM VISIT VISITDY EXSTDTC EXSTDY
String7 String3 String15 Float64 String15 Float64 String3 String15 String7 String15 Float64 String15 Float64 String31 Float64
1 DAPA01 EX DAPA01-001 1.0 Dapagliflozin 5.0 mg Injection ONCE Intravenous 2.0 Period 1 Day 1 1.0 2022-06-10 09:30:00 1.0
2 DAPA01 EX DAPA01-001 2.0 Dapagliflozin 5.0 mg Capsule ONCE Oral 3.0 Period 2 Day 1 8.0 2022-06-17 09:30:00 8.0
3 DAPA01 EX DAPA01-001 3.0 Dapagliflozin 10.0 mg Capsule ONCE Oral 4.0 Period 3 Day 1 15.0 2022-06-25 09:30:00 15.0
4 DAPA01 EX DAPA01-001 4.0 Dapagliflozin 25.0 mg Capsule ONCE Oral 5.0 Period 4 Day 1 22.0 2022-07-02 11:30:00 22.0
5 DAPA01 EX DAPA01-002 1.0 Dapagliflozin 5.0 mg Injection ONCE Intravenous 2.0 Period 1 Day 1 1.0 2022-03-12 09:08:00 1.0

Lookup table

param_lookup = DataFrame(
    PCTESTCD = ["DAPA", "DOSE"],
    PARAMCD = ["DAPA", "DOSE"],
    PARAM = ["Pharmacokinetic concentration of Dapagliflozin", "Dapagliflozin Dose"],
    PARAMN = [1, 2]
)

dose_freq_lookup = DataFrame(
    CDISC_VALUE = ["QD", "BID", "TID", "QID"],
    HOURS_BETWEEN_DOSES = [24, 12, 8, 6]
)
4×2 DataFrame
Row CDISC_VALUE HOURS_BETWEEN_DOSES
String Int64
1 QD 24
2 BID 12
3 TID 8
4 QID 6
pc = leftjoin(pc, ex[:, [:USUBJID, :VISIT, :VISITDY]], on = [:USUBJID, :VISIT])
first(pc, 5)
5×20 DataFrame
Row STUDYID DOMAIN USUBJID PCSEQ PCTESTCD PCTEST PCORRES PCORRESU PCSTRESC PCSTRESN PCSTRESU PCSPEC PCLLOQ VISIT VISITNUM PCDTC PCDY PCTPT PCTPTNUM VISITDY
String7 String3 String15 Float64 String7 String15 String15 String7 String15 Float64 String7 String7 String15 String15 Float64 String31 Float64 String31 Float64 Float64?
1 DAPA01 PC DAPA01-001 1.0 DAPA Dapagliflozin 157.021 ng/mL 157.021 157.021 ng/mL plasma 0.1 ng/mL Period 1 Day 1 2.0 2022-06-10 09:30:00 1.0 0-HR POSTDOSE 0.0 1.0
2 DAPA01 PC DAPA01-001 2.0 DAPA Dapagliflozin 141.892 ng/mL 141.892 141.892 ng/mL plasma 0.1 ng/mL Period 1 Day 1 2.0 2022-06-10 09:33:00 1.0 0.05-HR POSTDOSE 0.05 1.0
3 DAPA01 PC DAPA01-001 3.0 DAPA Dapagliflozin 116.228 ng/mL 116.228 116.228 ng/mL plasma 0.1 ng/mL Period 1 Day 1 2.0 2022-06-10 09:51:00 1.0 0.35-HR POSTDOSE 0.35 1.0
4 DAPA01 PC DAPA01-001 4.0 DAPA Dapagliflozin 109.353 ng/mL 109.353 109.353 ng/mL plasma 0.1 ng/mL Period 1 Day 1 2.0 2022-06-10 10:00:00 1.0 0.5-HR POSTDOSE 0.5 1.0
5 DAPA01 PC DAPA01-001 5.0 DAPA Dapagliflozin 66.4814 ng/mL 66.4814 66.4814 ng/mL plasma 0.1 ng/mL Period 1 Day 1 2.0 2022-06-10 10:15:00 1.0 0.75-HR POSTDOSE 0.75 1.0

PC data preparation

pc_prep = @chain pc begin
    @rtransform :ADTM = parse_datetime_column(:PCDTC)
    @rtransform :ADT = isnothing(:ADTM) || ismissing(:ADTM) ? missing : Date(:ADTM)
    @rtransform :ATM = isnothing(:ADTM) || ismissing(:ADTM) ? missing : Time(:ADTM)

    
    @rtransform begin
        :EVID = 0
        :DRUG = :PCTEST
        :NFRLT = :VISITDY == 1 ? 0 : 24 * :VISITDY 
    end
end
first(pc_prep, 5)
5×26 DataFrame
Row STUDYID DOMAIN USUBJID PCSEQ PCTESTCD PCTEST PCORRES PCORRESU PCSTRESC PCSTRESN PCSTRESU PCSPEC PCLLOQ VISIT VISITNUM PCDTC PCDY PCTPT PCTPTNUM VISITDY ADTM ADT ATM EVID DRUG NFRLT
String7 String3 String15 Float64 String7 String15 String15 String7 String15 Float64 String7 String7 String15 String15 Float64 String31 Float64 String31 Float64 Float64? DateTime Date Time Int64 String15 Real
1 DAPA01 PC DAPA01-001 1.0 DAPA Dapagliflozin 157.021 ng/mL 157.021 157.021 ng/mL plasma 0.1 ng/mL Period 1 Day 1 2.0 2022-06-10 09:30:00 1.0 0-HR POSTDOSE 0.0 1.0 2022-06-10T09:30:00 2022-06-10 09:30:00 0 Dapagliflozin 0
2 DAPA01 PC DAPA01-001 2.0 DAPA Dapagliflozin 141.892 ng/mL 141.892 141.892 ng/mL plasma 0.1 ng/mL Period 1 Day 1 2.0 2022-06-10 09:33:00 1.0 0.05-HR POSTDOSE 0.05 1.0 2022-06-10T09:33:00 2022-06-10 09:33:00 0 Dapagliflozin 0
3 DAPA01 PC DAPA01-001 3.0 DAPA Dapagliflozin 116.228 ng/mL 116.228 116.228 ng/mL plasma 0.1 ng/mL Period 1 Day 1 2.0 2022-06-10 09:51:00 1.0 0.35-HR POSTDOSE 0.35 1.0 2022-06-10T09:51:00 2022-06-10 09:51:00 0 Dapagliflozin 0
4 DAPA01 PC DAPA01-001 4.0 DAPA Dapagliflozin 109.353 ng/mL 109.353 109.353 ng/mL plasma 0.1 ng/mL Period 1 Day 1 2.0 2022-06-10 10:00:00 1.0 0.5-HR POSTDOSE 0.5 1.0 2022-06-10T10:00:00 2022-06-10 10:00:00 0 Dapagliflozin 0
5 DAPA01 PC DAPA01-001 5.0 DAPA Dapagliflozin 66.4814 ng/mL 66.4814 66.4814 ng/mL plasma 0.1 ng/mL Period 1 Day 1 2.0 2022-06-10 10:15:00 1.0 0.75-HR POSTDOSE 0.75 1.0 2022-06-10T10:15:00 2022-06-10 10:15:00 0 Dapagliflozin 0

EX data preparation

ex_prep = @chain ex begin
    @rsubset :EXDOSE > 0

    @rtransform :EXENDTC = :EXSTDTC
    @rtransform :ASTDTM = parse_datetime_column(:EXSTDTC)
    @rtransform @passmissing :AENDTM = parse_datetime_column(:EXENDTC)
    @rtransform :ASTDT = Date(:ASTDTM)
    @rtransform @passmissing :AENDT = Date(:AENDTM)


    @rtransform :AENDTM = ismissing(:AENDTM) ? :ASTDTM : :AENDTM
    @rtransform :ADTM = :ASTDTM

    @rtransform begin
        :EVID = 1
        :NFRLT = :VISITDY == 1 ? 0 : 24 * :VISITDY
    end
end
first(ex_prep, 5)
5×23 DataFrame
Row STUDYID DOMAIN USUBJID EXSEQ EXTRT EXDOSE EXDOSU EXDOSFRM EXDOSFRQ EXROUTE VISITNUM VISIT VISITDY EXSTDTC EXSTDY EXENDTC ASTDTM AENDTM ASTDT AENDT ADTM EVID NFRLT
String7 String3 String15 Float64 String15 Float64 String3 String15 String7 String15 Float64 String15 Float64 String31 Float64 String31 DateTime DateTime Date Date DateTime Int64 Real
1 DAPA01 EX DAPA01-001 1.0 Dapagliflozin 5.0 mg Injection ONCE Intravenous 2.0 Period 1 Day 1 1.0 2022-06-10 09:30:00 1.0 2022-06-10 09:30:00 2022-06-10T09:30:00 2022-06-10T09:30:00 2022-06-10 2022-06-10 2022-06-10T09:30:00 1 0
2 DAPA01 EX DAPA01-001 2.0 Dapagliflozin 5.0 mg Capsule ONCE Oral 3.0 Period 2 Day 1 8.0 2022-06-17 09:30:00 8.0 2022-06-17 09:30:00 2022-06-17T09:30:00 2022-06-17T09:30:00 2022-06-17 2022-06-17 2022-06-17T09:30:00 1 192.0
3 DAPA01 EX DAPA01-001 3.0 Dapagliflozin 10.0 mg Capsule ONCE Oral 4.0 Period 3 Day 1 15.0 2022-06-25 09:30:00 15.0 2022-06-25 09:30:00 2022-06-25T09:30:00 2022-06-25T09:30:00 2022-06-25 2022-06-25 2022-06-25T09:30:00 1 360.0
4 DAPA01 EX DAPA01-001 4.0 Dapagliflozin 25.0 mg Capsule ONCE Oral 5.0 Period 4 Day 1 22.0 2022-07-02 11:30:00 22.0 2022-07-02 11:30:00 2022-07-02T11:30:00 2022-07-02T11:30:00 2022-07-02 2022-07-02 2022-07-02T11:30:00 1 528.0
5 DAPA01 EX DAPA01-002 1.0 Dapagliflozin 5.0 mg Injection ONCE Intravenous 2.0 Period 1 Day 1 1.0 2022-03-12 09:08:00 1.0 2022-03-12 09:08:00 2022-03-12T09:08:00 2022-03-12T09:08:00 2022-03-12 2022-03-12 2022-03-12T09:08:00 1 0

Expanding Dose

ex_exp = @chain ex_prep begin
   leftjoin(dose_freq_lookup, on = [:EXDOSFRQ => :CDISC_VALUE])
end   
first(ex_exp, 5)
5×24 DataFrame
Row STUDYID DOMAIN USUBJID EXSEQ EXTRT EXDOSE EXDOSU EXDOSFRM EXDOSFRQ EXROUTE VISITNUM VISIT VISITDY EXSTDTC EXSTDY EXENDTC ASTDTM AENDTM ASTDT AENDT ADTM EVID NFRLT HOURS_BETWEEN_DOSES
String7 String3 String15 Float64 String15 Float64 String3 String15 String7 String15 Float64 String15 Float64 String31 Float64 String31 DateTime DateTime Date Date DateTime Int64 Real Int64?
1 DAPA01 EX DAPA01-001 1.0 Dapagliflozin 5.0 mg Injection ONCE Intravenous 2.0 Period 1 Day 1 1.0 2022-06-10 09:30:00 1.0 2022-06-10 09:30:00 2022-06-10T09:30:00 2022-06-10T09:30:00 2022-06-10 2022-06-10 2022-06-10T09:30:00 1 0 missing
2 DAPA01 EX DAPA01-001 2.0 Dapagliflozin 5.0 mg Capsule ONCE Oral 3.0 Period 2 Day 1 8.0 2022-06-17 09:30:00 8.0 2022-06-17 09:30:00 2022-06-17T09:30:00 2022-06-17T09:30:00 2022-06-17 2022-06-17 2022-06-17T09:30:00 1 192.0 missing
3 DAPA01 EX DAPA01-001 3.0 Dapagliflozin 10.0 mg Capsule ONCE Oral 4.0 Period 3 Day 1 15.0 2022-06-25 09:30:00 15.0 2022-06-25 09:30:00 2022-06-25T09:30:00 2022-06-25T09:30:00 2022-06-25 2022-06-25 2022-06-25T09:30:00 1 360.0 missing
4 DAPA01 EX DAPA01-001 4.0 Dapagliflozin 25.0 mg Capsule ONCE Oral 5.0 Period 4 Day 1 22.0 2022-07-02 11:30:00 22.0 2022-07-02 11:30:00 2022-07-02T11:30:00 2022-07-02T11:30:00 2022-07-02 2022-07-02 2022-07-02T11:30:00 1 528.0 missing
5 DAPA01 EX DAPA01-002 1.0 Dapagliflozin 5.0 mg Injection ONCE Intravenous 2.0 Period 1 Day 1 1.0 2022-03-12 09:08:00 1.0 2022-03-12 09:08:00 2022-03-12T09:08:00 2022-03-12T09:08:00 2022-03-12 2022-03-12 2022-03-12T09:08:00 1 0 missing
ex_exp1 = @chain ex_exp begin

    @rtransform :AVISIT = "Day $(:VISIT)"
    @rtransform :DRUG = :EXTRT
    @rtransform :ADT = Date(:ADTM)
    @rtransform :ASTTM = Time(:ASTDTM)
    @rtransform :AENTM = Time(:AENDTM)
    # @rtransform :ADY = Dates.value(:ADT - :TRTSDT) + 1
end
first(ex_exp1, 5)
5×29 DataFrame
Row STUDYID DOMAIN USUBJID EXSEQ EXTRT EXDOSE EXDOSU EXDOSFRM EXDOSFRQ EXROUTE VISITNUM VISIT VISITDY EXSTDTC EXSTDY EXENDTC ASTDTM AENDTM ASTDT AENDT ADTM EVID NFRLT HOURS_BETWEEN_DOSES AVISIT DRUG ADT ASTTM AENTM
String7 String3 String15 Float64 String15 Float64 String3 String15 String7 String15 Float64 String15 Float64 String31 Float64 String31 DateTime DateTime Date Date DateTime Int64 Real Int64? String String15 Date Time Time
1 DAPA01 EX DAPA01-001 1.0 Dapagliflozin 5.0 mg Injection ONCE Intravenous 2.0 Period 1 Day 1 1.0 2022-06-10 09:30:00 1.0 2022-06-10 09:30:00 2022-06-10T09:30:00 2022-06-10T09:30:00 2022-06-10 2022-06-10 2022-06-10T09:30:00 1 0 missing Day Period 1 Day 1 Dapagliflozin 2022-06-10 09:30:00 09:30:00
2 DAPA01 EX DAPA01-001 2.0 Dapagliflozin 5.0 mg Capsule ONCE Oral 3.0 Period 2 Day 1 8.0 2022-06-17 09:30:00 8.0 2022-06-17 09:30:00 2022-06-17T09:30:00 2022-06-17T09:30:00 2022-06-17 2022-06-17 2022-06-17T09:30:00 1 192.0 missing Day Period 2 Day 1 Dapagliflozin 2022-06-17 09:30:00 09:30:00
3 DAPA01 EX DAPA01-001 3.0 Dapagliflozin 10.0 mg Capsule ONCE Oral 4.0 Period 3 Day 1 15.0 2022-06-25 09:30:00 15.0 2022-06-25 09:30:00 2022-06-25T09:30:00 2022-06-25T09:30:00 2022-06-25 2022-06-25 2022-06-25T09:30:00 1 360.0 missing Day Period 3 Day 1 Dapagliflozin 2022-06-25 09:30:00 09:30:00
4 DAPA01 EX DAPA01-001 4.0 Dapagliflozin 25.0 mg Capsule ONCE Oral 5.0 Period 4 Day 1 22.0 2022-07-02 11:30:00 22.0 2022-07-02 11:30:00 2022-07-02T11:30:00 2022-07-02T11:30:00 2022-07-02 2022-07-02 2022-07-02T11:30:00 1 528.0 missing Day Period 4 Day 1 Dapagliflozin 2022-07-02 11:30:00 11:30:00
5 DAPA01 EX DAPA01-002 1.0 Dapagliflozin 5.0 mg Injection ONCE Intravenous 2.0 Period 1 Day 1 1.0 2022-03-12 09:08:00 1.0 2022-03-12 09:08:00 2022-03-12T09:08:00 2022-03-12T09:08:00 2022-03-12 2022-03-12 2022-03-12T09:08:00 1 0 missing Day Period 1 Day 1 Dapagliflozin 2022-03-12 09:08:00 09:08:00

Find first dose per treatment per subject

adpc_first_dose = @chain ex_exp1 begin

    @rsubset :EXDOSE > 0 && !ismissing(:ASTDTM)

    combine(groupby(_,[:STUDYID, :USUBJID, :DRUG]),:ASTDTM => (x->minimum(x)) => :FANLDTM)

    leftjoin(pc_prep,_,on = [:STUDYID, :USUBJID, :DRUG], makeunique=true)

    @rsubset !ismissing(:FANLDTM)

    @rtransform :AVISITN = (:NFRLT ÷ 24) + 1
    @rtransform :AVISIT = "Day $(:VISIT)"
end
first(adpc_first_dose, 5)
5×29 DataFrame
Row STUDYID DOMAIN USUBJID PCSEQ PCTESTCD PCTEST PCORRES PCORRESU PCSTRESC PCSTRESN PCSTRESU PCSPEC PCLLOQ VISIT VISITNUM PCDTC PCDY PCTPT PCTPTNUM VISITDY ADTM ADT ATM EVID DRUG NFRLT FANLDTM AVISITN AVISIT
String7 String3 String15 Float64 String7 String15 String15 String7 String15 Float64 String7 String7 String15 String15 Float64 String31 Float64 String31 Float64 Float64? DateTime Date Time Int64 String15 Real DateTime? Real String
1 DAPA01 PC DAPA01-001 1.0 DAPA Dapagliflozin 157.021 ng/mL 157.021 157.021 ng/mL plasma 0.1 ng/mL Period 1 Day 1 2.0 2022-06-10 09:30:00 1.0 0-HR POSTDOSE 0.0 1.0 2022-06-10T09:30:00 2022-06-10 09:30:00 0 Dapagliflozin 0 2022-06-10T09:30:00 1 Day Period 1 Day 1
2 DAPA01 PC DAPA01-001 2.0 DAPA Dapagliflozin 141.892 ng/mL 141.892 141.892 ng/mL plasma 0.1 ng/mL Period 1 Day 1 2.0 2022-06-10 09:33:00 1.0 0.05-HR POSTDOSE 0.05 1.0 2022-06-10T09:33:00 2022-06-10 09:33:00 0 Dapagliflozin 0 2022-06-10T09:30:00 1 Day Period 1 Day 1
3 DAPA01 PC DAPA01-001 3.0 DAPA Dapagliflozin 116.228 ng/mL 116.228 116.228 ng/mL plasma 0.1 ng/mL Period 1 Day 1 2.0 2022-06-10 09:51:00 1.0 0.35-HR POSTDOSE 0.35 1.0 2022-06-10T09:51:00 2022-06-10 09:51:00 0 Dapagliflozin 0 2022-06-10T09:30:00 1 Day Period 1 Day 1
4 DAPA01 PC DAPA01-001 4.0 DAPA Dapagliflozin 109.353 ng/mL 109.353 109.353 ng/mL plasma 0.1 ng/mL Period 1 Day 1 2.0 2022-06-10 10:00:00 1.0 0.5-HR POSTDOSE 0.5 1.0 2022-06-10T10:00:00 2022-06-10 10:00:00 0 Dapagliflozin 0 2022-06-10T09:30:00 1 Day Period 1 Day 1
5 DAPA01 PC DAPA01-001 5.0 DAPA Dapagliflozin 66.4814 ng/mL 66.4814 66.4814 ng/mL plasma 0.1 ng/mL Period 1 Day 1 2.0 2022-06-10 10:15:00 1.0 0.75-HR POSTDOSE 0.75 1.0 2022-06-10T10:15:00 2022-06-10 10:15:00 0 Dapagliflozin 0 2022-06-10T09:30:00 1 Day Period 1 Day 1

Find Previous Dose

Find Next Dose

adpc_nom_next = @chain adpc_first_dose begin
    find_previous_dose(ex_exp1)
    find_next_dose(ex_exp1)
    find_previous_nominal_time(ex_exp1)
    find_next_nominal_time(ex_exp1)
end
first(adpc_nom_next, 5)
5×39 DataFrame
Row STUDYID DOMAIN USUBJID PCSEQ PCTESTCD PCTEST PCORRES PCORRESU PCSTRESC PCSTRESN PCSTRESU PCSPEC PCLLOQ VISIT VISITNUM PCDTC PCDY PCTPT PCTPTNUM VISITDY ADTM ADT ATM EVID DRUG NFRLT FANLDTM AVISITN AVISIT AVISIT_prev ADTM_prev AENDTM_prev EXDOSE_prev EXDOSE_next AVISIT_next ADTM_next AENDTM_next NFRLT_prev NFRLT_next
String7 String3 String Float64 String7 String15 String15 String7 String15 Float64 String7 String7 String15 String15 Float64 String31 Float64 String31 Float64 Float64? DateTime Date Time Int64 String15 Real DateTime? Real String String? DateTime? DateTime? Float64? Float64? String? DateTime? DateTime? Float64? Float64
1 DAPA01 PC DAPA01-001 1.0 DAPA Dapagliflozin 157.021 ng/mL 157.021 157.021 ng/mL plasma 0.1 ng/mL Period 1 Day 1 2.0 2022-06-10 09:30:00 1.0 0-HR POSTDOSE 0.0 1.0 2022-06-10T09:30:00 2022-06-10 09:30:00 0 Dapagliflozin 0 2022-06-10T09:30:00 1 Day Period 1 Day 1 missing missing missing missing 5.0 Day Period 1 Day 1 2022-06-10T09:30:00 2022-06-10T09:30:00 missing 0.0
2 DAPA01 PC DAPA01-001 2.0 DAPA Dapagliflozin 141.892 ng/mL 141.892 141.892 ng/mL plasma 0.1 ng/mL Period 1 Day 1 2.0 2022-06-10 09:33:00 1.0 0.05-HR POSTDOSE 0.05 1.0 2022-06-10T09:33:00 2022-06-10 09:33:00 0 Dapagliflozin 0 2022-06-10T09:30:00 1 Day Period 1 Day 1 Day Period 1 Day 1 2022-06-10T09:30:00 2022-06-10T09:30:00 5.0 5.0 Day Period 2 Day 1 2022-06-17T09:30:00 2022-06-17T09:30:00 missing 0.0
3 DAPA01 PC DAPA01-001 3.0 DAPA Dapagliflozin 116.228 ng/mL 116.228 116.228 ng/mL plasma 0.1 ng/mL Period 1 Day 1 2.0 2022-06-10 09:51:00 1.0 0.35-HR POSTDOSE 0.35 1.0 2022-06-10T09:51:00 2022-06-10 09:51:00 0 Dapagliflozin 0 2022-06-10T09:30:00 1 Day Period 1 Day 1 Day Period 1 Day 1 2022-06-10T09:30:00 2022-06-10T09:30:00 5.0 5.0 Day Period 2 Day 1 2022-06-17T09:30:00 2022-06-17T09:30:00 missing 0.0
4 DAPA01 PC DAPA01-001 4.0 DAPA Dapagliflozin 109.353 ng/mL 109.353 109.353 ng/mL plasma 0.1 ng/mL Period 1 Day 1 2.0 2022-06-10 10:00:00 1.0 0.5-HR POSTDOSE 0.5 1.0 2022-06-10T10:00:00 2022-06-10 10:00:00 0 Dapagliflozin 0 2022-06-10T09:30:00 1 Day Period 1 Day 1 Day Period 1 Day 1 2022-06-10T09:30:00 2022-06-10T09:30:00 5.0 5.0 Day Period 2 Day 1 2022-06-17T09:30:00 2022-06-17T09:30:00 missing 0.0
5 DAPA01 PC DAPA01-001 5.0 DAPA Dapagliflozin 66.4814 ng/mL 66.4814 66.4814 ng/mL plasma 0.1 ng/mL Period 1 Day 1 2.0 2022-06-10 10:15:00 1.0 0.75-HR POSTDOSE 0.75 1.0 2022-06-10T10:15:00 2022-06-10 10:15:00 0 Dapagliflozin 0 2022-06-10T09:30:00 1 Day Period 1 Day 1 Day Period 1 Day 1 2022-06-10T09:30:00 2022-06-10T09:30:00 5.0 5.0 Day Period 2 Day 1 2022-06-17T09:30:00 2022-06-17T09:30:00 missing 0.0

Derive Relative Time Variables

adpc_arrlt = vcat(adpc_nom_next, ex_exp1,cols = :union)
adpc_arrlt.USUBJID = String.(adpc_arrlt.USUBJID)
adpc_arrlt.DRUG = String.(adpc_arrlt.DRUG)

adpc_arrlt = @chain adpc_arrlt begin
    @groupby([:USUBJID, :DRUG])
    @transform(
        :maxdate = begin
            ev0_idx = (:EVID .== 0) .&& .!ismissing.(:ADT)
            isempty(:ADT[ev0_idx]) ? missing : maximum(:ADT[ev0_idx])
        end,
        :FANLDTM = minimum(skipmissing(:FANLDTM)),
        :min_NFRLT = minimum(skipmissing(:NFRLT_prev))
    )

    @rsubset(:ADT <= :maxdate || ismissing(:maxdate))

    @rtransform :AFRLT = ismissing(:FANLDTM) || ismissing(:ADTM) ?
                         missing : Dates.value(:ADTM - :FANLDTM) / 3600000

    @rtransform :ARRLT = ismissing(:ADTM_prev) || ismissing(:ADTM) ?
                         missing : Dates.value(:ADTM - :ADTM_prev) / 3600000

    @rtransform :AXRLT = ismissing(:ADTM_next) || ismissing(:ADTM) ?
                         missing : Dates.value(:ADTM - :ADTM_next) / 3600000

    @rtransform :ARRLT = (:EVID == 1) ? 0 : ismissing(:ARRLT) ? :AXRLT : :ARRLT

    @rtransform :PCRFTDTM = (:EVID == 1) ? :ADTM :
                            ismissing(:ADTM_prev) ? :ADTM_next : :ADTM_prev

    @rtransform @passmissing begin
        :FANLDT = Date(:FANLDTM)
        :FANLTM = Time(:FANLDTM)
        :PCRFTDT = Date(:PCRFTDTM)
        :PCRFTTM = Time(:PCRFTDTM)
    end
end
first(adpc_arrlt, 5)
5×66 DataFrame
Row STUDYID DOMAIN USUBJID PCSEQ PCTESTCD PCTEST PCORRES PCORRESU PCSTRESC PCSTRESN PCSTRESU PCSPEC PCLLOQ VISIT VISITNUM PCDTC PCDY PCTPT PCTPTNUM VISITDY ADTM ADT ATM EVID DRUG NFRLT FANLDTM AVISITN AVISIT AVISIT_prev ADTM_prev AENDTM_prev EXDOSE_prev EXDOSE_next AVISIT_next ADTM_next AENDTM_next NFRLT_prev NFRLT_next EXSEQ EXTRT EXDOSE EXDOSU EXDOSFRM EXDOSFRQ EXROUTE EXSTDTC EXSTDY EXENDTC ASTDTM AENDTM ASTDT AENDT HOURS_BETWEEN_DOSES ASTTM AENTM maxdate min_NFRLT AFRLT ARRLT AXRLT PCRFTDTM FANLDT FANLTM PCRFTDT PCRFTTM
String7 String3 String Float64? String7? String15? String15? String7? String15? Float64? String7? String7? String15? String15 Float64 String31? Float64? String31? Float64? Float64? DateTime Date Time? Int64 String Real DateTime Real? String String? DateTime? DateTime? Float64? Float64? String? DateTime? DateTime? Float64? Float64? Float64? String15? Float64? String3? String15? String7? String15? String31? Float64? String31? DateTime? DateTime? Date? Date? Int64? Time? Time? Date Float64 Float64 Real Float64? DateTime Date Time Date Time
1 DAPA01 PC DAPA01-001 1.0 DAPA Dapagliflozin 157.021 ng/mL 157.021 157.021 ng/mL plasma 0.1 ng/mL Period 1 Day 1 2.0 2022-06-10 09:30:00 1.0 0-HR POSTDOSE 0.0 1.0 2022-06-10T09:30:00 2022-06-10 09:30:00 0 Dapagliflozin 0 2022-06-10T09:30:00 1 Day Period 1 Day 1 missing missing missing missing 5.0 Day Period 1 Day 1 2022-06-10T09:30:00 2022-06-10T09:30:00 missing 0.0 missing missing missing missing missing missing missing missing missing missing missing missing missing missing missing missing missing 2022-07-03 0.0 0.0 0.0 0.0 2022-06-10T09:30:00 2022-06-10 09:30:00 2022-06-10 09:30:00
2 DAPA01 PC DAPA01-001 2.0 DAPA Dapagliflozin 141.892 ng/mL 141.892 141.892 ng/mL plasma 0.1 ng/mL Period 1 Day 1 2.0 2022-06-10 09:33:00 1.0 0.05-HR POSTDOSE 0.05 1.0 2022-06-10T09:33:00 2022-06-10 09:33:00 0 Dapagliflozin 0 2022-06-10T09:30:00 1 Day Period 1 Day 1 Day Period 1 Day 1 2022-06-10T09:30:00 2022-06-10T09:30:00 5.0 5.0 Day Period 2 Day 1 2022-06-17T09:30:00 2022-06-17T09:30:00 missing 0.0 missing missing missing missing missing missing missing missing missing missing missing missing missing missing missing missing missing 2022-07-03 0.0 0.05 0.05 -167.95 2022-06-10T09:30:00 2022-06-10 09:30:00 2022-06-10 09:30:00
3 DAPA01 PC DAPA01-001 3.0 DAPA Dapagliflozin 116.228 ng/mL 116.228 116.228 ng/mL plasma 0.1 ng/mL Period 1 Day 1 2.0 2022-06-10 09:51:00 1.0 0.35-HR POSTDOSE 0.35 1.0 2022-06-10T09:51:00 2022-06-10 09:51:00 0 Dapagliflozin 0 2022-06-10T09:30:00 1 Day Period 1 Day 1 Day Period 1 Day 1 2022-06-10T09:30:00 2022-06-10T09:30:00 5.0 5.0 Day Period 2 Day 1 2022-06-17T09:30:00 2022-06-17T09:30:00 missing 0.0 missing missing missing missing missing missing missing missing missing missing missing missing missing missing missing missing missing 2022-07-03 0.0 0.35 0.35 -167.65 2022-06-10T09:30:00 2022-06-10 09:30:00 2022-06-10 09:30:00
4 DAPA01 PC DAPA01-001 4.0 DAPA Dapagliflozin 109.353 ng/mL 109.353 109.353 ng/mL plasma 0.1 ng/mL Period 1 Day 1 2.0 2022-06-10 10:00:00 1.0 0.5-HR POSTDOSE 0.5 1.0 2022-06-10T10:00:00 2022-06-10 10:00:00 0 Dapagliflozin 0 2022-06-10T09:30:00 1 Day Period 1 Day 1 Day Period 1 Day 1 2022-06-10T09:30:00 2022-06-10T09:30:00 5.0 5.0 Day Period 2 Day 1 2022-06-17T09:30:00 2022-06-17T09:30:00 missing 0.0 missing missing missing missing missing missing missing missing missing missing missing missing missing missing missing missing missing 2022-07-03 0.0 0.5 0.5 -167.5 2022-06-10T09:30:00 2022-06-10 09:30:00 2022-06-10 09:30:00
5 DAPA01 PC DAPA01-001 5.0 DAPA Dapagliflozin 66.4814 ng/mL 66.4814 66.4814 ng/mL plasma 0.1 ng/mL Period 1 Day 1 2.0 2022-06-10 10:15:00 1.0 0.75-HR POSTDOSE 0.75 1.0 2022-06-10T10:15:00 2022-06-10 10:15:00 0 Dapagliflozin 0 2022-06-10T09:30:00 1 Day Period 1 Day 1 Day Period 1 Day 1 2022-06-10T09:30:00 2022-06-10T09:30:00 5.0 5.0 Day Period 2 Day 1 2022-06-17T09:30:00 2022-06-17T09:30:00 missing 0.0 missing missing missing missing missing missing missing missing missing missing missing missing missing missing missing missing missing 2022-07-03 0.0 0.75 0.75 -167.25 2022-06-10T09:30:00 2022-06-10 09:30:00 2022-06-10 09:30:00

Derive Nominal Relative Time from Reference Dose (NRRLT)

adpc_nrrlt = @chain adpc_arrlt begin
    @rtransform begin
        :NRRLT = :EVID == 1 ? 0.0 :
                    ismissing(:NFRLT_prev) ? :NFRLT - :min_NFRLT :
                    :NFRLT - :NFRLT_prev

        :NXRLT = :EVID == 1 ? 0.0 :
                    :NFRLT - :NFRLT_next
    end
end
first(adpc_nrrlt, 5)
5×68 DataFrame
Row STUDYID DOMAIN USUBJID PCSEQ PCTESTCD PCTEST PCORRES PCORRESU PCSTRESC PCSTRESN PCSTRESU PCSPEC PCLLOQ VISIT VISITNUM PCDTC PCDY PCTPT PCTPTNUM VISITDY ADTM ADT ATM EVID DRUG NFRLT FANLDTM AVISITN AVISIT AVISIT_prev ADTM_prev AENDTM_prev EXDOSE_prev EXDOSE_next AVISIT_next ADTM_next AENDTM_next NFRLT_prev NFRLT_next EXSEQ EXTRT EXDOSE EXDOSU EXDOSFRM EXDOSFRQ EXROUTE EXSTDTC EXSTDY EXENDTC ASTDTM AENDTM ASTDT AENDT HOURS_BETWEEN_DOSES ASTTM AENTM maxdate min_NFRLT AFRLT ARRLT AXRLT PCRFTDTM FANLDT FANLTM PCRFTDT PCRFTTM NRRLT NXRLT
String7 String3 String Float64? String7? String15? String15? String7? String15? Float64? String7? String7? String15? String15 Float64 String31? Float64? String31? Float64? Float64? DateTime Date Time? Int64 String Real DateTime Real? String String? DateTime? DateTime? Float64? Float64? String? DateTime? DateTime? Float64? Float64? Float64? String15? Float64? String3? String15? String7? String15? String31? Float64? String31? DateTime? DateTime? Date? Date? Int64? Time? Time? Date Float64 Float64 Real Float64? DateTime Date Time Date Time Float64 Float64
1 DAPA01 PC DAPA01-001 1.0 DAPA Dapagliflozin 157.021 ng/mL 157.021 157.021 ng/mL plasma 0.1 ng/mL Period 1 Day 1 2.0 2022-06-10 09:30:00 1.0 0-HR POSTDOSE 0.0 1.0 2022-06-10T09:30:00 2022-06-10 09:30:00 0 Dapagliflozin 0 2022-06-10T09:30:00 1 Day Period 1 Day 1 missing missing missing missing 5.0 Day Period 1 Day 1 2022-06-10T09:30:00 2022-06-10T09:30:00 missing 0.0 missing missing missing missing missing missing missing missing missing missing missing missing missing missing missing missing missing 2022-07-03 0.0 0.0 0.0 0.0 2022-06-10T09:30:00 2022-06-10 09:30:00 2022-06-10 09:30:00 0.0 0.0
2 DAPA01 PC DAPA01-001 2.0 DAPA Dapagliflozin 141.892 ng/mL 141.892 141.892 ng/mL plasma 0.1 ng/mL Period 1 Day 1 2.0 2022-06-10 09:33:00 1.0 0.05-HR POSTDOSE 0.05 1.0 2022-06-10T09:33:00 2022-06-10 09:33:00 0 Dapagliflozin 0 2022-06-10T09:30:00 1 Day Period 1 Day 1 Day Period 1 Day 1 2022-06-10T09:30:00 2022-06-10T09:30:00 5.0 5.0 Day Period 2 Day 1 2022-06-17T09:30:00 2022-06-17T09:30:00 missing 0.0 missing missing missing missing missing missing missing missing missing missing missing missing missing missing missing missing missing 2022-07-03 0.0 0.05 0.05 -167.95 2022-06-10T09:30:00 2022-06-10 09:30:00 2022-06-10 09:30:00 0.0 0.0
3 DAPA01 PC DAPA01-001 3.0 DAPA Dapagliflozin 116.228 ng/mL 116.228 116.228 ng/mL plasma 0.1 ng/mL Period 1 Day 1 2.0 2022-06-10 09:51:00 1.0 0.35-HR POSTDOSE 0.35 1.0 2022-06-10T09:51:00 2022-06-10 09:51:00 0 Dapagliflozin 0 2022-06-10T09:30:00 1 Day Period 1 Day 1 Day Period 1 Day 1 2022-06-10T09:30:00 2022-06-10T09:30:00 5.0 5.0 Day Period 2 Day 1 2022-06-17T09:30:00 2022-06-17T09:30:00 missing 0.0 missing missing missing missing missing missing missing missing missing missing missing missing missing missing missing missing missing 2022-07-03 0.0 0.35 0.35 -167.65 2022-06-10T09:30:00 2022-06-10 09:30:00 2022-06-10 09:30:00 0.0 0.0
4 DAPA01 PC DAPA01-001 4.0 DAPA Dapagliflozin 109.353 ng/mL 109.353 109.353 ng/mL plasma 0.1 ng/mL Period 1 Day 1 2.0 2022-06-10 10:00:00 1.0 0.5-HR POSTDOSE 0.5 1.0 2022-06-10T10:00:00 2022-06-10 10:00:00 0 Dapagliflozin 0 2022-06-10T09:30:00 1 Day Period 1 Day 1 Day Period 1 Day 1 2022-06-10T09:30:00 2022-06-10T09:30:00 5.0 5.0 Day Period 2 Day 1 2022-06-17T09:30:00 2022-06-17T09:30:00 missing 0.0 missing missing missing missing missing missing missing missing missing missing missing missing missing missing missing missing missing 2022-07-03 0.0 0.5 0.5 -167.5 2022-06-10T09:30:00 2022-06-10 09:30:00 2022-06-10 09:30:00 0.0 0.0
5 DAPA01 PC DAPA01-001 5.0 DAPA Dapagliflozin 66.4814 ng/mL 66.4814 66.4814 ng/mL plasma 0.1 ng/mL Period 1 Day 1 2.0 2022-06-10 10:15:00 1.0 0.75-HR POSTDOSE 0.75 1.0 2022-06-10T10:15:00 2022-06-10 10:15:00 0 Dapagliflozin 0 2022-06-10T09:30:00 1 Day Period 1 Day 1 Day Period 1 Day 1 2022-06-10T09:30:00 2022-06-10T09:30:00 5.0 5.0 Day Period 2 Day 1 2022-06-17T09:30:00 2022-06-17T09:30:00 missing 0.0 missing missing missing missing missing missing missing missing missing missing missing missing missing missing missing missing missing 2022-07-03 0.0 0.75 0.75 -167.25 2022-06-10T09:30:00 2022-06-10 09:30:00 2022-06-10 09:30:00 0.0 0.0

Derive Analysis Variables

adpc_aval = @chain adpc_nrrlt begin
    @rtransform :PARCAT1 = :PCSPEC

    @rtransform :ATPTN = (:EVID == 1) ? 0 : :PCTPTNUM
    @rtransform :ATPT = (:EVID == 1) ? "Dose" : :PCTPT

    @rtransform :ATPTREF = (:EVID == 1) ? :AVISIT : (ismissing(:AVISIT_prev) ? :AVISIT_next : :AVISIT_prev)

    @rtransform :ABLFL = (:ATPT == "Pre-dose") ? "Y" : missing

    @rtransform :BASETYPE = string(:ATPTREF, " Baseline")

    @rtransform :DOSEA = (:EVID == 1) ? :EXDOSE : (ismissing(:EXDOSE_prev) ? :EXDOSE_next : :EXDOSE_prev)
    @rtransform :DOSEU = "mg"

    @rtransform :FRLTU = "h"
    @rtransform :RRLTU = "h"

    @rtransform :PARAMCD = coalesce(:PCTESTCD, "DOSE")
    @rtransform :ALLOQ = :PCLLOQ

   @rtransform :AVAL = 
    (:EVID == 1) ? :EXDOSE :
    ((:PCSTRESC == "<BLQ" && !ismissing(:NFRLT) && :NFRLT == 0) ? 0 :
    ((:PCSTRESC == "<BLQ" && !ismissing(:NFRLT) && :NFRLT > 0) ? 
        (ismissing(:ALLOQ) ? missing : 
         let m = match(r"^([\d.]+)", string(:ALLOQ))
             m === nothing ? missing : 0.5 * parse(Float64, m.captures[1])
         end) :
    (!ismissing(:PCSTRESN) ? :PCSTRESN : missing)))

    @rtransform :AVALU = (:EVID == 1) ? :EXDOSU : :PCSTRESU

    @rtransform :AVALCAT1 = (!ismissing(:PCSTRESC) && :PCSTRESC == "<BLQ") ? "<BLQ" :
                             (ismissing(:AVAL) ? missing : string(round(:AVAL, sigdigits=3)))

    @rtransform :SRCDOM = :DOMAIN
    @rtransform :SRCVAR = "SEQ"
    @rtransform :SRCSEQ = coalesce(:PCSEQ, :EXSEQ)
end
first(adpc_aval, 5)
5×86 DataFrame
Row STUDYID DOMAIN USUBJID PCSEQ PCTESTCD PCTEST PCORRES PCORRESU PCSTRESC PCSTRESN PCSTRESU PCSPEC PCLLOQ VISIT VISITNUM PCDTC PCDY PCTPT PCTPTNUM VISITDY ADTM ADT ATM EVID DRUG NFRLT FANLDTM AVISITN AVISIT AVISIT_prev ADTM_prev AENDTM_prev EXDOSE_prev EXDOSE_next AVISIT_next ADTM_next AENDTM_next NFRLT_prev NFRLT_next EXSEQ EXTRT EXDOSE EXDOSU EXDOSFRM EXDOSFRQ EXROUTE EXSTDTC EXSTDY EXENDTC ASTDTM AENDTM ASTDT AENDT HOURS_BETWEEN_DOSES ASTTM AENTM maxdate min_NFRLT AFRLT ARRLT AXRLT PCRFTDTM FANLDT FANLTM PCRFTDT PCRFTTM NRRLT NXRLT PARCAT1 ATPTN ATPT ATPTREF ABLFL BASETYPE DOSEA DOSEU FRLTU RRLTU PARAMCD ALLOQ AVAL AVALU AVALCAT1 SRCDOM SRCVAR SRCSEQ
String7 String3 String Float64? String7? String15? String15? String7? String15? Float64? String7? String7? String15? String15 Float64 String31? Float64? String31? Float64? Float64? DateTime Date Time? Int64 String Real DateTime Real? String String? DateTime? DateTime? Float64? Float64? String? DateTime? DateTime? Float64? Float64? Float64? String15? Float64? String3? String15? String7? String15? String31? Float64? String31? DateTime? DateTime? Date? Date? Int64? Time? Time? Date Float64 Float64 Real Float64? DateTime Date Time Date Time Float64 Float64 String7? Real Abstract… String Missing String Float64 String String String Abstract… String15? Float64 InlineSt… String String3 String Float64
1 DAPA01 PC DAPA01-001 1.0 DAPA Dapagliflozin 157.021 ng/mL 157.021 157.021 ng/mL plasma 0.1 ng/mL Period 1 Day 1 2.0 2022-06-10 09:30:00 1.0 0-HR POSTDOSE 0.0 1.0 2022-06-10T09:30:00 2022-06-10 09:30:00 0 Dapagliflozin 0 2022-06-10T09:30:00 1 Day Period 1 Day 1 missing missing missing missing 5.0 Day Period 1 Day 1 2022-06-10T09:30:00 2022-06-10T09:30:00 missing 0.0 missing missing missing missing missing missing missing missing missing missing missing missing missing missing missing missing missing 2022-07-03 0.0 0.0 0.0 0.0 2022-06-10T09:30:00 2022-06-10 09:30:00 2022-06-10 09:30:00 0.0 0.0 plasma 0.0 0-HR POSTDOSE Day Period 1 Day 1 missing Day Period 1 Day 1 Baseline 5.0 mg h h DAPA 0.1 ng/mL 157.021 ng/mL 157.0 PC SEQ 1.0
2 DAPA01 PC DAPA01-001 2.0 DAPA Dapagliflozin 141.892 ng/mL 141.892 141.892 ng/mL plasma 0.1 ng/mL Period 1 Day 1 2.0 2022-06-10 09:33:00 1.0 0.05-HR POSTDOSE 0.05 1.0 2022-06-10T09:33:00 2022-06-10 09:33:00 0 Dapagliflozin 0 2022-06-10T09:30:00 1 Day Period 1 Day 1 Day Period 1 Day 1 2022-06-10T09:30:00 2022-06-10T09:30:00 5.0 5.0 Day Period 2 Day 1 2022-06-17T09:30:00 2022-06-17T09:30:00 missing 0.0 missing missing missing missing missing missing missing missing missing missing missing missing missing missing missing missing missing 2022-07-03 0.0 0.05 0.05 -167.95 2022-06-10T09:30:00 2022-06-10 09:30:00 2022-06-10 09:30:00 0.0 0.0 plasma 0.05 0.05-HR POSTDOSE Day Period 1 Day 1 missing Day Period 1 Day 1 Baseline 5.0 mg h h DAPA 0.1 ng/mL 141.892 ng/mL 142.0 PC SEQ 2.0
3 DAPA01 PC DAPA01-001 3.0 DAPA Dapagliflozin 116.228 ng/mL 116.228 116.228 ng/mL plasma 0.1 ng/mL Period 1 Day 1 2.0 2022-06-10 09:51:00 1.0 0.35-HR POSTDOSE 0.35 1.0 2022-06-10T09:51:00 2022-06-10 09:51:00 0 Dapagliflozin 0 2022-06-10T09:30:00 1 Day Period 1 Day 1 Day Period 1 Day 1 2022-06-10T09:30:00 2022-06-10T09:30:00 5.0 5.0 Day Period 2 Day 1 2022-06-17T09:30:00 2022-06-17T09:30:00 missing 0.0 missing missing missing missing missing missing missing missing missing missing missing missing missing missing missing missing missing 2022-07-03 0.0 0.35 0.35 -167.65 2022-06-10T09:30:00 2022-06-10 09:30:00 2022-06-10 09:30:00 0.0 0.0 plasma 0.35 0.35-HR POSTDOSE Day Period 1 Day 1 missing Day Period 1 Day 1 Baseline 5.0 mg h h DAPA 0.1 ng/mL 116.228 ng/mL 116.0 PC SEQ 3.0
4 DAPA01 PC DAPA01-001 4.0 DAPA Dapagliflozin 109.353 ng/mL 109.353 109.353 ng/mL plasma 0.1 ng/mL Period 1 Day 1 2.0 2022-06-10 10:00:00 1.0 0.5-HR POSTDOSE 0.5 1.0 2022-06-10T10:00:00 2022-06-10 10:00:00 0 Dapagliflozin 0 2022-06-10T09:30:00 1 Day Period 1 Day 1 Day Period 1 Day 1 2022-06-10T09:30:00 2022-06-10T09:30:00 5.0 5.0 Day Period 2 Day 1 2022-06-17T09:30:00 2022-06-17T09:30:00 missing 0.0 missing missing missing missing missing missing missing missing missing missing missing missing missing missing missing missing missing 2022-07-03 0.0 0.5 0.5 -167.5 2022-06-10T09:30:00 2022-06-10 09:30:00 2022-06-10 09:30:00 0.0 0.0 plasma 0.5 0.5-HR POSTDOSE Day Period 1 Day 1 missing Day Period 1 Day 1 Baseline 5.0 mg h h DAPA 0.1 ng/mL 109.353 ng/mL 109.0 PC SEQ 4.0
5 DAPA01 PC DAPA01-001 5.0 DAPA Dapagliflozin 66.4814 ng/mL 66.4814 66.4814 ng/mL plasma 0.1 ng/mL Period 1 Day 1 2.0 2022-06-10 10:15:00 1.0 0.75-HR POSTDOSE 0.75 1.0 2022-06-10T10:15:00 2022-06-10 10:15:00 0 Dapagliflozin 0 2022-06-10T09:30:00 1 Day Period 1 Day 1 Day Period 1 Day 1 2022-06-10T09:30:00 2022-06-10T09:30:00 5.0 5.0 Day Period 2 Day 1 2022-06-17T09:30:00 2022-06-17T09:30:00 missing 0.0 missing missing missing missing missing missing missing missing missing missing missing missing missing missing missing missing missing 2022-07-03 0.0 0.75 0.75 -167.25 2022-06-10T09:30:00 2022-06-10 09:30:00 2022-06-10 09:30:00 0.0 0.0 plasma 0.75 0.75-HR POSTDOSE Day Period 1 Day 1 missing Day Period 1 Day 1 Baseline 5.0 mg h h DAPA 0.1 ng/mL 66.4814 ng/mL 66.5 PC SEQ 5.0

Create DTYPE copy records

dtype = @chain adpc_aval begin
    
    @select Not([:PCRFTDT, :PCRFTTM])
    
    @rtransform(
        :ABLFL = "Y",
        :ATPTREF = :AVISIT_next,
        :NRRLT = :NXRLT,
        :PCRFTDTM = :ADTM_next,
        :DOSEA = :EXDOSE_next,
        :BASETYPE = string(:AVISIT_next, " Baseline"),
        :ATPT = "Pre-dose",
        :ATPTN = -0.5,
        :DTYPE = "COPY"
    )
    
  @rtransform begin
        :PCRFTDT = ismissing(:PCRFTDTM) ? missing : Date(:PCRFTDTM)
        :PCRFTTM = ismissing(:PCRFTDTM) ? missing : Dates.format(:PCRFTDTM, "HH:MM:SS")
    end
end
first(dtype, 5)
5×87 DataFrame
Row STUDYID DOMAIN USUBJID PCSEQ PCTESTCD PCTEST PCORRES PCORRESU PCSTRESC PCSTRESN PCSTRESU PCSPEC PCLLOQ VISIT VISITNUM PCDTC PCDY PCTPT PCTPTNUM VISITDY ADTM ADT ATM EVID DRUG NFRLT FANLDTM AVISITN AVISIT AVISIT_prev ADTM_prev AENDTM_prev EXDOSE_prev EXDOSE_next AVISIT_next ADTM_next AENDTM_next NFRLT_prev NFRLT_next EXSEQ EXTRT EXDOSE EXDOSU EXDOSFRM EXDOSFRQ EXROUTE EXSTDTC EXSTDY EXENDTC ASTDTM AENDTM ASTDT AENDT HOURS_BETWEEN_DOSES ASTTM AENTM maxdate min_NFRLT AFRLT ARRLT AXRLT PCRFTDTM FANLDT FANLTM NRRLT NXRLT PARCAT1 ATPTN ATPT ATPTREF ABLFL BASETYPE DOSEA DOSEU FRLTU RRLTU PARAMCD ALLOQ AVAL AVALU AVALCAT1 SRCDOM SRCVAR SRCSEQ DTYPE PCRFTDT PCRFTTM
String7 String3 String Float64? String7? String15? String15? String7? String15? Float64? String7? String7? String15? String15 Float64 String31? Float64? String31? Float64? Float64? DateTime Date Time? Int64 String Real DateTime Real? String String? DateTime? DateTime? Float64? Float64? String? DateTime? DateTime? Float64? Float64? Float64? String15? Float64? String3? String15? String7? String15? String31? Float64? String31? DateTime? DateTime? Date? Date? Int64? Time? Time? Date Float64 Float64 Real Float64? DateTime? Date Time Float64 Float64 String7? Float64 String String? String String Float64? String String String Abstract… String15? Float64 InlineSt… String String3 String Float64 String Date? String?
1 DAPA01 PC DAPA01-001 1.0 DAPA Dapagliflozin 157.021 ng/mL 157.021 157.021 ng/mL plasma 0.1 ng/mL Period 1 Day 1 2.0 2022-06-10 09:30:00 1.0 0-HR POSTDOSE 0.0 1.0 2022-06-10T09:30:00 2022-06-10 09:30:00 0 Dapagliflozin 0 2022-06-10T09:30:00 1 Day Period 1 Day 1 missing missing missing missing 5.0 Day Period 1 Day 1 2022-06-10T09:30:00 2022-06-10T09:30:00 missing 0.0 missing missing missing missing missing missing missing missing missing missing missing missing missing missing missing missing missing 2022-07-03 0.0 0.0 0.0 0.0 2022-06-10T09:30:00 2022-06-10 09:30:00 0.0 0.0 plasma -0.5 Pre-dose Day Period 1 Day 1 Y Day Period 1 Day 1 Baseline 5.0 mg h h DAPA 0.1 ng/mL 157.021 ng/mL 157.0 PC SEQ 1.0 COPY 2022-06-10 09:30:00
2 DAPA01 PC DAPA01-001 2.0 DAPA Dapagliflozin 141.892 ng/mL 141.892 141.892 ng/mL plasma 0.1 ng/mL Period 1 Day 1 2.0 2022-06-10 09:33:00 1.0 0.05-HR POSTDOSE 0.05 1.0 2022-06-10T09:33:00 2022-06-10 09:33:00 0 Dapagliflozin 0 2022-06-10T09:30:00 1 Day Period 1 Day 1 Day Period 1 Day 1 2022-06-10T09:30:00 2022-06-10T09:30:00 5.0 5.0 Day Period 2 Day 1 2022-06-17T09:30:00 2022-06-17T09:30:00 missing 0.0 missing missing missing missing missing missing missing missing missing missing missing missing missing missing missing missing missing 2022-07-03 0.0 0.05 0.05 -167.95 2022-06-17T09:30:00 2022-06-10 09:30:00 0.0 0.0 plasma -0.5 Pre-dose Day Period 2 Day 1 Y Day Period 2 Day 1 Baseline 5.0 mg h h DAPA 0.1 ng/mL 141.892 ng/mL 142.0 PC SEQ 2.0 COPY 2022-06-17 09:30:00
3 DAPA01 PC DAPA01-001 3.0 DAPA Dapagliflozin 116.228 ng/mL 116.228 116.228 ng/mL plasma 0.1 ng/mL Period 1 Day 1 2.0 2022-06-10 09:51:00 1.0 0.35-HR POSTDOSE 0.35 1.0 2022-06-10T09:51:00 2022-06-10 09:51:00 0 Dapagliflozin 0 2022-06-10T09:30:00 1 Day Period 1 Day 1 Day Period 1 Day 1 2022-06-10T09:30:00 2022-06-10T09:30:00 5.0 5.0 Day Period 2 Day 1 2022-06-17T09:30:00 2022-06-17T09:30:00 missing 0.0 missing missing missing missing missing missing missing missing missing missing missing missing missing missing missing missing missing 2022-07-03 0.0 0.35 0.35 -167.65 2022-06-17T09:30:00 2022-06-10 09:30:00 0.0 0.0 plasma -0.5 Pre-dose Day Period 2 Day 1 Y Day Period 2 Day 1 Baseline 5.0 mg h h DAPA 0.1 ng/mL 116.228 ng/mL 116.0 PC SEQ 3.0 COPY 2022-06-17 09:30:00
4 DAPA01 PC DAPA01-001 4.0 DAPA Dapagliflozin 109.353 ng/mL 109.353 109.353 ng/mL plasma 0.1 ng/mL Period 1 Day 1 2.0 2022-06-10 10:00:00 1.0 0.5-HR POSTDOSE 0.5 1.0 2022-06-10T10:00:00 2022-06-10 10:00:00 0 Dapagliflozin 0 2022-06-10T09:30:00 1 Day Period 1 Day 1 Day Period 1 Day 1 2022-06-10T09:30:00 2022-06-10T09:30:00 5.0 5.0 Day Period 2 Day 1 2022-06-17T09:30:00 2022-06-17T09:30:00 missing 0.0 missing missing missing missing missing missing missing missing missing missing missing missing missing missing missing missing missing 2022-07-03 0.0 0.5 0.5 -167.5 2022-06-17T09:30:00 2022-06-10 09:30:00 0.0 0.0 plasma -0.5 Pre-dose Day Period 2 Day 1 Y Day Period 2 Day 1 Baseline 5.0 mg h h DAPA 0.1 ng/mL 109.353 ng/mL 109.0 PC SEQ 4.0 COPY 2022-06-17 09:30:00
5 DAPA01 PC DAPA01-001 5.0 DAPA Dapagliflozin 66.4814 ng/mL 66.4814 66.4814 ng/mL plasma 0.1 ng/mL Period 1 Day 1 2.0 2022-06-10 10:15:00 1.0 0.75-HR POSTDOSE 0.75 1.0 2022-06-10T10:15:00 2022-06-10 10:15:00 0 Dapagliflozin 0 2022-06-10T09:30:00 1 Day Period 1 Day 1 Day Period 1 Day 1 2022-06-10T09:30:00 2022-06-10T09:30:00 5.0 5.0 Day Period 2 Day 1 2022-06-17T09:30:00 2022-06-17T09:30:00 missing 0.0 missing missing missing missing missing missing missing missing missing missing missing missing missing missing missing missing missing 2022-07-03 0.0 0.75 0.75 -167.25 2022-06-17T09:30:00 2022-06-10 09:30:00 0.0 0.0 plasma -0.5 Pre-dose Day Period 2 Day 1 Y Day Period 2 Day 1 Baseline 5.0 mg h h DAPA 0.1 ng/mL 66.4814 ng/mL 66.5 PC SEQ 5.0 COPY 2022-06-17 09:30:00

Combine original records and DTYPE copy records

adpc_dtype = @chain vcat(adpc_aval, dtype; cols = :union) begin
    sort!([:STUDYID, :USUBJID, :BASETYPE, :ADTM, :NFRLT])

    @rtransform :MRRLT = (!ismissing(:ARRLT) && :ARRLT < 0) ? 0 : :ARRLT

    @rtransform :ANL01FL = "Y"

    @rtransform :ANL02FL = ismissing(:DTYPE) ? "Y" : missing
end
first(adpc_dtype, 5)
5×90 DataFrame
Row STUDYID DOMAIN USUBJID PCSEQ PCTESTCD PCTEST PCORRES PCORRESU PCSTRESC PCSTRESN PCSTRESU PCSPEC PCLLOQ VISIT VISITNUM PCDTC PCDY PCTPT PCTPTNUM VISITDY ADTM ADT ATM EVID DRUG NFRLT FANLDTM AVISITN AVISIT AVISIT_prev ADTM_prev AENDTM_prev EXDOSE_prev EXDOSE_next AVISIT_next ADTM_next AENDTM_next NFRLT_prev NFRLT_next EXSEQ EXTRT EXDOSE EXDOSU EXDOSFRM EXDOSFRQ EXROUTE EXSTDTC EXSTDY EXENDTC ASTDTM AENDTM ASTDT AENDT HOURS_BETWEEN_DOSES ASTTM AENTM maxdate min_NFRLT AFRLT ARRLT AXRLT PCRFTDTM FANLDT FANLTM PCRFTDT PCRFTTM NRRLT NXRLT PARCAT1 ATPTN ATPT ATPTREF ABLFL BASETYPE DOSEA DOSEU FRLTU RRLTU PARAMCD ALLOQ AVAL AVALU AVALCAT1 SRCDOM SRCVAR SRCSEQ DTYPE MRRLT ANL01FL ANL02FL
String7 String3 String Float64? String7? String15? String15? String7? String15? Float64? String7? String7? String15? String15 Float64 String31? Float64? String31? Float64? Float64? DateTime Date Time? Int64 String Real DateTime Real? String String? DateTime? DateTime? Float64? Float64? String? DateTime? DateTime? Float64? Float64? Float64? String15? Float64? String3? String15? String7? String15? String31? Float64? String31? DateTime? DateTime? Date? Date? Int64? Time? Time? Date Float64 Float64 Real Float64? DateTime? Date Time Date? Any Float64 Float64 String7? Real Abstract… String? String? String Float64? String String String Abstract… String15? Float64 InlineSt… String String3 String Float64 String? Real String String?
1 DAPA01 PC DAPA01-001 1.0 DAPA Dapagliflozin 157.021 ng/mL 157.021 157.021 ng/mL plasma 0.1 ng/mL Period 1 Day 1 2.0 2022-06-10 09:30:00 1.0 0-HR POSTDOSE 0.0 1.0 2022-06-10T09:30:00 2022-06-10 09:30:00 0 Dapagliflozin 0 2022-06-10T09:30:00 1 Day Period 1 Day 1 missing missing missing missing 5.0 Day Period 1 Day 1 2022-06-10T09:30:00 2022-06-10T09:30:00 missing 0.0 missing missing missing missing missing missing missing missing missing missing missing missing missing missing missing missing missing 2022-07-03 0.0 0.0 0.0 0.0 2022-06-10T09:30:00 2022-06-10 09:30:00 2022-06-10 09:30:00 0.0 0.0 plasma 0.0 0-HR POSTDOSE Day Period 1 Day 1 missing Day Period 1 Day 1 Baseline 5.0 mg h h DAPA 0.1 ng/mL 157.021 ng/mL 157.0 PC SEQ 1.0 missing 0.0 Y Y
2 DAPA01 EX DAPA01-001 missing missing missing missing missing missing missing missing missing missing Period 1 Day 1 2.0 missing missing missing missing 1.0 2022-06-10T09:30:00 2022-06-10 missing 1 Dapagliflozin 0 2022-06-10T09:30:00 missing Day Period 1 Day 1 missing missing missing missing missing missing missing missing missing missing 1.0 Dapagliflozin 5.0 mg Injection ONCE Intravenous 2022-06-10 09:30:00 1.0 2022-06-10 09:30:00 2022-06-10T09:30:00 2022-06-10T09:30:00 2022-06-10 2022-06-10 missing 09:30:00 09:30:00 2022-07-03 0.0 0.0 0 missing 2022-06-10T09:30:00 2022-06-10 09:30:00 2022-06-10 09:30:00 0.0 0.0 missing 0 Dose Day Period 1 Day 1 missing Day Period 1 Day 1 Baseline 5.0 mg h h DOSE missing 5.0 mg 5.0 EX SEQ 1.0 missing 0 Y Y
3 DAPA01 PC DAPA01-001 1.0 DAPA Dapagliflozin 157.021 ng/mL 157.021 157.021 ng/mL plasma 0.1 ng/mL Period 1 Day 1 2.0 2022-06-10 09:30:00 1.0 0-HR POSTDOSE 0.0 1.0 2022-06-10T09:30:00 2022-06-10 09:30:00 0 Dapagliflozin 0 2022-06-10T09:30:00 1 Day Period 1 Day 1 missing missing missing missing 5.0 Day Period 1 Day 1 2022-06-10T09:30:00 2022-06-10T09:30:00 missing 0.0 missing missing missing missing missing missing missing missing missing missing missing missing missing missing missing missing missing 2022-07-03 0.0 0.0 0.0 0.0 2022-06-10T09:30:00 2022-06-10 09:30:00 2022-06-10 09:30:00 0.0 0.0 plasma -0.5 Pre-dose Day Period 1 Day 1 Y Day Period 1 Day 1 Baseline 5.0 mg h h DAPA 0.1 ng/mL 157.021 ng/mL 157.0 PC SEQ 1.0 COPY 0.0 Y missing
4 DAPA01 PC DAPA01-001 2.0 DAPA Dapagliflozin 141.892 ng/mL 141.892 141.892 ng/mL plasma 0.1 ng/mL Period 1 Day 1 2.0 2022-06-10 09:33:00 1.0 0.05-HR POSTDOSE 0.05 1.0 2022-06-10T09:33:00 2022-06-10 09:33:00 0 Dapagliflozin 0 2022-06-10T09:30:00 1 Day Period 1 Day 1 Day Period 1 Day 1 2022-06-10T09:30:00 2022-06-10T09:30:00 5.0 5.0 Day Period 2 Day 1 2022-06-17T09:30:00 2022-06-17T09:30:00 missing 0.0 missing missing missing missing missing missing missing missing missing missing missing missing missing missing missing missing missing 2022-07-03 0.0 0.05 0.05 -167.95 2022-06-10T09:30:00 2022-06-10 09:30:00 2022-06-10 09:30:00 0.0 0.0 plasma 0.05 0.05-HR POSTDOSE Day Period 1 Day 1 missing Day Period 1 Day 1 Baseline 5.0 mg h h DAPA 0.1 ng/mL 141.892 ng/mL 142.0 PC SEQ 2.0 missing 0.05 Y Y
5 DAPA01 PC DAPA01-001 3.0 DAPA Dapagliflozin 116.228 ng/mL 116.228 116.228 ng/mL plasma 0.1 ng/mL Period 1 Day 1 2.0 2022-06-10 09:51:00 1.0 0.35-HR POSTDOSE 0.35 1.0 2022-06-10T09:51:00 2022-06-10 09:51:00 0 Dapagliflozin 0 2022-06-10T09:30:00 1 Day Period 1 Day 1 Day Period 1 Day 1 2022-06-10T09:30:00 2022-06-10T09:30:00 5.0 5.0 Day Period 2 Day 1 2022-06-17T09:30:00 2022-06-17T09:30:00 missing 0.0 missing missing missing missing missing missing missing missing missing missing missing missing missing missing missing missing missing 2022-07-03 0.0 0.35 0.35 -167.65 2022-06-10T09:30:00 2022-06-10 09:30:00 2022-06-10 09:30:00 0.0 0.0 plasma 0.35 0.35-HR POSTDOSE Day Period 1 Day 1 missing Day Period 1 Day 1 Baseline 5.0 mg h h DAPA 0.1 ng/mL 116.228 ng/mL 116.0 PC SEQ 3.0 missing 0.35 Y Y

Derive BASE and Calculate Change from Baseline

adpc_base = @chain adpc_dtype begin
    groupby([:STUDYID, :USUBJID, :PARAMCD, :PARCAT1, :BASETYPE])
    @transform :BASE = begin
        base_vals = :AVAL[ .!ismissing.(:ABLFL) .& (:ABLFL .== "Y") ]
        isempty(base_vals) ? missing : base_vals[1]
    end
end
first(adpc_base, 5)
5×91 DataFrame
Row STUDYID DOMAIN USUBJID PCSEQ PCTESTCD PCTEST PCORRES PCORRESU PCSTRESC PCSTRESN PCSTRESU PCSPEC PCLLOQ VISIT VISITNUM PCDTC PCDY PCTPT PCTPTNUM VISITDY ADTM ADT ATM EVID DRUG NFRLT FANLDTM AVISITN AVISIT AVISIT_prev ADTM_prev AENDTM_prev EXDOSE_prev EXDOSE_next AVISIT_next ADTM_next AENDTM_next NFRLT_prev NFRLT_next EXSEQ EXTRT EXDOSE EXDOSU EXDOSFRM EXDOSFRQ EXROUTE EXSTDTC EXSTDY EXENDTC ASTDTM AENDTM ASTDT AENDT HOURS_BETWEEN_DOSES ASTTM AENTM maxdate min_NFRLT AFRLT ARRLT AXRLT PCRFTDTM FANLDT FANLTM PCRFTDT PCRFTTM NRRLT NXRLT PARCAT1 ATPTN ATPT ATPTREF ABLFL BASETYPE DOSEA DOSEU FRLTU RRLTU PARAMCD ALLOQ AVAL AVALU AVALCAT1 SRCDOM SRCVAR SRCSEQ DTYPE MRRLT ANL01FL ANL02FL BASE
String7 String3 String Float64? String7? String15? String15? String7? String15? Float64? String7? String7? String15? String15 Float64 String31? Float64? String31? Float64? Float64? DateTime Date Time? Int64 String Real DateTime Real? String String? DateTime? DateTime? Float64? Float64? String? DateTime? DateTime? Float64? Float64? Float64? String15? Float64? String3? String15? String7? String15? String31? Float64? String31? DateTime? DateTime? Date? Date? Int64? Time? Time? Date Float64 Float64 Real Float64? DateTime? Date Time Date? Any Float64 Float64 String7? Real Abstract… String? String? String Float64? String String String Abstract… String15? Float64 InlineSt… String String3 String Float64 String? Real String String? Float64?
1 DAPA01 PC DAPA01-001 1.0 DAPA Dapagliflozin 157.021 ng/mL 157.021 157.021 ng/mL plasma 0.1 ng/mL Period 1 Day 1 2.0 2022-06-10 09:30:00 1.0 0-HR POSTDOSE 0.0 1.0 2022-06-10T09:30:00 2022-06-10 09:30:00 0 Dapagliflozin 0 2022-06-10T09:30:00 1 Day Period 1 Day 1 missing missing missing missing 5.0 Day Period 1 Day 1 2022-06-10T09:30:00 2022-06-10T09:30:00 missing 0.0 missing missing missing missing missing missing missing missing missing missing missing missing missing missing missing missing missing 2022-07-03 0.0 0.0 0.0 0.0 2022-06-10T09:30:00 2022-06-10 09:30:00 2022-06-10 09:30:00 0.0 0.0 plasma 0.0 0-HR POSTDOSE Day Period 1 Day 1 missing Day Period 1 Day 1 Baseline 5.0 mg h h DAPA 0.1 ng/mL 157.021 ng/mL 157.0 PC SEQ 1.0 missing 0.0 Y Y 157.021
2 DAPA01 EX DAPA01-001 missing missing missing missing missing missing missing missing missing missing Period 1 Day 1 2.0 missing missing missing missing 1.0 2022-06-10T09:30:00 2022-06-10 missing 1 Dapagliflozin 0 2022-06-10T09:30:00 missing Day Period 1 Day 1 missing missing missing missing missing missing missing missing missing missing 1.0 Dapagliflozin 5.0 mg Injection ONCE Intravenous 2022-06-10 09:30:00 1.0 2022-06-10 09:30:00 2022-06-10T09:30:00 2022-06-10T09:30:00 2022-06-10 2022-06-10 missing 09:30:00 09:30:00 2022-07-03 0.0 0.0 0 missing 2022-06-10T09:30:00 2022-06-10 09:30:00 2022-06-10 09:30:00 0.0 0.0 missing 0 Dose Day Period 1 Day 1 missing Day Period 1 Day 1 Baseline 5.0 mg h h DOSE missing 5.0 mg 5.0 EX SEQ 1.0 missing 0 Y Y missing
3 DAPA01 PC DAPA01-001 1.0 DAPA Dapagliflozin 157.021 ng/mL 157.021 157.021 ng/mL plasma 0.1 ng/mL Period 1 Day 1 2.0 2022-06-10 09:30:00 1.0 0-HR POSTDOSE 0.0 1.0 2022-06-10T09:30:00 2022-06-10 09:30:00 0 Dapagliflozin 0 2022-06-10T09:30:00 1 Day Period 1 Day 1 missing missing missing missing 5.0 Day Period 1 Day 1 2022-06-10T09:30:00 2022-06-10T09:30:00 missing 0.0 missing missing missing missing missing missing missing missing missing missing missing missing missing missing missing missing missing 2022-07-03 0.0 0.0 0.0 0.0 2022-06-10T09:30:00 2022-06-10 09:30:00 2022-06-10 09:30:00 0.0 0.0 plasma -0.5 Pre-dose Day Period 1 Day 1 Y Day Period 1 Day 1 Baseline 5.0 mg h h DAPA 0.1 ng/mL 157.021 ng/mL 157.0 PC SEQ 1.0 COPY 0.0 Y missing 157.021
4 DAPA01 PC DAPA01-001 2.0 DAPA Dapagliflozin 141.892 ng/mL 141.892 141.892 ng/mL plasma 0.1 ng/mL Period 1 Day 1 2.0 2022-06-10 09:33:00 1.0 0.05-HR POSTDOSE 0.05 1.0 2022-06-10T09:33:00 2022-06-10 09:33:00 0 Dapagliflozin 0 2022-06-10T09:30:00 1 Day Period 1 Day 1 Day Period 1 Day 1 2022-06-10T09:30:00 2022-06-10T09:30:00 5.0 5.0 Day Period 2 Day 1 2022-06-17T09:30:00 2022-06-17T09:30:00 missing 0.0 missing missing missing missing missing missing missing missing missing missing missing missing missing missing missing missing missing 2022-07-03 0.0 0.05 0.05 -167.95 2022-06-10T09:30:00 2022-06-10 09:30:00 2022-06-10 09:30:00 0.0 0.0 plasma 0.05 0.05-HR POSTDOSE Day Period 1 Day 1 missing Day Period 1 Day 1 Baseline 5.0 mg h h DAPA 0.1 ng/mL 141.892 ng/mL 142.0 PC SEQ 2.0 missing 0.05 Y Y 157.021
5 DAPA01 PC DAPA01-001 3.0 DAPA Dapagliflozin 116.228 ng/mL 116.228 116.228 ng/mL plasma 0.1 ng/mL Period 1 Day 1 2.0 2022-06-10 09:51:00 1.0 0.35-HR POSTDOSE 0.35 1.0 2022-06-10T09:51:00 2022-06-10 09:51:00 0 Dapagliflozin 0 2022-06-10T09:30:00 1 Day Period 1 Day 1 Day Period 1 Day 1 2022-06-10T09:30:00 2022-06-10T09:30:00 5.0 5.0 Day Period 2 Day 1 2022-06-17T09:30:00 2022-06-17T09:30:00 missing 0.0 missing missing missing missing missing missing missing missing missing missing missing missing missing missing missing missing missing 2022-07-03 0.0 0.35 0.35 -167.65 2022-06-10T09:30:00 2022-06-10 09:30:00 2022-06-10 09:30:00 0.0 0.0 plasma 0.35 0.35-HR POSTDOSE Day Period 1 Day 1 missing Day Period 1 Day 1 Baseline 5.0 mg h h DAPA 0.1 ng/mL 116.228 ng/mL 116.0 PC SEQ 3.0 missing 0.35 Y Y 157.021

Calculate CHG for post-baseline records

adpc_chg = @chain adpc_base begin
    @rtransform :CHG = (!ismissing(:AVISITN) && :AVISITN > 0 && !ismissing(:AVAL) && !ismissing(:BASE)) ?
                        :AVAL - :BASE : missing
end
first(adpc_chg, 5)
5×92 DataFrame
Row STUDYID DOMAIN USUBJID PCSEQ PCTESTCD PCTEST PCORRES PCORRESU PCSTRESC PCSTRESN PCSTRESU PCSPEC PCLLOQ VISIT VISITNUM PCDTC PCDY PCTPT PCTPTNUM VISITDY ADTM ADT ATM EVID DRUG NFRLT FANLDTM AVISITN AVISIT AVISIT_prev ADTM_prev AENDTM_prev EXDOSE_prev EXDOSE_next AVISIT_next ADTM_next AENDTM_next NFRLT_prev NFRLT_next EXSEQ EXTRT EXDOSE EXDOSU EXDOSFRM EXDOSFRQ EXROUTE EXSTDTC EXSTDY EXENDTC ASTDTM AENDTM ASTDT AENDT HOURS_BETWEEN_DOSES ASTTM AENTM maxdate min_NFRLT AFRLT ARRLT AXRLT PCRFTDTM FANLDT FANLTM PCRFTDT PCRFTTM NRRLT NXRLT PARCAT1 ATPTN ATPT ATPTREF ABLFL BASETYPE DOSEA DOSEU FRLTU RRLTU PARAMCD ALLOQ AVAL AVALU AVALCAT1 SRCDOM SRCVAR SRCSEQ DTYPE MRRLT ANL01FL ANL02FL BASE CHG
String7 String3 String Float64? String7? String15? String15? String7? String15? Float64? String7? String7? String15? String15 Float64 String31? Float64? String31? Float64? Float64? DateTime Date Time? Int64 String Real DateTime Real? String String? DateTime? DateTime? Float64? Float64? String? DateTime? DateTime? Float64? Float64? Float64? String15? Float64? String3? String15? String7? String15? String31? Float64? String31? DateTime? DateTime? Date? Date? Int64? Time? Time? Date Float64 Float64 Real Float64? DateTime? Date Time Date? Any Float64 Float64 String7? Real Abstract… String? String? String Float64? String String String Abstract… String15? Float64 InlineSt… String String3 String Float64 String? Real String String? Float64? Float64?
1 DAPA01 PC DAPA01-001 1.0 DAPA Dapagliflozin 157.021 ng/mL 157.021 157.021 ng/mL plasma 0.1 ng/mL Period 1 Day 1 2.0 2022-06-10 09:30:00 1.0 0-HR POSTDOSE 0.0 1.0 2022-06-10T09:30:00 2022-06-10 09:30:00 0 Dapagliflozin 0 2022-06-10T09:30:00 1 Day Period 1 Day 1 missing missing missing missing 5.0 Day Period 1 Day 1 2022-06-10T09:30:00 2022-06-10T09:30:00 missing 0.0 missing missing missing missing missing missing missing missing missing missing missing missing missing missing missing missing missing 2022-07-03 0.0 0.0 0.0 0.0 2022-06-10T09:30:00 2022-06-10 09:30:00 2022-06-10 09:30:00 0.0 0.0 plasma 0.0 0-HR POSTDOSE Day Period 1 Day 1 missing Day Period 1 Day 1 Baseline 5.0 mg h h DAPA 0.1 ng/mL 157.021 ng/mL 157.0 PC SEQ 1.0 missing 0.0 Y Y 157.021 0.0
2 DAPA01 EX DAPA01-001 missing missing missing missing missing missing missing missing missing missing Period 1 Day 1 2.0 missing missing missing missing 1.0 2022-06-10T09:30:00 2022-06-10 missing 1 Dapagliflozin 0 2022-06-10T09:30:00 missing Day Period 1 Day 1 missing missing missing missing missing missing missing missing missing missing 1.0 Dapagliflozin 5.0 mg Injection ONCE Intravenous 2022-06-10 09:30:00 1.0 2022-06-10 09:30:00 2022-06-10T09:30:00 2022-06-10T09:30:00 2022-06-10 2022-06-10 missing 09:30:00 09:30:00 2022-07-03 0.0 0.0 0 missing 2022-06-10T09:30:00 2022-06-10 09:30:00 2022-06-10 09:30:00 0.0 0.0 missing 0 Dose Day Period 1 Day 1 missing Day Period 1 Day 1 Baseline 5.0 mg h h DOSE missing 5.0 mg 5.0 EX SEQ 1.0 missing 0 Y Y missing missing
3 DAPA01 PC DAPA01-001 1.0 DAPA Dapagliflozin 157.021 ng/mL 157.021 157.021 ng/mL plasma 0.1 ng/mL Period 1 Day 1 2.0 2022-06-10 09:30:00 1.0 0-HR POSTDOSE 0.0 1.0 2022-06-10T09:30:00 2022-06-10 09:30:00 0 Dapagliflozin 0 2022-06-10T09:30:00 1 Day Period 1 Day 1 missing missing missing missing 5.0 Day Period 1 Day 1 2022-06-10T09:30:00 2022-06-10T09:30:00 missing 0.0 missing missing missing missing missing missing missing missing missing missing missing missing missing missing missing missing missing 2022-07-03 0.0 0.0 0.0 0.0 2022-06-10T09:30:00 2022-06-10 09:30:00 2022-06-10 09:30:00 0.0 0.0 plasma -0.5 Pre-dose Day Period 1 Day 1 Y Day Period 1 Day 1 Baseline 5.0 mg h h DAPA 0.1 ng/mL 157.021 ng/mL 157.0 PC SEQ 1.0 COPY 0.0 Y missing 157.021 0.0
4 DAPA01 PC DAPA01-001 2.0 DAPA Dapagliflozin 141.892 ng/mL 141.892 141.892 ng/mL plasma 0.1 ng/mL Period 1 Day 1 2.0 2022-06-10 09:33:00 1.0 0.05-HR POSTDOSE 0.05 1.0 2022-06-10T09:33:00 2022-06-10 09:33:00 0 Dapagliflozin 0 2022-06-10T09:30:00 1 Day Period 1 Day 1 Day Period 1 Day 1 2022-06-10T09:30:00 2022-06-10T09:30:00 5.0 5.0 Day Period 2 Day 1 2022-06-17T09:30:00 2022-06-17T09:30:00 missing 0.0 missing missing missing missing missing missing missing missing missing missing missing missing missing missing missing missing missing 2022-07-03 0.0 0.05 0.05 -167.95 2022-06-10T09:30:00 2022-06-10 09:30:00 2022-06-10 09:30:00 0.0 0.0 plasma 0.05 0.05-HR POSTDOSE Day Period 1 Day 1 missing Day Period 1 Day 1 Baseline 5.0 mg h h DAPA 0.1 ng/mL 141.892 ng/mL 142.0 PC SEQ 2.0 missing 0.05 Y Y 157.021 -15.129
5 DAPA01 PC DAPA01-001 3.0 DAPA Dapagliflozin 116.228 ng/mL 116.228 116.228 ng/mL plasma 0.1 ng/mL Period 1 Day 1 2.0 2022-06-10 09:51:00 1.0 0.35-HR POSTDOSE 0.35 1.0 2022-06-10T09:51:00 2022-06-10 09:51:00 0 Dapagliflozin 0 2022-06-10T09:30:00 1 Day Period 1 Day 1 Day Period 1 Day 1 2022-06-10T09:30:00 2022-06-10T09:30:00 5.0 5.0 Day Period 2 Day 1 2022-06-17T09:30:00 2022-06-17T09:30:00 missing 0.0 missing missing missing missing missing missing missing missing missing missing missing missing missing missing missing missing missing 2022-07-03 0.0 0.35 0.35 -167.65 2022-06-10T09:30:00 2022-06-10 09:30:00 2022-06-10 09:30:00 0.0 0.0 plasma 0.35 0.35-HR POSTDOSE Day Period 1 Day 1 missing Day Period 1 Day 1 Baseline 5.0 mg h h DAPA 0.1 ng/mL 116.228 ng/mL 116.0 PC SEQ 3.0 missing 0.35 Y Y 157.021 -40.793

Add ASEQ

adpc_aseq = @chain adpc_chg begin
           groupby([:STUDYID, :USUBJID])
           @transform :ASEQ = 1:length(:STUDYID)

           @select(Not([:DOMAIN, :PCSEQ, :DRUG, :EVID, :AXRLT, :NXRLT, :VISITDY]))
           @select(Not(r"^orig"))
           @select(Not(r"^min"))
           @select(Not(r"^max"))
           @select(Not(r"^EX"))
           @select(Not(r"next$"))
           @select(Not(r"prev$"))
           @select(Not(r"^PC"))

           leftjoin(param_lookup[:, Not(:PCTESTCD)], on = :PARAMCD) 
       end
first(adpc_aseq, 5)
5×50 DataFrame
Row STUDYID USUBJID VISIT VISITNUM ADTM ADT ATM NFRLT FANLDTM AVISITN AVISIT ASTDTM AENDTM ASTDT AENDT HOURS_BETWEEN_DOSES ASTTM AENTM AFRLT ARRLT FANLDT FANLTM NRRLT PARCAT1 ATPTN ATPT ATPTREF ABLFL BASETYPE DOSEA DOSEU FRLTU RRLTU PARAMCD ALLOQ AVAL AVALU AVALCAT1 SRCDOM SRCVAR SRCSEQ DTYPE MRRLT ANL01FL ANL02FL BASE CHG ASEQ PARAM PARAMN
String7 String String15 Float64 DateTime Date Time? Real DateTime Real? String DateTime? DateTime? Date? Date? Int64? Time? Time? Float64 Real Date Time Float64 String7? Real Abstract… String? String? String Float64? String String String Abstract… String15? Float64 InlineSt… String String3 String Float64 String? Real String String? Float64? Float64? Int64 String? Int64?
1 DAPA01 DAPA01-001 Period 1 Day 1 2.0 2022-06-10T09:30:00 2022-06-10 09:30:00 0 2022-06-10T09:30:00 1 Day Period 1 Day 1 missing missing missing missing missing missing missing 0.0 0.0 2022-06-10 09:30:00 0.0 plasma 0.0 0-HR POSTDOSE Day Period 1 Day 1 missing Day Period 1 Day 1 Baseline 5.0 mg h h DAPA 0.1 ng/mL 157.021 ng/mL 157.0 PC SEQ 1.0 missing 0.0 Y Y 157.021 0.0 1 Pharmacokinetic concentration of Dapagliflozin 1
2 DAPA01 DAPA01-001 Period 1 Day 1 2.0 2022-06-10T09:30:00 2022-06-10 missing 0 2022-06-10T09:30:00 missing Day Period 1 Day 1 2022-06-10T09:30:00 2022-06-10T09:30:00 2022-06-10 2022-06-10 missing 09:30:00 09:30:00 0.0 0 2022-06-10 09:30:00 0.0 missing 0 Dose Day Period 1 Day 1 missing Day Period 1 Day 1 Baseline 5.0 mg h h DOSE missing 5.0 mg 5.0 EX SEQ 1.0 missing 0 Y Y missing missing 2 Dapagliflozin Dose 2
3 DAPA01 DAPA01-001 Period 1 Day 1 2.0 2022-06-10T09:30:00 2022-06-10 09:30:00 0 2022-06-10T09:30:00 1 Day Period 1 Day 1 missing missing missing missing missing missing missing 0.0 0.0 2022-06-10 09:30:00 0.0 plasma -0.5 Pre-dose Day Period 1 Day 1 Y Day Period 1 Day 1 Baseline 5.0 mg h h DAPA 0.1 ng/mL 157.021 ng/mL 157.0 PC SEQ 1.0 COPY 0.0 Y missing 157.021 0.0 3 Pharmacokinetic concentration of Dapagliflozin 1
4 DAPA01 DAPA01-001 Period 1 Day 1 2.0 2022-06-10T09:33:00 2022-06-10 09:33:00 0 2022-06-10T09:30:00 1 Day Period 1 Day 1 missing missing missing missing missing missing missing 0.05 0.05 2022-06-10 09:30:00 0.0 plasma 0.05 0.05-HR POSTDOSE Day Period 1 Day 1 missing Day Period 1 Day 1 Baseline 5.0 mg h h DAPA 0.1 ng/mL 141.892 ng/mL 142.0 PC SEQ 2.0 missing 0.05 Y Y 157.021 -15.129 4 Pharmacokinetic concentration of Dapagliflozin 1
5 DAPA01 DAPA01-001 Period 1 Day 1 2.0 2022-06-10T09:51:00 2022-06-10 09:51:00 0 2022-06-10T09:30:00 1 Day Period 1 Day 1 missing missing missing missing missing missing missing 0.35 0.35 2022-06-10 09:30:00 0.0 plasma 0.35 0.35-HR POSTDOSE Day Period 1 Day 1 missing Day Period 1 Day 1 Baseline 5.0 mg h h DAPA 0.1 ng/mL 116.228 ng/mL 116.0 PC SEQ 3.0 missing 0.35 Y Y 157.021 -40.793 5 Pharmacokinetic concentration of Dapagliflozin 1
for col in names(adpc_aseq)
    adpc_aseq[!, col] = replace(adpc_aseq[!, col], missing => "missing")
end
first(adpc_aseq, 5)
5×50 DataFrame
Row STUDYID USUBJID VISIT VISITNUM ADTM ADT ATM NFRLT FANLDTM AVISITN AVISIT ASTDTM AENDTM ASTDT AENDT HOURS_BETWEEN_DOSES ASTTM AENTM AFRLT ARRLT FANLDT FANLTM NRRLT PARCAT1 ATPTN ATPT ATPTREF ABLFL BASETYPE DOSEA DOSEU FRLTU RRLTU PARAMCD ALLOQ AVAL AVALU AVALCAT1 SRCDOM SRCVAR SRCSEQ DTYPE MRRLT ANL01FL ANL02FL BASE CHG ASEQ PARAM PARAMN
String String String Any Any Any Any Any Any Any String Any Any Any Any Any Any Any Any Any Any Any Any String Any Abstract… String String String Any String String String Abstract… String Any String String String String Any String Any String String Any Any Any String Any
1 DAPA01 DAPA01-001 Period 1 Day 1 2.0 2022-06-10T09:30:00 2022-06-10 09:30:00 0 2022-06-10T09:30:00 1 Day Period 1 Day 1 missing missing missing missing missing missing missing 0.0 0.0 2022-06-10 09:30:00 0.0 plasma 0.0 0-HR POSTDOSE Day Period 1 Day 1 missing Day Period 1 Day 1 Baseline 5.0 mg h h DAPA 0.1 ng/mL 157.021 ng/mL 157.0 PC SEQ 1.0 missing 0.0 Y Y 157.021 0.0 1 Pharmacokinetic concentration of Dapagliflozin 1
2 DAPA01 DAPA01-001 Period 1 Day 1 2.0 2022-06-10T09:30:00 2022-06-10 missing 0 2022-06-10T09:30:00 missing Day Period 1 Day 1 2022-06-10T09:30:00 2022-06-10T09:30:00 2022-06-10 2022-06-10 missing 09:30:00 09:30:00 0.0 0 2022-06-10 09:30:00 0.0 missing 0 Dose Day Period 1 Day 1 missing Day Period 1 Day 1 Baseline 5.0 mg h h DOSE missing 5.0 mg 5.0 EX SEQ 1.0 missing 0 Y Y missing missing 2 Dapagliflozin Dose 2
3 DAPA01 DAPA01-001 Period 1 Day 1 2.0 2022-06-10T09:30:00 2022-06-10 09:30:00 0 2022-06-10T09:30:00 1 Day Period 1 Day 1 missing missing missing missing missing missing missing 0.0 0.0 2022-06-10 09:30:00 0.0 plasma -0.5 Pre-dose Day Period 1 Day 1 Y Day Period 1 Day 1 Baseline 5.0 mg h h DAPA 0.1 ng/mL 157.021 ng/mL 157.0 PC SEQ 1.0 COPY 0.0 Y missing 157.021 0.0 3 Pharmacokinetic concentration of Dapagliflozin 1
4 DAPA01 DAPA01-001 Period 1 Day 1 2.0 2022-06-10T09:33:00 2022-06-10 09:33:00 0 2022-06-10T09:30:00 1 Day Period 1 Day 1 missing missing missing missing missing missing missing 0.05 0.05 2022-06-10 09:30:00 0.0 plasma 0.05 0.05-HR POSTDOSE Day Period 1 Day 1 missing Day Period 1 Day 1 Baseline 5.0 mg h h DAPA 0.1 ng/mL 141.892 ng/mL 142.0 PC SEQ 2.0 missing 0.05 Y Y 157.021 -15.129 4 Pharmacokinetic concentration of Dapagliflozin 1
5 DAPA01 DAPA01-001 Period 1 Day 1 2.0 2022-06-10T09:51:00 2022-06-10 09:51:00 0 2022-06-10T09:30:00 1 Day Period 1 Day 1 missing missing missing missing missing missing missing 0.35 0.35 2022-06-10 09:30:00 0.0 plasma 0.35 0.35-HR POSTDOSE Day Period 1 Day 1 missing Day Period 1 Day 1 Baseline 5.0 mg h h DAPA 0.1 ng/mL 116.228 ng/mL 116.0 PC SEQ 3.0 missing 0.35 Y Y 157.021 -40.793 5 Pharmacokinetic concentration of Dapagliflozin 1