Announcement

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

  • Local variables with mutiple loops

    Hello everyone,

    I am currently struggling with a foreach command. I would like to make several regression with different variables, where only the prefix change, at once . Here is my code :

    Code:
    local variable pca_r_stock pca_r_hous
    local country ea fr de es it
    local forward F0 F1 F2 F3 F4 F5 F6 F7 F8 F9 F10 F11 F12 F13 F14 F15 F16 F17 F18 F19 F20 F21 F22 F23 F24
    foreach var of local variable {
    foreach countr of local country {
    foreach lead of local forward {
    newey `lead'.`countr'_`var' mpshock_rr L(1/2).`countr'_`var', lag(3)
    global mpshock_rr "mpshock_rr"
    lincom $mpshock_rr
    scalar p_c_`lead'_`countr'_`var'=r(estimate)
    scalar p_se_`lead'_`countr'_`var'=r(se)
    scalar p_a1_`lead'_`countr'_`var'= p_c_`lead'_ `countr'_`var'+ 1*p_se_`lead'_`countr'_`var'
    scalar p_b1_`lead'_`countr'_`var' = p_c_`lead'_`countr'_`var' - 1*p_se_`lead'_`countr'_`var'
    scalar p_a2_`lead'_`countr'_`var' = p_c_`lead'_`countr'_`var' + 2*p_se_`lead'_`countr'_`var'
    scalar p_b2_`lead'_`countr'_`var' = p_c_`lead'_`countr'_`var' - 2*p_se_`lead'_`countr'_`var'
    matrix alpha11=nullmat(alpha11), p_a2_`lead'_`countr'_`var'
    matrix alpha12=nullmat(alpha12), p_a1_`lead'_`countr'_`var'
    matrix alpha13=nullmat(alpha13), p_c_`lead'_`countr'_`var'
    matrix alpha14=nullmat(alpha14), p_b1_`lead'_`countr'_`var'
    matrix alpha15=nullmat(alpha15), p_b2_`lead'_`countr'_`var'
    matrix alpha16=alpha11\alpha12\alpha13\alpha14\alpha15
    }
    local country is only used to change a part of the name of the variable, changing then the data.
    One regresion is made but I then have this error message :

    Code:
    p_c_F0_ not found
    program error:  code follows on the same line as close brace
    I tested this form :

    Code:
    local variable ea_pca_r_stock ea_pca_r_hous
    local forward F0 F1 F2 F3 F4 F5 F6 F7 F8 F9 F10 F11 F12 F13 F14 F15 F16 F17 F18 F19 F20 F21 F22 F23 F24
    foreach var of local variable {
    foreach lead of local forward {
    newey `lead'.`var' mpshock_rr L(1/2).`var', lag(3)
    global mpshock_rr "mpshock_rr"
    lincom $mpshock_rr
    scalar p_c_`lead'_`var'=r(estimate)
    scalar p_se_`lead'_`var'=r(se)
    scalar p_a1_`lead'_`var' = p_c_`lead'_`var' + 1*p_se_`lead'_`var'
    scalar p_b1_`lead'_`var' = p_c_`lead'_`var' - 1*p_se_`lead'_`var'
    scalar p_a2_`lead'_`var' = p_c_`lead'_`var' + 2*p_se_`lead'_`var'
    scalar p_b2_`lead'_`var' = p_c_`lead'_`var' - 2*p_se_`lead'_`var'
    matrix alpha11=nullmat(alpha11), p_a2_`lead'_`var'
    matrix alpha12=nullmat(alpha12), p_a1_`lead'_`var'
    matrix alpha13=nullmat(alpha13), p_c_`lead'_`var'
    matrix alpha14=nullmat(alpha14), p_b1_`lead'_`var'
    matrix alpha15=nullmat(alpha15), p_b2_`lead'_`var'
    matrix alpha16=alpha11\alpha12\alpha13\alpha14\alpha15
    }
    matrix alpha16=alpha16'
    svmat alpha16, names(mpshock_rr_`var'_)
    mat list alpha16
    scalar drop _all
    mat drop _all
    gen pos_mpshock_rr_`var'_3 = mpshock_rr_`var'_3
    gen neg_mpshock_rr_`var'_3 = -mpshock_rr_`var'_3
    }

    and it perfectly works. I do not really understand why "p_c_F0_ea_pca_r_stock" for example can not be created (and found).

    I would be very grateful if anyone knows where is my mistake(s),

    Thank to you all !

  • #2
    Typo. I think. Look at

    Code:
     
     scalar p_a1_`lead'_`countr'_`var'= p_c_`lead'_ `countr'_`var'+ 1*p_se_`lead'_`countr'_`var'
    where a space has been inserted by accident. Should be


    Code:
     
     scalar p_a1_`lead'_`countr'_`var'= p_c_`lead'_`countr'_`var'+ 1*p_se_`lead'_`countr'_`var'

    Comment


    • #3
      Bravo Nick Cox, that was a hard one to catch. I just cancelled the space and it works perfectly. Thank you very much !

      Comment

      Working...
      X