For loop 价值标准
这是我的代码:For loop 价值标准,for-loop,stata,For Loop,Stata,这是我的代码: drop _all set obs 50 forvalues k = 1/2 { gen b`k' = . } forvalues i=1/1000 { gen u = rnormal() gen d = rnormal() forvalues j = 1/2 { quietly replace b`j' = mean(u) in `i' quietly replace b`j' = mean(d) in `i' } drop u d } forvalue
drop _all
set obs 50
forvalues k = 1/2 {
gen b`k' = .
}
forvalues i=1/1000 {
gen u = rnormal()
gen d = rnormal()
forvalues j = 1/2 {
quietly replace b`j' = mean(u) in `i'
quietly replace b`j' = mean(d) in `i'
}
drop u d
}
forvalues l = 1/6 {
su b`l'
}
hist b1
如果我将obs设置为50,它将不起作用。错误是
Obs。数量超出范围
如果我将obs设置为>1000,则工作正常
有什么问题吗?像您这样发布代码非常好,而且在堆栈溢出中大部分时间都需要。但是一个口头的,附带的解释,没有坏处;恰恰相反,它可能非常有用 你所说的错误把我吓坏了。运行该代码时收到的第一个错误是 未知函数均值() r(133) 因此,一个好的做法是,在Stata在结果窗口中显示输入和输出时,发布准确的输入和输出,并引用已安装的用户编写命令的来源(如果有) 我猜你是在做模拟练习。具体来说,你需要两个随机变量的平均值,每个随机变量有50个观测值,你需要计算这些平均值1000次。最后,您的结果包含两个变量(
b1
和b2
),每个变量有1000个观察值。每次观察都是平均值。您可能感兴趣的命令是postfile
。您需要查看手册:[P]postfile,其中的帮助非常全面
clear all
set more off
set seed 2368056
*----- compute means -----
tempname memhold
tempfile results
postfile `memhold' b1 b2 using `results'
quietly forvalues i = 1/1000 {
set obs 50
gen u = rnormal()
gen d = rnormal()
summarize u, meanonly
scalar mu = r(mean)
summarize d, meanonly
scalar md = r(mean)
post `memhold' (mu) (md)
drop _all
}
postclose `memhold'
*----- check final results -----
use `results', clear
list
命令summary
将以存储结果的形式提供方法(请参见帮助存储结果
)。
还请注意,set obs 50
将变量u
和d
的观察次数设置为50。但是循环的数量(1000)是控制最终结果大小的因素post
将收集不同数据集中的计算平均值。完成后,可以使用use
加载结果文件
请参阅:@Roberto Ferrer发现了代码中的几个问题。这里还有一些 在这个循环中
forvalues j = 1/2 {
quietly replace b`j' = mean(u) in `i'
quietly replace b`j' = mean(d) in `i'
}
forvalues l = 1/6 {
su b`l'
}
第一条语句是徒劳的,因为第二条语句覆盖了刚刚完成的内容。猜猜看,你想要的根本不是一个循环,而是
su u, meanonly
quietly replace b1 = r(mean) in `i'
su d, meanonly
quietly replace b2 = r(mean) in `i'
在这个循环中
forvalues j = 1/2 {
quietly replace b`j' = mean(u) in `i'
quietly replace b`j' = mean(d) in `i'
}
forvalues l = 1/6 {
su b`l'
}
要求Stata对变量进行总结是没有意义的<代码>b6,因为它们不存在请考虑将问题的标题改为更有意义的内容。想想看: