*! version 1.0.0 16Apr2004 AS program define meta_lr version 8.2 set more off syntax varlist(min=4) [if] [in] [, STratify combine WEighting EForm Fix ylab id(string) BLPattern(passthru) BLColor(passthru) /* */ Symbol(passthru) msize(passthru) mcolor(passthru) XSCale(passthru) YSCale(passthru) xline(passthru) XLABel(passthru) /* */ YTItle(passthru) XTItle(passthru) SCHeme(passthru)] qui{ preserve marksample touse, novarlist keep if `touse' } global fix `fix' global eform `eform' tokenize `varlist' global llrpos `1' global llrposse `2' global llrneg `3' global llrnegse `4' macro shift 4 global varlist2 `*' capture assert $llrposse > 0 if _rc ~=0{ di in re "standard error must not be negative" exit 198 } capture assert $llrnegse > 0 if _rc ~=0{ di in re "standard error must not be negative" exit 198 } **** Non-stratified analysis if "`stratify'" == ""{ if "$varlist2" ~=""{ di in re "stratified variable is not allowed, if option stratify is not given" exit 198 } if "`ylab'" ~=""{ di in re "option ylab is only for stratified analysis" exit 198 } qui{ meta $llrpos $llrposse, `eform' local fixpos = $S_1 local fixposlo = $S_3 local fixposhi = $S_4 local ranpos = $S_7 local ranposlo = $S_9 local ranposhi = $S_0 meta $llrneg $llrnegse, `eform' local fixneg = $S_1 local fixneglo = $S_3 local fixneghi = $S_4 local ranneg = $S_7 local ranneglo = $S_9 local ranneghi = $S_0 tempname weightpos weightneg obs llrposlo llrposhi llrneglo llrneghi gen `obs' = _n gen `weightpos' = 1/($llrposse*$llrposse) gen `weightneg' = 1/($llrnegse*$llrnegse) gen `llrposlo' = $llrpos-1.96*$llrposse gen `llrposhi' = $llrpos+1.96*$llrposse gen `llrneglo' = $llrneg-1.96*$llrnegse gen `llrneghi' = $llrneg+1.96*$llrnegse if "`eform'" ~= ""{ replace $llrpos = exp($llrpos) replace `llrposlo' = exp(`llrposlo') replace `llrposhi' = exp(`llrposhi') replace $llrneg = exp($llrneg) replace `llrneglo' = exp(`llrneglo') replace `llrneghi' = exp(`llrneghi') } count local max = r(N) local i = 1 local j = 1 label value `obs' obs while `i' <= `max'{ local value = `"`value' `j'"' local a`j' = `id'[`i'] label define obs `j' "`a`j''", add local i = `i' + 1 local j = `j' + 1 } } if "`fix'" ~= ""{ if "`combine'" == ""{ if "`id'" == ""{ if "`weighting'" == ""{ twoway rcapsym `llrposlo' `llrposhi' `obs', hor s(i) `blpattern' `blcolor' || /* */scatter `obs' $llrpos, /* */`symbol' `msize' `mcolor' || rcapsym `llrneglo' `llrneghi' `obs', hor s(i) `blpattern' `blcolor' /* */|| scatter `obs' $llrneg, `symbol' `msize' `mcolor' legend(off) `xscale' `yscale' `xline' `xlabel'/* */ `ytitle' `xtitle' `scheme' } if "`weighting'" ~= ""{ twoway rcapsym `llrposlo' `llrposhi' `obs', hor s(i) `blpattern' `blcolor' || /* */scatter `obs' $llrpos [aw=`weightpos'], `symbol' `msize' `mcolor' || rcapsym `llrneglo' /* */ `llrneghi' `obs', hor s(i) `blpattern' `blcolor' || scatter `obs' $llrneg [aw= `weightneg'], /* */ `symbol' `msize' `mcolor' legend(off) `xscale' `yscale' `xline' `xlabel' `ytitle' `xtitle' `scheme' } } if "`id'" ~= ""{ if "`weighting'" == ""{ twoway rcapsym `llrposlo' `llrposhi' `obs', ylabel(`"`value'"', valuelabel angle(360)) hor s(i) /* */`blpattern' `blcolor' || scatter `obs' $llrpos, `symbol' `msize' `mcolor' || rcapsym `llrneglo' /* */ `llrneghi' `obs', hor s(i) `blpattern' `blcolor' || scatter `obs' $llrneg, `symbol' `msize' `mcolor' /* */ legend(off) `xscale' `yscale' `xline' `xlabel' `ytitle' `xtitle' `scheme' } if "`weighting'" ~= ""{ twoway rcapsym `llrposlo' `llrposhi' `obs', ylabel(`"`value'"', valuelabel angle(360)) hor s(i) /* */ `blpattern' `blcolor' || scatter `obs' $llrpos [aw=`weightpos'], `symbol' `msize' `mcolor' || /* */ rcapsym `llrneglo' `llrneghi' `obs', hor s(i) `blpattern' `blcolor' || scatter `obs' $llrneg /* */ [aw= `weightneg'], `symbol' `msize' `mcolor' legend(off) `xscale' `yscale' `xline' `xlabel' /* */ `ytitle' `xtitle' `scheme' } } } if "`combine'" ~= ""{ if "`id'" == ""{ if "`weighting'" == ""{ twoway rcapsym `llrposlo' `llrposhi' `obs', ylabel(-1 "combine", angle(360)) hor s(i) /* */ `blpattern' `blcolor' || scatter `obs' $llrpos, /* */`symbol' `msize' `mcolor' || rcapsym `llrneglo' `llrneghi' `obs', hor s(i) `blpattern' `blcolor' /* */|| scatter `obs' $llrneg, `symbol' `msize' `mcolor' || scatteri -1 `fixposlo' -0.8 `fixpos', c(l) /* */ s(i) clcolor(black) xline(`fixpos', lpattern(-)) xline(`fixneg', lpattern(-))/* */ || scatteri -1 `fixposlo' -1.2 `fixpos', clcolor(black) c(l) s(i) || scatteri -0.8 `fixpos' -1 /* */ `fixposhi', clcolor(black) c(l) s(i) || scatteri -1.2 `fixpos' -1 `fixposhi', clcolor(black) c(l) /* */ s(i) || scatteri -1 `fixneglo' -0.8 `fixneg', clcolor(black) c(l) s(i) || scatteri -1 `fixneglo' -1.2 /* */ `fixneg', clcolor(black) c(l) s(i) || scatteri -0.8 `fixneg' -1 `fixneghi', clcolor(black) c(l) s(i) /* */ || scatteri -1.2 `fixneg' -1 `fixneghi', clcolor(black) c(l) s(i) legend(off) `xscale' `yscale' `xline' /* */ `xlabel' `ytitle' `xtitle' `scheme' } if "`weighting'" ~= ""{ twoway rcapsym `llrposlo' `llrposhi' `obs', ylabel(-1 "combine", angle(360)) hor s(i) /* */ `blpattern' `blcolor' || scatter `obs' $llrpos [aw= `weightpos'], /* */`symbol' `msize' `mcolor' || rcapsym `llrneglo' `llrneghi' `obs', hor s(i) `blpattern' `blcolor' /* */|| scatter `obs' $llrneg [aw= `weightneg'], `symbol' `msize' `mcolor' || scatteri -1 `fixposlo' -0.8 /* */ `fixpos', clcolor(black) c(l) s(i) xline(`fixpos', lpattern(-)) xline(`fixneg', lpattern(-))/* */ || scatteri -1 `fixposlo' -1.2 `fixpos', clcolor(black) c(l) s(i) || scatteri -0.8 `fixpos' -1 /* */ `fixposhi', clcolor(black) c(l) s(i) || scatteri -1.2 `fixpos' -1 `fixposhi', clcolor(black) c(l) /* */ s(i) || scatteri -1 `fixneglo' -0.8 `fixneg', clcolor(black) c(l) s(i) || scatteri -1 `fixneglo' -1.2 /* */ `fixneg', clcolor(black) c(l) s(i) || scatteri -0.8 `fixneg' -1 `fixneghi', clcolor(black) c(l) s(i) /* */ || scatteri -1.2 `fixneg' -1 `fixneghi', clcolor(black) c(l) s(i) legend(off) `xscale' `yscale' `xline'/* */ `xlabel' `ytitle' `xtitle' `scheme' } } if "`id'" ~= ""{ if "`weighting'" == ""{ twoway rcapsym `llrposlo' `llrposhi' `obs', ylabel(-1 "combine" `"`value'"', valuelabel angle(360)) hor s(i) /* */ `blpattern' `blcolor' || scatter `obs' $llrpos , /* */`symbol' `msize' `mcolor' || rcapsym `llrneglo' `llrneghi' `obs', hor s(i) `blpattern' `blcolor' /* */|| scatter `obs' $llrneg, `symbol' `msize' `mcolor' xline(`fixpos', lpattern(-)) xline(`fixneg', lpattern(-))/* */ || scatteri -1 `fixposlo' -0.8 `fixpos', clcolor(black) c(l) s(i)/* */ || scatteri -1 `fixposlo' -1.2 `fixpos', clcolor(black) c(l) s(i) || scatteri -0.8 `fixpos' -1 `fixposhi',/* */ clcolor(black) c(l) s(i) || scatteri -1.2 `fixpos' -1 `fixposhi', clcolor(black) c(l) s(i) || /* */ scatteri -1 `fixneglo' -0.8 `fixneg', clcolor(black) c(l) s(i) || scatteri -1 `fixneglo' -1.2 /* */ `fixneg', clcolor(black) c(l) s(i) || scatteri -0.8 `fixneg' -1 `fixneghi', clcolor(black) c(l) /* */ s(i) || scatteri -1.2 `fixneg' -1 `fixneghi', clcolor(black) c(l) s(i) legend(off) `xscale' /* */ `yscale' `xline' `xlabel' `ytitle' `xtitle' `scheme' } if "`weighting'" ~= ""{ twoway rcapsym `llrposlo' `llrposhi' `obs', ylabel(-1 "combine" `"`value'"', valuelabel angle(360)) /* */ hor s(i) `blpattern' `blcolor' || scatter `obs' $llrpos [aw= `weightpos'], /* */`symbol' `msize' `mcolor' || rcapsym `llrneglo' `llrneghi' `obs', hor s(i) `blpattern' `blcolor' /* */|| scatter `obs' $llrneg [aw= `weightneg'], `symbol' `msize' `mcolor' xline(`fixpos', lpattern(-))/* */ xline(`fixneg', lpattern(-))|| scatteri -1 `fixposlo' -0.8 `fixpos', clcolor(black) c(l) s(i)/* */ || scatteri -1 `fixposlo' -1.2 `fixpos', clcolor(black) c(l) s(i) || scatteri -0.8 `fixpos' -1 /* */ `fixposhi', clcolor(black) c(l) s(i) || scatteri -1.2 `fixpos' -1 `fixposhi', clcolor(black) /* */ c(l) s(i) || scatteri -1 `fixneglo' -0.8 `fixneg', clcolor(black) c(l) s(i)/* */ || scatteri -1 `fixneglo' -1.2 `fixneg', clcolor(black) c(l) s(i) || scatteri -0.8 `fixneg' -1 /* */ `fixneghi', clcolor(black) c(l) s(i) || scatteri -1.2 `fixneg' -1 `fixneghi', clcolor(black) /* */ c(l) s(i) legend(off) `xscale' `yscale' `xline' `xlabel' `ytitle' `xtitle' `scheme' } } } } if "`fix'" == ""{ qui{ if "`eform'" == ""{ metareg $llrpos, wsse($llrposse) bs(mm) local taupos = $S_2 metareg $llrneg, wsse($llrnegse) bs(mm) local tauneg = $S_2 replace `weightpos' = 1/(`taupos' + $llrposse*$llrposse) replace `weightneg' = 1/(`tauneg' + $llrnegse*$llrnegse) } if "`eform'" ~= ""{ replace $llrpos = log($llrpos) replace $llrneg = log($llrneg) metareg $llrpos, wsse($llrposse) bs(mm) local taupos = $S_2 metareg $llrneg, wsse($llrnegse) bs(mm) local tauneg = $S_2 replace `weightpos' = 1/(`taupos' + $llrposse*$llrposse) replace `weightneg' = 1/(`tauneg' + $llrnegse*$llrnegse) replace $llrpos = exp($llrpos) replace $llrneg = exp($llrneg) } } if "`combine'" == ""{ if "`id'" == ""{ if "`weighting'" == ""{ twoway rcapsym `llrposlo' `llrposhi' `obs', hor s(i) `blpattern' `blcolor' || /* */scatter `obs' $llrpos, /* */`symbol' `msize' `mcolor' || rcapsym `llrneglo' `llrneghi' `obs', hor s(i) `blpattern' `blcolor' /* */|| scatter `obs' $llrneg, `symbol' `msize' `mcolor' legend(off) `xscale' `yscale' `xline' `xlabel'/* */ `ytitle' `xtitle' `scheme' } if "`weighting'" ~= ""{ twoway rcapsym `llrposlo' `llrposhi' `obs', hor s(i) `blpattern' `blcolor' || /* */scatter `obs' $llrpos [aw=`weightpos'], /* */`symbol' `msize' `mcolor' || rcapsym `llrneglo' `llrneghi' `obs', hor s(i) `blpattern' `blcolor' /* */|| scatter `obs' $llrneg [aw= `weightneg'], `symbol' `msize' `mcolor' legend(off) `xscale' /* */ `yscale' `xline' `xlabel' `ytitle' `xtitle' `scheme' } } if "`id'" ~= ""{ if "`weighting'" == ""{ twoway rcapsym `llrposlo' `llrposhi' `obs', ylabel(`"`value'"', valuelabel angle(360)) hor s(i) /* */`blpattern' `blcolor' || scatter `obs' $llrpos, /* */`symbol' `msize' `mcolor' || rcapsym `llrneglo' `llrneghi' `obs', hor s(i) `blpattern' `blcolor' /* */|| scatter `obs' $llrneg, `symbol' `msize' `mcolor' legend(off) `xscale' `yscale' `xline' `xlabel'/* */ `ytitle' `xtitle' `scheme' } if "`weighting'" ~= ""{ twoway rcapsym `llrposlo' `llrposhi' `obs', ylabel(`"`value'"', valuelabel angle(360)) hor s(i) /* */ `blpattern' `blcolor' || scatter `obs' $llrpos [aw=`weightpos'], /* */`symbol' `msize' `mcolor' || rcapsym `llrneglo' `llrneghi' `obs', hor s(i) `blpattern' `blcolor' /* */|| scatter `obs' $llrneg [aw= `weightneg'], `symbol' `msize' `mcolor' legend(off) `xscale' /* */ `yscale' `xline' `xlabel' `ytitle' `xtitle' `scheme' } } } if "`combine'" ~= ""{ if "`id'" == ""{ if "`weighting'" == ""{ twoway rcapsym `llrposlo' `llrposhi' `obs', ylabel(-1 "combine", angle(360)) hor s(i) /* */ `blpattern' `blcolor' || scatter `obs' $llrpos, /* */`symbol' `msize' `mcolor' || rcapsym `llrneglo' `llrneghi' `obs', hor s(i) `blpattern' `blcolor' /* */|| scatter `obs' $llrneg, `symbol' `msize' `mcolor' || scatteri -1 `ranposlo' -0.8 `ranpos', /* */ clcolor(black) c(l) s(i) xline(`ranpos', lpattern(-)) xline(`ranneg', lpattern(-))/* */ || scatteri -1 `ranposlo' -1.2 `ranpos', clcolor(black) c(l) s(i) || scatteri -0.8 `ranpos' -1 /* */ `ranposhi', clcolor(black) c(l) s(i) || scatteri -1.2 `ranpos' -1 `ranposhi', clcolor(black) /* */ c(l) s(i) || scatteri -1 `ranneglo' -0.8 `ranneg', clcolor(black) c(l) s(i)/* */ || scatteri -1 `ranneglo' -1.2 `ranneg', clcolor(black) c(l) s(i) || scatteri -0.8 `ranneg' -1 /* */ `ranneghi', clcolor(black) c(l) s(i) || scatteri -1.2 `ranneg' -1 `ranneghi', clcolor(black) /* */ c(l) s(i) legend(off) `xscale' `yscale' `xline' `xlabel' `ytitle' `xtitle' `scheme' } if "`weighting'" ~= ""{ twoway rcapsym `llrposlo' `llrposhi' `obs', ylabel(-1 "combine", angle(360)) hor s(i) /* */ `blpattern' `blcolor' || scatter `obs' $llrpos [aw= `weightpos'], /* */`symbol' `msize' `mcolor' || rcapsym `llrneglo' `llrneghi' `obs', hor s(i) `blpattern' `blcolor' /* */|| scatter `obs' $llrneg [aw= `weightneg'], `symbol' `msize' `mcolor' || scatteri -1 `ranposlo' /* */ -0.8 `ranpos', clcolor(black) c(l) s(i) xline(`ranpos', lpattern(-)) xline(`ranneg', lpattern(-))/* */ || scatteri -1 `ranposlo' -1.2 `ranpos', clcolor(black) c(l) s(i) || scatteri -0.8 `ranpos' -1 /* */ `ranposhi', clcolor(black) c(l) s(i) || scatteri -1.2 `ranpos' -1 `ranposhi', clcolor(black) /* */ c(l) s(i) || scatteri -1 `ranneglo' -0.8 `ranneg', clcolor(black) c(l) s(i)/* */ || scatteri -1 `ranneglo' -1.2 `ranneg', clcolor(black) c(l) s(i) || scatteri -0.8 `ranneg' -1 /* */ `ranneghi', clcolor(black) c(l) s(i) || scatteri -1.2 `ranneg' -1 `ranneghi', clcolor(black) /* */ c(l) s(i) legend(off) `xscale' `yscale' `xline' `xlabel' `ytitle' `xtitle' `scheme' } } if "`id'" ~= ""{ if "`weighting'" == ""{ twoway rcapsym `llrposlo' `llrposhi' `obs' ,ylabel(-1 "combine" `"`value'"', valuelabel angle(360)) hor s(i) /* */ `blpattern' `blcolor' || scatter `obs' $llrpos , /* */`symbol' `msize' `mcolor' || rcapsym `llrneglo' `llrneghi' `obs', hor s(i) `blpattern' `blcolor' /* */|| scatter `obs' $llrneg, `symbol' `msize' `mcolor' xline(`ranpos', lpattern(-)) xline(`ranneg', /* */ lpattern(-))|| scatteri -1 `ranposlo' -0.8 `ranpos', clcolor(black) c(l) s(i)/* */ || scatteri -1 `ranposlo' -1.2 `ranpos', clcolor(black) c(l) s(i) || scatteri -0.8 `ranpos' -1 /* */ `ranposhi', clcolor(black) c(l) s(i) || scatteri -1.2 `ranpos' -1 `ranposhi', clcolor(black) /* */ c(l) s(i) || scatteri -1 `ranneglo' -0.8 `ranneg', clcolor(black) c(l) s(i)/* */ || scatteri -1 `ranneglo' -1.2 `ranneg', clcolor(black) c(l) s(i) || scatteri -0.8 `ranneg' -1 /* */ `ranneghi', clcolor(black) c(l) s(i) || scatteri -1.2 `ranneg' -1 `ranneghi', clcolor(black) /* */ c(l) s(i) legend(off) `xscale' `yscale' `xline' `xlabel' `ytitle' `xtitle' `scheme' } if "`weighting'" ~= ""{ twoway rcapsym `llrposlo' `llrposhi' `obs', ylabel(-1 "combine" `"`value'"', valuelabel angle(360)) /* */ hor s(i) `blpattern' `blcolor' || scatter `obs' $llrpos [aw= `weightpos'], /* */`symbol' `msize' `mcolor' || rcapsym `llrneglo' `llrneghi' `obs', hor s(i) `blpattern' `blcolor' /* */|| scatter `obs' $llrneg [aw= `weightneg'], `symbol' `msize' `mcolor' || scatteri -1 `ranposlo' /* */ -0.8 `ranpos', clcolor(black) c(l) s(i) || scatteri -1 `ranposlo' -1.2 `ranpos', clcolor(black) /* */ c(l) s(i) xline(`ranpos', lpattern(-)) xline(`ranneg', lpattern(-))|| scatteri -0.8 `ranpos' -1 /* */ `ranposhi', clcolor(black) c(l) s(i) || scatteri -1.2 `ranpos' -1 `ranposhi', clcolor(black) /* */ c(l) s(i) || scatteri -1 `ranneglo' -0.8 `ranneg', clcolor(black) c(l) s(i) || scatteri -1 /* */ `ranneglo' -1.2 `ranneg', clcolor(black) c(l) s(i) || scatteri -0.8 `ranneg' -1 `ranneghi', /* */ clcolor(black) c(l) s(i) || scatteri -1.2 `ranneg' -1 `ranneghi', clcolor(black) c(l) s(i) /* */ legend(off) `xscale' `yscale' `xline' `xlabel' `ytitle' `xtitle' `scheme' } } } } } if "`stratify'" ~= ""{ if "`combine'" ~=""{ di in re "option combine is only for non-stratified analysis" exit 198 } if "`weighting'" ~=""{ di in re "option weighting is only for non-stratified analysis" exit 198 } if "`id'" ~=""{ di in re "option id is only for non-stratified analysis" exit 198 } qui{ saveoutcome } if "`ylab'" == ""{ twoway rcapsym poslo poshi obs, hor s(i) `blpattern' `blcolor' || scatter obs pos, `symbol' `msize' `mcolor' ||/* */ rcapsym neglo neghi obs, hor s(i) `blpattern' `blcolor' || scatter obs neg, `symbol' `msize' `mcolor' legend(off)/* */ `xscale' `yscale' `xline' `xlabel' `ytitle' `xtitle' `scheme' } if "`ylab'" ~= ""{ qui{ local i = 1 local j = 1 count local max = r(N) sort obs label value obs obs while `i' <= `max'{ local a`j' = variable1[`i'] local b`j' = obs[`i'] local value = `"`value' `b`j''"' label define obs `b`j'' `"`a`j''"', add local i = `i' + 1 local j = `j' + 1 } } twoway rcapsym poslo poshi obs, ylabel(`"`value'"', valuelabel angle(360)) hor s(i) `blpattern' `blcolor' || /* */ scatter obs pos, `symbol' `msize' `mcolor' ||/* */ rcapsym neglo neghi obs, hor s(i) `blpattern' `blcolor' || scatter obs neg, `symbol' `msize' `mcolor' legend(off)/* */ `xscale' `yscale' `xline' `xlabel' `ytitle' `xtitle' `scheme' } } macro drop llrpos llrposse llrneg llrnegse numvar varlist2 end capture program drop saveoutcome program define saveoutcome, rclass tokenize $varlist2 local i = 1 while "``i''"~=""{ global numvar = `i' local i = `i' + 1 } if "$fix" ~= ""{ tempname outcome tempfile strata postfile `outcome' poslo pos poshi neglo neg neghi var using `strata', replace local j = 1 foreach var in $varlist2{ tempname `var'_group egen ``var'_group' = group(`var') tab ``var'_group' global `var'_group = r(r) dis $`var'_group local i = 1 while `i' <= $`var'_group{ meta $llrpos $llrposse if ``var'_group' == `i', $eform scalar poslo = $S_3 scalar pos = $S_1 scalar poshi = $S_4 meta $llrneg $llrnegse if ``var'_group' == `i', $eform scalar neglo = $S_3 scalar neg = $S_1 scalar neghi = $S_4 post `outcome' (poslo) (pos) (poshi) (neglo) (neg) (neghi) (`j') local i = `i' + 1 } local j = `j' + 1 } postclose `outcome' } if "$fix" == ""{ tempname outcome tempfile strata local j = 1 postfile `outcome' poslo pos poshi neglo neg neghi var using `strata', replace foreach var in $varlist2{ tempname `var'_group egen ``var'_group' = group(`var') tab ``var'_group' global `var'_group = r(r) dis $`var'_group local i = 1 while `i' <= $`var'_group{ meta $llrpos $llrposse if ``var'_group' == `i', $eform scalar poslo = $S_9 scalar pos = $S_7 scalar poshi = $S_0 meta $llrneg $llrnegse if ``var'_group' == `i', $eform scalar neglo = $S_9 scalar neg = $S_7 scalar neghi = $S_0 post `outcome' (poslo) (pos) (poshi) (neglo) (neg) (neghi) (`j') local i = `i' + 1 } local j = `j' + 1 } postclose `outcome' } use `strata', clear gen obs = _n local h = 1 local i = 0 count local max = r(N) while `h' <= $numvar{ replace obs = obs + 1 if _n > `i' + $``h''_group local i = `i' + $``h''_group local h = `h' + 1 } gen variable = "" local i = 1 foreach var in $varlist2{ replace variable = "`var'" if var == `i' local i = `i' + 1 } gen variable1 = "" sort variable obs by variable: gen num = _n local i = 1 while `i' <= `max'{ local a_`i' = variable[`i'] local b_`i' = num[`i'] local c_`i' = `"`a_`i''_`b_`i''"' replace variable1 = "`c_`i''" if _n == `i' local i = `i' + 1 } save, replace end