/* Input the data */ data sample; input id time conc lasttime lastconc cmax tmax weight @@; lconc=log(conc); cards; 1 0.0 0.00 8.0 0.54 3.50 4.0 0 1 0.5 0.00 8.0 0.54 3.50 4.0 0 1 1.0 1.15 8.0 0.54 3.50 4.0 0 1 1.5 1.98 8.0 0.54 3.50 4.0 0 1 2.0 2.82 8.0 0.54 3.50 4.0 0 1 3.0 3.43 8.0 0.54 3.50 4.0 0 1 4.0 3.50 8.0 0.54 3.50 4.0 0 1 5.0 2.79 8.0 0.54 3.50 4.0 1 1 6.0 1.64 8.0 0.54 3.50 4.0 1 1 7.0 0.93 8.0 0.54 3.50 4.0 1 1 8.0 0.54 8.0 0.54 3.50 4.0 1 2 0.0 0.00 8.0 0.57 3.53 3.0 0 2 0.5 0.00 8.0 0.57 3.53 3.0 0 2 1.0 1.20 8.0 0.57 3.53 3.0 0 2 1.5 2.01 8.0 0.57 3.53 3.0 0 2 2.0 2.92 8.0 0.57 3.53 3.0 0 2 3.0 3.53 8.0 0.57 3.53 3.0 0 2 4.0 3.51 8.0 0.57 3.53 3.0 0 2 5.0 2.81 8.0 0.57 3.53 3.0 1 2 6.0 1.69 8.0 0.57 3.53 3.0 1 2 7.0 1.00 8.0 0.57 3.53 3.0 1 2 8.0 0.57 8.0 0.57 3.53 3.0 1 ; /* Print the data set SAMPLE */ proc print data=sample noobs; run; /* PROC MODEL code to run regression and calculate */ /* pharmacokinetic and regression parameters */ /* by patient identifier ID */ proc model data=sample; by id; endogenous lconc; exogenous time; parms int k; lconc=int-k*time; pred=.; if weight=1 or time=lasttime then pred=exp(pred.lconc); h=time*conc; /* Linear trapezoidal rule */ if time le tmax then do; auc=zlag(auc)+(time-zlag(time))*(conc+zlag(conc))/2; aumc=zlag(aumc)+(time-zlag(time))*(h+zlag(h))/2; end; /* Log trapezoidal rule */ if time gt tmax then do; /* Make correction to prevent zero divide under */ /* log trap method. This converts the calculation */ /* to a linear trap method. */ if h=lag(h) or conc=lag(conc) then do; auc=zlag(auc)+(time-lag(time))*(conc+lag(conc))/2; aumc=zlag(aumc)+(time-lag(time))*(h+lag(h))/2; end; else do; /* Log trapezoidal rule calculation */ auc=zlag(auc)+(time-lag(time))*(lag(conc)-conc)/ (log(lag(conc) /conc) aumc=zlag(aumc)+(time-lag(time))*(lag(h)-h)/ (log(lag(h)/h)); end; end; /* Half-life calculation */ k_hl=log(2)/k; /* Estimate the equation */ fit lconc/out=outmod(drop=_estype_ _type_ _weight_) outactual; /* Specify created variables to output */ outvars pred auc aumc k k_hl; /* Specify input data set variables to output */ id conc weight tmax cmax; weight weight; run; quit; /* Print pharmacokinetic results */ proc print data=outmod noobs uniform; run;