ADSL

ADaM Day 1

In clinical trials, ADSL(Subject-Level Analysis Dataset) is the foundation of all ADaM analysis dataset, it is one record per subjects; it captures subjects’ population flag 🚩, treatment-related info, vital sign info♂, baseline disease info, and other info respect to different study designs.

realworkhard / Pixabay

 

General Steps:

  1. Import any Disease related document in excel or csv format,
    ex: Lines of Antilymphoma Therapy

      2. Demographic Dataset (raw.dm)
          Ex. studyid , subjid , siteid, age=(infcdt-birth+1)/365.25 , sex, race, agegrp

      3. Treatment Discontinuation from ECRF page & Study Discontinuation

data ds;
set ds::
where pagename="Treatment Disposition";
if statusn=1 then status1="Completed";
if statusn=2 then status2="Discontinued";
dsreas= strip(dsterm);
keep pt dsdt dstreas dstreasn ;
run;

          4. Death Info

data death;
set raw.dth;
if dsdt>.;
dthreas=strip(dscause);
keep pt dthdt dthreas ptnm;
run;

        5. Exposure of Study Treatment

treatment start/end date, cycle length info, treatment group

proc sql noprint;
create table ex as select unique pt,
  min(exstdt) as trsdt format=date9. label="First Dose Date", 
    max(exendt) as tredt format=date9. label="Last Dos Date"
    from raw.ex where exdose > .
  group by pt order by pt;
quit;

           

        6. Chemistry Lab test results.

data chem;
set raw.chem;
run;

baseline creatinine, LDH

     

          7. Disease Stage History: Initial Diagnosis, Enrollment

xSTIN: stage at Initial Diagnosis
Value : I, II, III, IV , unknown

xSTEN: Stage at Enrollment 
Value : I, II, III, IV, 
*note: xSTEN there is no-unknown

         

           8.  Prior Radiation

data rad;
set raw.prt;
by pt prtstdtf repeatsn;
if first.prtstdtf;
run;

         

           9. Prior Systemic Therapy Lines

data pline;
set raw.psata;
keep patstdt patendt patseqn(prior therapy/reginmen number);
run;

data nsys;
     retain nsystem 0;
     set pline;
     by pt patseqn;
     if first.pt then nsystem = 1;
     else nsystem+1;
     if last.pt;
     drop patseqn; 
run;

         

          10. Other prior anti-cancer therapy

proc sort data= raw.psata out=pr1(keep=pt genrnm repeatsn);
     by pt genrnm repeatsn;
  where pagename="Other Prior Anti-Cancer Therapies for this Disease";
run;

           

          11. Baseline Chemo Lab Result
                    Ex: (LDH, Creatine )

*LDH example;
data lab2;
     length bldhg $30 bldhgrp $30 ;
     set lab2;
   by pt lbdt;
   if last.pt;
   if 53 <= labval <= 234 then do;
        bldhg = "Normal";
     end; 
   else if labval > 234 then do;
        bldhg = "> Upper limit of normal (ULN)";
     end;
run;

 

          12. Reproductive Status

proc sort data=raw.pt out=pt2(keep= pt child);
     where CHILD ne '';
   by pt;
run;

data dm;
merge dm(in=a) pt2(in=b);
by pt;
run;

data dm;
set dm;
if sex="F" and child="Yes" then repro="Y";
if sex="F" and child="No" then repro="N";
drop child;
run;

 

          13. VS: Height, Weight, BSA, BMI

proc sort data=raw.vs1 out=vsn(keep=ht wt pt vsdt) nodupkey;
     by pt descending vsdt;
run;

data vs_new1;
     merge vsn(in=a) ex(keep=pt tr01sdt);
   by pt;
   if . < vtdt <= tr01sdt;
run;

data vs_new2;
     set vs_new1;
   by pt vtdt;
     if last.pt;
bsa= sqrt((bheight*bweight)/3600);
bmi= bweight/((bheight*0.01)**2);
run;

 

             14. ECG, ECOG Performance Status at Enrollment (Screening)

ECG.EGINTP where visit=1
S_QS2.SQSRES2 where visit=1 (VISNAME='Screening (Day -28 to -1)')

   

        15. Refractory and Relapse 

Refractory: does not respond to treatment

Relapse: despite the best care and significant progress made in treatment, cancer comes back

 

         16. Miscellaneous :

Prior stem Cell Therapy,  Other prior anti-cancer therapy, Bone Marrow, X-Sympton at Screening, Eligibility (raw.elig, eligyn=”yes”), Follow up (raw.fugate, entfuv=”yes”)

   

          17, Population Flag.

Safety Flag, ITT Population Flag, Efficacy Evaluable Flag
note: each study has different rules of derivations.

   

 Final ADSL Dataset Wrap up:

 

data adsl;
  format trtedt date9.;
  merge dm(in=dm) ex(in=ex death rand(in=rand)  nhl enroll vs nhlhis creat  
        ecog ecg elig(in=elig) crcl fu  spd  nprit ivr lab2 hema2 BSYMPT bc(in=bc) ;
  by pt;
  if dm;

  rename cycdrug1=ncyclen cycdrug2=ncycrit last1=LCYCLEN last2=LCYCRIT
      ;
      label
        SEXN = "Gender"
        agegrp1N = "Age group (N) <x vs >=x"
        RACEGR1N = "Race";
 run;

 

Dummy ADSL Dataset with Label

 

 

 

Note: since every study design is different, there is no one-fits-all formula for creating ADSL dataset. I hope these descriptions provide a general idea of ADSL dataset ☺.
Thanks Moe and Xueying explain the Refractory and Relapse concept to me!

Happy Practicing! 😎

Leave a Reply

This site uses Akismet to reduce spam. Learn how your comment data is processed.

Social media & sharing icons powered by UltimatelySocial
%d bloggers like this: