Sunday, April 28, 2013

Age Calculation in Clinical Trial Data Analysis with SAS Examples


In clinical trials, subject’s age is a critical demographic variable that needs to be collected. Age may be used in checking the inclusion/exclusion criteria, in sub-group analysis, in prognostic factor analysis, and so on. However, the Age variable is not directly collected on the case report form. Instead, the birth date is collected. Subject’s age will then need to be calculated based on the birth date and the date of screening visit. There are many ways in calculating the age and the results are slightly different. There seems to be no consensus in industry or CDISC indicating which method should be used. There was a paper discussing “How to Create Variables Related to Age”, some of the new functions were not included in the discussion.

Since we use SAS to analyze the clinical trial data, I listed the various ways to calculate the Age using SAS.

/*Macro AGE1 uses SAS INTCK function*/
%macro age1(from=,to=);
   intck ('year', &from, &to) -
       ((month(&to) < month(&from)) or
       ((month(&to) = month(&from)) and (day(&to) < day(&from))));
%mend;

/*Macro AGE2 uses SAS INTCK function*/
%macro age2(from=,to=); 
      floor ((intck('month',&from,&to) - (day(&to) < day(&from))) / 12)
%mend age2;


data try;
  input bdate date9. idate date9.;
  age1=%age1(from=bdate,to=idate); 
  age2=%age2(from=bdate, to=idate);
  age3=yrdif(bdate,idate, 'Age');       *This method uses SAS YRDIF function;
  age365=(idate-bdate)/365;           *This method uses 365 as divider;
  age36525=(idate-bdate)/365.25;  *This method uses 365.25 as divider;
  age36525plus1=Floor(((idate-bdate)+1)/365.25);   *This method adds 1 and the divide by 365.25;
datalines;
01JAN12  31DEC12    /*this is one day short of one year*/
01JAN12  31DEC12    /*this is exactly one year*/
31DEC12  01JAN13    /*this is exactly one day, but cross the year*/
01JAN04  01JAN13    /*this is exactly nine years*/
01JUL12  01JAN13    /*this is 184 days*/
;
run;
proc print;
format bdate date9. idate date9.;
run;

bdate
idate
age1
age2
age3
age365
age36525
age36525
plus1
01JAN2012
31DEC2012
0
0
1.00000
1.00000
0.99932
1
01JAN2012
01JAN2013
1
1
1.00000
1.00274
1.00205
1
31DEC2012
01JAN2013
0
0
0.00278
0.00274
0.00274
0
01JAN2004
01JAN2013
9
9
9.00000
9.00822
9.00205
9
01JUL2012
01JAN2013
0
0
0.50000
0.50411
0.50376
0

Based on the outputs, the calculation using YRDIF seems to be a good option. The use of YRDIF function is detailed in the SAS online document. The simple way using 365.25 as divider is actually a pretty good option. There is also an article in SAS blog discussing this. For an adult study, all of these approaches in calculating Age seem to be ok. However, for pediatric studies, different approaches could give quite bit different Age calculations.  

On the regulatory side, there seems to be various ways in calculating the Age based on the documents submitted to FDA. In BLA 125145, Age in month was calculated as (1st vaccination date - Date of birth + 1) / (365.25/12). In SBA for EUFLEXXA approval, Age was calculated as: age = (date of informed consent - date of birth) / 365.25. In clinical review document for Actemra, the duration in study (in years) was calculated as:  
Duration in study (years) = (date of last assessment – date of first TCZ dose +1) 365.25).