【发布时间】:2015-02-23 17:55:11
【问题描述】:
我已经编写了下面的程序并不断收到我的变量未定义的错误消息。
有人可以看看错误在哪里以及我应该如何调整代码吗?似乎真的没有任何效果。
program define myreg, rclass
drop all
set obs 200
gen x= 2*uniform()
gen z = rnormal(0,1)
gen e = (invnorm(uniform()))^2
e=e-r(mean)
replace e=e-r(mean)
more
gen y = 1 + 1*x +1*z + 1*e
reg y x z
e=e-r(mean)
replace e=e-r(mean)
more
gen y = 1 + 1*x +1*z + 1*e
reg y x z
more
return scalar b0 =_[_cons]
return scalar b1=_[x]
return scalar b2 =_[z]
more
end
simulate b_0 = r(b0) b_1 = r(b1) b_2 = r(b2), rep(1000): myreg
【问题讨论】:
-
e=e-r(mean)在这里是非法的。这也是多余的,因为replace会这样做。但是除非你在运行它之前做了一个summarize,否则没有r(mean)可以使用,所以e最终会全部丢失。风格上的一点是,如果您的 Stata 允许rnormal()它允许runiform()并且您不需要使用旧的函数名称来生成随机数。 -
drop all删除一个名为all的变量(如果存在)。你的意思可能是drop _all。 -
程序中的第一个
regress是没有意义的,因为你从不使用它的结果。如果你认为r(mean)是regress留下的,那就大错特错了。 -
第二个
gen将失败,因为y已经存在。 -
这似乎与(例如)stackoverflow.com/questions/28674482/… stackoverflow.com/questions/28674405/… 有关如果同一个人在幕后,如果它们不再是最新的并且没有答案,请删除您的问题。论坛上充斥着失败的帖子,这不符合任何人的利益。
标签: stata montecarlo