草蜢718 发表于 2019-6-28 08:32 
谢谢黄老师,刚学stata不久,对这块还不是很熟悉。
- * Example generated by -dataex-. To install: ssc install dataex
- clear
- input float(lngdpwdilocallongdiff lndnlongdiff)
- .4204254 .028232574
- .8784523 .50447655
- 1.241537 .2186191
- -.09284592 .04628181
- .4206181 .10143757
- .2048893 -.3965068
- .3379917 1.032908
- -.06822342 .12173724
- .5742798 .3257008
- .448185 1.0075266
- .484436 .4353796
- .5846386 .42983985
- -.03592682 -.024760246
- .51361465 .439985
- .2338524 .9791594
- .4910011 .7609177
- .8487453 1.9358077
- .3517857 .27433515
- .6440163 .91082
- .4693909 .57802963
- .54471207 .485219
- .4448814 .19470882
- .5148239 -.4055132
- -.0379467 -.6509919
- .3912201 -.2501198
- .3898964 -.0038502216
- .9521637 1.3811316
- .7475395 .56429815
- .4368057 .53111124
- .7330322 .7672749
- end
复制代码是在AER上看到的一篇文章的程序,是想通过循环计算出相应的参数值。但我在stata中运行时,总提示在forvalues语句后提示 invalid syntax,不知道问题出在哪里,请黄老师和各位高手指点。
gen phiG=.
gen varzG=.
gen varzB=.
gen cov=.
gen varx=.
gen nG=.
gen nB=.
gen nTot=.
gen phiB=.
gen sigmasqx=.
gen sigmasqy=.
gen sigmasqzG=.
gen sigmasqzB=.
gen beta=.
gen lambdaG=.
gen lambdaB=.
local rownum = 0
local rowsboth = 5
local goodsample = "wbdqtotal>3.5"
local badsample = "wbdqtotal<3.5"
forvalues j = 1(1)`rowsboth' {
local rownum = `rownum' + 1
replace phiG = 1.1 - `j'*0.1 if _n==`rownum'
qui: corr lngdpwdilocallongdiff lndnlongdiff if `goodsample', cov
replace varzG = r(Var_1) if _n==`rownum'
replace nG = r(N) if _n==`rownum'
qui: corr lngdpwdilocallongdiff lndnlongdiff if `badsample', cov
replace varzB = r(Var_1) if _n==`rownum'
replace nB = r(N) if _n==`rownum'
qui: corr lngdpwdilocallongdiff lndnlongdiff, cov
replace varx = r(Var_2) if _n==`rownum'
replace cov = r(cov_12) if _n==`rownum'
replace nTot = r(N) if _n==`rownum'
replace sigmasqy = varzG * phiG if _n==`rownum'
replace phiB = sigmasqy / varzB if _n==`rownum'
replace beta = cov / sigmasqy if _n==`rownum'
replace sigmasqx = varx - cov if _n==`rownum'
replace sigmasqzB = varzB - sigmasqy if _n==`rownum'
replace sigmasqzG = varzG - sigmasqy if _n==`rownum'
replace lambdaB = sigmasqx*sigmasqy / ( sigmasqx*sigmasqy + sigmasqzB*(beta*beta*sigmasqy + sigmasqx) ) if _n==`rownum'
replace lambdaG = sigmasqx*sigmasqy / ( sigmasqx*sigmasqy + sigmasqzG*(beta*beta*sigmasqy + sigmasqx) ) if _n==`rownum'
}
local rownum = `rownum' + 1
replace phiB = phiB[2] if _n==`rownum'
local phiB = phiB[2]
qui: corr lngdpwdilocallongdiff lndnlongdiff if `badsample', cov
replace varzB = r(Var_1) if _n==`rownum'
replace nB = r(N) if _n==`rownum'
replace varx = r(Var_2) if _n==`rownum'
replace cov = r(cov_12) if _n==`rownum'
replace nTot = r(N) if _n==`rownum'
replace sigmasqy = varzB * phiB if _n==`rownum'
replace beta = cov / sigmasqy if _n==`rownum'
replace sigmasqx = varx - cov if _n==`rownum'
replace sigmasqzB = varzB - sigmasqy if _n==`rownum'
replace lambdaB = sigmasqx*sigmasqy / ( sigmasqx*sigmasqy + sigmasqzB*(beta*beta*sigmasqy + sigmasqx) ) if _n==`rownum'
keep phiG phiB beta lambdaG lambdaB sigmasqy sigmasqzB sigmasqzG sigmasqx
order phiG phiB beta lambdaG lambdaB sigmasqy sigmasqzB sigmasqzG sigmasqx