Search code examples
loopsmatrixstata

End Loop when significant value found : Stata?


could you help me in figuring out: ho do i tell Stata to end the loop over iterations when it finds the first positive and significant value of a particular coefficient in a regression.

Here is a small sample using publicly available dataset that shows what I am trying to do: In the following case, I want stata to stop looping when it finds the "year" coefficient to be positive and significant.

set more off
clear all
clear matrix
use http://www.stata-press.com/data/r13/abdata
forvalues i=1/8{
xtabond n w k ys year, lags(`i') noconstant
matrix b = e(b)'
mat byear = b["year",1]
if `i'==1  matrix byear=b["year",1]
else matrix byear=(byear\ b["year",1])
}

Could you please help in figuring out how to tell stata to stop looping when it finds a condition is met.

Thank you


Solution

  • Here is some code that seems to do what you want. I had to set the confidence level to 80 (from the default of 95) so it would terminate before it exceeded the maximum number of lags.

    set more off
    clear all
    clear matrix
    set level 80
    use http://www.stata-press.com/data/r13/abdata
    forvalues i=1/8{
    quietly xtabond n w k ys year, lags(`i') noconstant
    matrix t = r(table)
    scalar b = t[rownumb(t,"b"),colnumb(t,"year")]
    scalar p = t[rownumb(t,"pvalue"),colnumb(t,"year")]
    scalar r = 1-r(level)/100
    scalar q = (b>0) & (p<=r)
    if q {
        display "success with `i' lags"
        display "b: " b " p: " p " r: " r " q: " q
        xtabond
        continue, break
        }
    else {
        display "no luck with `i' lags"
        }
    }
    

    which yields

    no luck with 1 lags
    success with 2 lags
    b: .00759529 p: .18035747 r: .2 q: 1
    
    Arellano-Bond dynamic panel-data estimation     Number of obs     =        611
    Group variable: id                              Number of groups  =        140
    Time variable: year
                                                    Obs per group:
                                                                  min =          4
                                                                  avg =   4.364286
                                                                  max =          6
    
    Number of instruments =     31                  Wald chi2(6)      =    1819.55
                                                    Prob > chi2       =     0.0000
    One-step results
    ------------------------------------------------------------------------------
               n |      Coef.   Std. Err.      z    P>|z|     [80% Conf. Interval]
    -------------+----------------------------------------------------------------
               n |
             L1. |   .3244849   .0774312     4.19   0.000     .1727225    .4762474
             L2. |  -.0266879   .0363611    -0.73   0.463    -.0979544    .0445785
                 |
               w |  -.5464779   .0562155    -9.72   0.000    -.6566582   -.4362975
               k |    .360622   .0330634    10.91   0.000     .2958189    .4254252
              ys |   .5948084   .0818672     7.27   0.000     .4343516    .7552652
            year |   .0075953   .0056696     1.34   0.180    -.0035169    .0187075
    ------------------------------------------------------------------------------
    Instruments for differenced equation
            GMM-type: L(2/.).n
            Standard: D.w D.k D.ys D.year
    
    . 
    end of do-file