在stata 18讲中的第102页中,有个模拟发生概率的程序如下:
capt prog drop seq3
prog seq3 ,rclass //rclass 选项表示计算结果将由 return 返回到 r()
version 9
drop _all //清空所有数据,不能用 clear
set obs 10 //将生成 10 个观察值
tempvar x y z //设定 x,y,z 为临时变量
gen `x’=int(10*uniform()) //产生 10 个随机变量,可能为 0,1,…,9
gen `y’=(mod(`x’,2)==0) //如果生成的随机变量为奇数,则 y=0;为偶数,y=1
gen `z’=0 //生成 Z=0
forvalues i=3/10 {
replace `z’=1 if `y’==`y’[_n-1] & `y’==`y’[_n-2] in `i' //连续三个变量相等时 z=1
}
sum `z’
return scalar max=r(max) //z 取 1 表示高兴的事发生(三连续),否则失败
end
simulate max=r(max),reps(10000) nodots:seq3 //重复 1 万次,取平均结果
sum
我把它写成的命令形式如下:
clear
capture prog drop sq3
prog seq3,rclass
version 9
drop _all
set obs 10
tempvar x y z
gen `x'=int(10*uniform())
gen `y'=(mod(`x',2)==0)
gen `z'=0
forvalues i=3/10{
replace `z'=1 if `y'==`y'[_n -1]&`y'==`y'[_n-2]in `i'
}
sum `z'
return scalar max=r(max)
end
simulate max=r(max),reps(10000) nodots:seq3
sum
得出的结果是:
. clear
.
. capture prog drop sq3
.
. prog seq3,rclass
1.
. version 9
2.
. drop _all
3.
. set obs 10
4.
. tempvar x y z
5.
. gen `x'=int(10*uniform())
6.
. gen `y'=(mod(`x',2)==0)
7.
. gen `z'=0
8.
. forvalues i=3/10{
9.
. replace `z'=1 if `y'==`y'[_n -1]&`y'==`y'[_n-2]in `i'
10.
. }
11.
. sum `z'
12.
. return scalar max=r(max)
13.
. end
.
. simulate max=r(max),reps(10000) nodots:seq3
equation [_n-2] not found
an error occurred when simulate executed seq3
r(303);
.
. sum
我一直搞不明白是哪个地方出错了,请赐教!