Announcement

Collapse
No announcement yet.
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • test -ralloc- please ignore



    Curiously, in the almost 20 year use of -ralloc- nobody has ever asked me this.
    First, the combination of the treatment allocation file and a patient file was never in the scope of -ralloc-. (However strange that may sound.)
    Second, the example file -raltest6.dta- is used by -ralloc- to set the design paramters of the treatment allocation file. It has nothing (directly) to do with patients.

    To do what Gaby wishes requires a merging of the -ralloc- produced treatment allocation file and a patient list in, presumably, another stata .dta file. If there are no strata involved, then a straightforward 1:1 sequential merge should do it, with the treatment file as the master file and the patient file as the using file. But I suspect that Gaby will have strata defined, say, hospital and/or agegroup and/or sex.

    A challenge here is that we would like to -merge- on the stratum identifiers but this requires a sort on those variables and this will almost certainly disrupt the original treatment allocation order (defined by blocks and sequence within blocks). I believe the best way to cope with this is to disaggregate both the treatment file and the patient file into stratum specific files. As far as the treatment file goes, -ralloc- will do this automatically with the -multif- option. It is not hard to do this with a patient file.
    To demonstrate how a scheme might work I offer the following code, based on a small data set.
    Code:
    /*  assume, just as an example:
    
        randomisation schema file is raltest_x.dta
        
        aggregated random treatment allocation file will be randomRx.dta
        
        there are 2 stratum variables (centre and agegrp, with 3 and 2 strata resp.)
        
        stratum specific random allocation files (3x2=6) are produced by ralloc
        
        ralloc command is: ralloc b s t, saving(randomRx) using(raltest_x)
                   count(freq) idvar(RxID) multif
                   
        aggregated patient file name is patient_list.dta
        
        each observation in data file patient_list.dta will have a unique
        patient name or identifier and that patient's stratum value(s).
        The stratum variable names must be the same as those in the random
        treatment allocation file produced by -ralloc-, here, centre and agegrp.
        
        stratum specific patient files will be named pat_list_i_j.dta
                   
    */    
    
    ** create raltest_x.dta with 3 centres and 2 age groups **
    
    clear
    input byte(centre agegrp freq)
    1 1 4
    1 2 6
    2 1 4
    2 2 7
    3 1 3
    3 2 4
    end
    
    save raltext_x, replace
    
    
    ** run -ralloc- and create stratum-specific treatment allocation files **
    
    ralloc b s t, saving(randomRx) using(raltest_x) count(freq) idvar(RxID) multif
    
    
    ** create patient_list.dta **
    
    clear
    input byte(centre agegrp) str6 name
    1 1 "Jim"   
    1 2 "Mary"  
    1 1 "Bob"   
    1 1 "Claire"
    2 1 "Tim"   
    2 2 "Debbie"
    3 2 "Claude"
    3 1 "Kevin"
    3 2 "Dave"  
    3 1 "Ben"   
    end
    
    save patient_list, replace
    
    
    ** make some local macros (one for each stratum variable in the patient file) **
    
    summ centre, meanonly
    local max_cent = r(max)
    summ agegrp, meanonly
    local max_age = r(max)
    
    
    ** Make stratum specific data files from the original aggregated patient file **
    
    clear
    
    forvalues i=1/`max_cent' {
    forvalues j=1/`max_age' {
    use patient_list, clear
    d
    keep if centre==`i' & agegrp==`j'
    l
    save pat_`i'_`j', replace
    }
    }
    
    ** merge each stratum specific patient file with its matching treatment file **
    ** use a sequential merge - original order of observations in randomRx files **
    ** must NOT be altered by any -merge- that requires a =sort-                    **
    
    forvalues i=1/`max_cent' {
    forvalues j=1/`max_age' {
    use randomRx_`i'_`j'
    merge 1:1 _n using pat_`i'_`j'
    save ranpat_`i'_`j', replace
    }
    }
    
    ** append the stratum specific files back into one aggregated file**
    
    clear
    forvalues i=1/`max_cent' {
    forvalues j=1/`max_age' {
    append using ranpat_`i'_`j'
    save ranpat_all, replace
    }
    }
    
    ** now be certain the original allocation sequence has been preserved **
    
    sort b Seq
    
    list
    
    ** and you may wish eventually to:  -keep if _merge==3-

Working...
X