Announcement

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

  • running a loop n times with different outcome variables and storing the beta, standard error and p values

    Hi, STATA people,

    I have 12000 obs. I want to randomly assign fake treatment within each year with stipulated treatment and run the regression. I want to repeat this procedure 100 times. This is what my code is. I am unable to store the beta and standard values in the matrix format.

    Also after
    Code:
    matrix p = J(100,`l',.)
    STATA is issuing
    invalid syntax
    r(198);

    Any help is appreciated. Struggling for a long time


    Code:
    set more off, permanently
    set matsize 8000
    set seed 8600
    unab y : wheat lentils rice
    local l : word count `y'
    matrix p = J(100,`l',.)              
    matrix colnames p =`y'
    matrix b= J(100,`l',.)
    matrix s= J(100,`l',.)
    matrix colnames b =b `y'
    matrix colnames s=se `y'
     forvalues i = 1/100 {
    generate random=uniform()
    gen byte treat= .
    sort year random
    by year: replace treat= (_n <=28) if (year == 1991)    //1991    28
    by year: replace treat= (_n <=18) if (year == 1992)    //1992    18
    by year: replace treat= (_n <=19) if (year == 1993)     //1993    19
    by year: replace treat= (_n <=53) if (year == 1994)    //1994    53
    by year: replace treat= (_n <=53) if (year == 1995)     //1995    53
    by year: replace treat= (_n <=68) if (year == 1996)    //1996    68
    by year: replace treat= (_n <=58) if (year == 1997)     //1997    58
    by year: replace treat= (_n <=26) if (year == 1998)     //1998    26
    by year: replace treat= (_n <=19) if (year == 1999)    //1999    19
    by year: replace treat= (_n <=19) if (year == 2000)    //2000    19
    by year: replace treat= (_n <=19) if (year == 2001)     //2001    19
    by year: replace treat= (_n <=19) if (year == 2002)     //2002    19
    by year: replace treat= (_n <=19) if (year == 2003)    //2003    19
    by year: replace treat= (_n <=19) if (year == 2004)    //2004    19
    by year: replace treat= (_n <=19) if (year == 2005)    //2005    19
    by year: replace treat= (_n <=19) if (year == 2006)    //2006    19
    by year: replace treat= (_n <=38) if (year == 2007)    //2007    38
    by year: replace treat= (_n <=19) if (year == 2008)    //2008    19
    by year: replace treat= (_n <=19) if (year == 2009)     //2009    19
    by year: replace treat= (_n <=19) if (year == 2010)    //2010    19
    by year: replace treat= (_n <=19) if (year == 2011)    //2011    19
    by year: replace treat= (_n <=19) if (year == 2012)    //2012    19
    by year: replace treat= (_n <=19) if (year == 2013)    //2013    19
    by year: replace treat= (_n <=29) if (year == 2014)    //2014    29
    by year: replace treat= (_n <=29) if (year == 2015)    //2015    29
    by year: replace treat= (_n <=40) if (year == 2016)    //2016    40
    
    foreach x of local i{
     local j = 1
    foreach var of local y{
    quietly reg `var' treat i.country_id  i.year i.country_id#c.line_time_trend [aw=ypop], cluster( country_id)
     matrix b[`i',`j++']= get(_b)
    matrix s[`i',`j++']=get(_se)
    matrix p[`i ',`j++'] = 2*ttail(e(df_r), abs(_b[treat]/_se[treat]))
     }
    drop random
    drop treat
    // local ++i
    }
    
    
    
    // convert to dataset
    // clear
    svmat p, names(col)
    svmat b', names(matnames)
    svmat s, names(matnames)

  • #2
    There is a procedure to automatically write the output of such estimations to a data set - I think Clyde has mentioned it on this listserve.
    If you want these as data, why not
    g b=.
    g se=.
    local a=0
    foreach var .... (whatever) {
    local a=`a'+1
    regress y treat
    replace b=_b[treat] in `a'/`a'
    replace se=_se[treat] in `a'/`a'
    }

    Comment

    Working...
    X