我想做那样的事情
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中。等等等等。这就是我想要的!
有人可以帮助我吗?
答案 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