In a loop syntax, I need to define a program and do some calculating, however, Stata breaked when encountering "end", however, the "end" if for the defined program, not for the loop. How to tell
Stata this?
Code:
foreach varMed of varlist moderator {


                capture program drop ModMed
                program define ModMed, rclass
                quietly summarize `varMod'
                    local m=r(mean)
                    local sd=r(sd)

                cap  noisily reg `varMed' cl.`varIV'##c.`varMod'
                    if  _rc==0 {
                    return scalar al=(_b[`varMed':L.`varIV']+_b[`varMed':cL.`varIV'#c.`varMod']*(`m'-1*`sd'))
                    return scalar a=(_b[`varMed':L.`varIV']+_b[`varMed':cL.`varIV'#c.`varMod']*(`m'))
                    return scalar ah=(_b[`varMed':L.`varIV']+_b[`varMed':cL.`varIV'#c.`varMod']*(`m'+1*`sd'))
                    }
                cap  noisily reg `varDV'  cl.`varIV'##c.`varMod' Mediator  
                    if  _rc==0 {
                    return scalar b=(_b[`varDV':cL.gp`varMed'])
                    }
                end

                

                cap bootstrap belowMean=(r(al)*r(b)) mean=(r(a)*r(b)) aboveMean=(r(ah)*r(b)) , reps(50) seed(1234) : ModMed
                cap estat bootstrap