我有一些代码循环遍历某些嵌套foreach
循环中的值来模拟条件求和。不幸的是,这似乎创造了一个缺失值,我可以通过使用
display `var'
我尝试在Stata中搜索+=
运算符,但我找不到。
我也对这种行为感到困惑。
我尝试将10分配给topTerm
而不是0来查看变量是否已被置位但事实并非如此。
tempname topTerm bottomTerm controlledContrast
scalar `topTerm' = 0
foreach … numlist {
foreach … numlist {
foreach … numlist {
display `delta', `topTerm'
scalar `topTerm'= `topTerm' + `delta'*`cc_difference_in_means'*`cc_vet_n'
display `topTerm'
}}}
编辑:尝试使用本地/全局并仍然缺少值。似乎是一个范围问题,虽然我认为当地人会解决这个问题,所以我真的很困惑......
请注意,这可以从命令行开始:
local x = 10
local x = `x' + 10
display `x'
>> 20
答案 0 :(得分:2)
我只能想象你想要做什么。以下,使用本地人,工作:
local topterm 0
local delta 5
local cc_difference_in_means 10
local cc_vet_n 25
foreach num1 of numlist 1/10 {
local topterm = `topterm' + `delta' * `cc_difference_in_means' * `cc_vet_n'
display `topterm'
}
以下内容也有效,但我承认我不使用“locals / globals”以外的任何内容。它与您的设置类似。
tempname topTerm
scalar `topTerm' = 0
disp `topTerm'
foreach num1 of numlist 1/10 {
scalar `topTerm' = `topTerm' + 5
display `topTerm'
}
但你也可以这样做,它会给出相同的(显示的)结果:
scalar topTerm = 0
foreach num1 of numlist 1/10 {
scalar topTerm = topTerm + 5
display topTerm
}
同样,我不知道你想要什么。
答案 1 :(得分:2)
@ refp16在这种情况下有一个很好的答案,但你的问题归结为
此处只能提供“再次查看您的数据和代码”形式的答案。详细地说,除了
之外,没有太多可以添加的内容 Stata没有+=
运营商。鉴于Stata对C类构造的明显喜爱,这可能是一个惊喜,但这在这里并不重要。 +=
允许您稍微缩短代码,但不会改变您的问题。
对于要消失的金额,必须(并且足够)至少有一个输入该金额的值丢失,而这可能包括(a)它缺失(b)你做的事情就像取负数的平方根(c)你指的是不存在的东西,Stata评价为缺失。
调试此方法的最佳方法是display
每个术语的添加,并找出缺少哪一个。你似乎在这样做,为什么你不能找出缺少的条款?
对你来说,更长远来看,Stata有几种方法可以获得没有循环的总和,包括summarize, meanonly
,它将变量的总和保留为r(sum)
和sum()
函数可以在Mata中用于向量和矩阵。