在循环中将另一个变量的值添加到变量中

时间:2013-12-16 21:54:53

标签: stata

我想做那样的事情

gen var1 = 0
gen var2 = 0

forval x = 1/5 {
replace var1 = `x'
replace var2 = var2 + var1
}

即我想用旧值加 var1 替换 var2 。在像Python这样的编程语言中,这可以工作,但在Stata中却没有。 我的目标不是创造很多变量!这就是我想在循环的每个循环中更新变量 var2 的原因。我的循环将从1运行到100,我不想创建100个变量以获得一个很好的解决方案。

在我的示例中,在循环的第一个循环中, var1 变为1, var2 也变为1.在第二个循环中 var1 应为2且 var2 应为3,因为它将 var2 的旧值(即1)添加到 var1 的新值,即2.在第三个中, var1 应该变为3, var2 应该变成3 + 3,这是 var2 的旧值加上<的值em> var1 在这个cyle中。等等等等。这就是我想要的!

有人可以帮助我吗?

1 个答案:

答案 0 :(得分:1)

不需要循环:

clear all
set obs 100
gen id = _n
tsset id

gen var1 = _n - 1
gen var2 = 0
replace var2 = l.var2 + l.var1 if _n > 1

如果您只想知道“最终结果”,即循环结束时var1和var2的值,那么您可以使用Mata:

mata
a = 0
b = 0
for (i = 1 ; i <= 100; i++) {
    a = i
    b = b + a
}
a
b
end