我在下面编写了蒙特卡罗模拟程序。模拟本身有效,但我似乎无法summarize
它。当我运行我的完整程序时,do文件会在蒙特卡罗模拟后自动结束,并且不会运行我的代码的最后三行。当do文件停止后我手动运行时,我收到错误:'文件规范无效'。有没有人有这方面的经验?
foreach n in 30 1600 {
local j = 1
while `j' <= 1000 {
quietly {
preserve
sample `n', count
noisily di in yellow "." _continue
gen y3_m = 1 + 1*w + v3
replace y3_m = y3_m > 0
gen y2_m = 1 + 1*x + 1*z1 +1*z2 + 1*v1 + 1*v2
replace y2_m =. if y3_m <= 0
gen y1_m = 1 + 1*y2_m + 1*x + v1
replace y1_m =. if y3_m <= 0
probit y3_m w
*step 2
predict eventpr_m, xb
gen PDFprobit_m = normalden(eventpr)
gen CDFprobit_m = normprob(eventpr)
gen IMR_m = PDFprobit/CDFprobit
ivregress 2sls y1_m x IMR_m (y2 = z1 z2)
matrix b1=e(b)
svmat b1, name(Ivreg) // save the regression coefficients and collapse in
// order to only have one observation per coefficient
collapse (mean) Ivreg*
gen N = `n'
if `j' > 1 {
append using `mc`n''
}
save `mc`n'', replace
restore
local j = `j' + 1
}
}
di "`n'"
}
use `mc30', clear
append using `mc1600'
summarize
答案 0 :(得分:4)
在任何论坛上,这都必须被视为一个尴尬的问题:数据集或等价物无法解释或访问,代码依赖于之前制作的本地宏分配;似乎大多数代码都与问题相关。如需将来参考,请阅读about minimal, complete, and verifiable examples。
我无法在不滚动的情况下轻松阅读整个代码,因此我将其复制并修剪下来以尽可能地理解。这是一个缩写版本,进行了外观修改,包括但不仅仅是
forval
而不是while
循环。 我没有测试此版本的兼容性。
foreach n in 30 1600 {
quietly forval j = 1/1000 {
preserve
sample `n', count
noisily di in yellow "." _continue
gen y3_m = (1 + w + v3) > 0
gen y2_m = 1 + x + z1 + z2 + v1 + v2
replace y2_m =. if y3_m <= 0
gen y1_m = 1 + y2_m + x + v1
replace y1_m =. if y3_m <= 0
probit y3_m w
predict eventpr_m, xb
gen IMR_m = normalden(eventpr)/normprob(eventpr)
ivregress 2sls y1_m x IMR_m (y2 = z1 z2)
matrix b1=e(b)
svmat b1, name(Ivreg)
collapse (mean) Ivreg*
gen N = `n'
if `j' > 1 append using `mc`n''
save `mc`n'', replace
restore
} // forval
di "`n'"
} // foreach
use `mc30', clear
append using `mc1600'
summarize
紧缩似乎是这里的代码最初包含在一个文件中。内容意味着它只是do文件的尾端,否则本地宏mc30
和mc1600
中的引用似乎无效。
分别运行最后三行的问题是立即生效的。在do文件的上下文之外,未定义本地宏mc30
;本地宏就像术语所暗示的那样,是定义它们的程序的命名空间的本地宏。所以Stata只看到use, clear
,这是非法的。类似的问题会与mc1600
咬一口,但Stata并没有那么远。
我不能说为什么代码作为一个独立的文件没有完成,但正如所说,这里没有可重复的例子可供探索。您需要插入更多检查和/或缩小代码以识别问题。