标量在Stata中显示为缺失值

时间:2013-10-30 02:51:36

标签: stata

我有一些代码循环遍历某些嵌套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

2 个答案:

答案 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在这种情况下有一个很好的答案,但你的问题归结为

  1. 我在一系列嵌套循环中总结了一个标量。
  2. 答案遗失了。
  3. 这让我很惊讶。
  4. 此处只能提供“再次查看您的数据和代码”形式的答案。详细地说,除了

    之外,没有太多可以添加的内容
    • Stata没有+=运营商。鉴于Stata对C类构造的明显喜爱,这可能是一个惊喜,但这在这里并不重要。 +=允许您稍微缩短代码,但不会改变您的问题。

    • 对于要消失的金额,必须(并且足够)至少有一个输入该金额的值丢失,而这可能包括(a)它缺失(b)你做的事情就像取负数的平方根(c)你指的是不存在的东西,Stata评价为缺失。

    调试此方法的最佳方法是display每个术语的添加,并找出缺少哪一个。你似乎在这样做,为什么你不能找出缺少的条款?

    对你来说,更长远来看,Stata有几种方法可以获得没有循环的总和,包括summarize, meanonly,它将变量的总和保留为r(sum)sum()函数可以在Mata中用于向量和矩阵。