刚开始学stata,在研究风险态度时需要编一个简单的程序计算风险态度参数,但运行时会显示operator invalid,所以来论坛向大家求助
图中是要求解的不等式,我个人的想法是只要确定上确界和下确界就能解决问题,所以用forvalues
具体的命令如下
gen a=.
gen theta=.
gen thetaup=.
gen thetadown=.
gen alphaup=.
gen alphadown=.
gen idown=.
gen iup=.
gen jdown=.
gen jup=.
if series1A>=1&series1A<=13{
forvalues idown=0(0.01)1{
forvalues jup=1(-0.01)0{
if ((5^(1-idown)+(20^(1-idown)-5^(1-idown))*exp(-(-ln0.3)^jup))-(2.5^(1-idown)+(reward1A^(1-idown)-2.5^(1-idown))*exp(-(-ln0.1)^jup)))>0 & ((15^(1-idown)+(20^(1-idown)-15^(1-idown))*exp(-(-ln0.9)^jup))-(2.5^(1-idown)+(reward2A^(1-idown)-2.5^(1-idown))*exp(-(-ln0.7)^jup)))>0{
replace thetadown=idown
replace alphaup=jup
break
}
}
}
forvalues iup=1(-0.01)0{
forvalues jdown=0(0.01)1{
if ((5^(1-iup)+(20^(1-iup)-5^(1-iup))*exp(-(-ln0.3)^iup))-(2.5^(1-iup)+(reward1B^(1-iup)-2.5^(1-iup))*exp(-(-ln0.1)^jdown)))<0 & ((15^(1-iup)+(20^(1-iup)-15^(1-iup))*exp(-(-ln0.9)^jdown))-(2.5^(1-iup)+(reward2B^(1-jdown)-2.5^(1-iup))*exp(-(-ln0.7)^jdown)))<0{
replace thetaup=iup
replace alphadown=jdown
break
}
}
}
replace theta=(thetaup+thetadown)/2
replace a=(alphaup+alphadown)/2
break
}
个人感觉问题出在i j的变量上,本来想用临时变量,但百度许久都没有找到正确的采用方式= =
麻烦大家帮忙看一下问题出在哪里