Loops Stata:变量的元素
如何编辑变量的每2个值 我的代码是:Loops Stata:变量的元素,loops,vector,stata,Loops,Vector,Stata,如何编辑变量的每2个值 我的代码是: set obs 100 gen u = invnorm(uniform()) forvalues d = 1/50 { gen u[2*d] = u[2*d] + 1 } 我的代码有什么问题?生成的语法除了在生成之后和=之前的存储类型和变量名(以及标签名,此处不相关)之外,不允许任何内容。帮助文件清楚地指出了这一点 这里不需要循环。如果你想研究观察结果2,4。。。然后 gen new_u = u + 1 if mod(_n, 2) == 0 选择偶数
set obs 100
gen u = invnorm(uniform())
forvalues d = 1/50 {
gen u[2*d] = u[2*d] + 1
}
我的代码有什么问题?生成
的语法除了在生成之后和=
之前的存储类型和变量名(以及标签名,此处不相关)之外,不允许任何内容。帮助文件清楚地指出了这一点
这里不需要循环。如果你想研究观察结果2,4。。。然后
gen new_u = u + 1 if mod(_n, 2) == 0
选择偶数观察值。更改现有变量generate
是非法的,但您可以
replace u = u + 1 if mod(_n, 2) == 0
缩写
mod(_n, 2) == 0
是
给定整数除以2的模(严格地说,余数)只能是1或0,因此对零求反(逻辑假)得到1(逻辑真)
附言
是一种称为随机正态偏差的古老方法,平均值为0,方差为1。在现代国家
rnormal()
我会的 您的循环的一行版本是:
genu=r正常(!mod(\n,2),1)
逻辑是从标准正态分布开始绘制,并希望向所有偶数观测值添加1。加1意味着分布的平均值是1而不是0。rnormal()
函数的第一个参数是平均值。如果我们能为所有奇数观测值提供0,为所有偶数观测值提供1,那么我们就完成了。正如@NickCox在他的回答中指出的那样,这样的函数是!mod(\n,2)
话虽如此,Nick的双线解决方案
gen u = rnormal()
replace u = u + 1 if mod(_n, 2) == 0
可能更容易阅读。这将是选择Nick的解决方案的一个很好的理由。gen u=!mod(_n,2)+r normal()
是另一种方法。然而,我怀疑OP的问题比他们的例子更普遍!
rnormal()
gen u = rnormal()
replace u = u + 1 if mod(_n, 2) == 0