标量在Stata中显示为缺少的值

标量在Stata中显示为缺少的值,stata,Stata,我有一些代码在一些嵌套的foreach循环中循环数值,以模拟条件求和。不幸的是,这似乎创建了一个缺少的值,我可以使用 display `var' 我尝试在Stata中搜索+=运算符,但没有找到。 我也对这种行为感到困惑。 我尝试将10赋值给topTerm,而不是0,以查看变量是否已被分解,但事实并非如此 tempname topTerm bottomTerm controlledContrast scalar `topTerm' = 0 foreach … numlist { forea

我有一些代码在一些嵌套的
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

我只能想象你想做什么。使用局部变量,以下操作有效:

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'
}
尽管我承认除了“本地人/全球人”之外,我不使用其他任何东西,但以下内容也适用。它与您的设置类似

tempname topTerm
scalar `topTerm' = 0
disp `topTerm'

foreach num1 of numlist 1/10 {
        scalar `topTerm' = `topTerm' + 5
        display `topTerm'
}
但您也可以这样做,以获得相同的(显示的)结果:


再说一遍,我看不出你想干什么。

我只能想象你想干什么。使用局部变量,以下操作有效:

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'
}
尽管我承认除了“本地人/全球人”之外,我不使用其他任何东西,但以下内容也适用。它与您的设置类似

tempname topTerm
scalar `topTerm' = 0
disp `topTerm'

foreach num1 of numlist 1/10 {
        scalar `topTerm' = `topTerm' + 5
        display `topTerm'
}
但您也可以这样做,以获得相同的(显示的)结果:


同样,我不明白你的目的是什么。

@refp16在这种情况下有一个很好的答案,但你的问题归结为

  • 我在一系列嵌套循环中求和一个标量
  • 答案不见了
  • 这让我感到惊讶 一般来说,这里只能回答“再次查看您的数据和代码”。在细节上,除了

    • Stata没有
      +=
      运算符。这也许是一个惊喜,因为斯塔塔显然喜欢类似C的结构,但这在这里并不重要<代码>+=允许您稍微缩短代码,但不会改变您的问题

    • 对于缺失的总和,至少有一个输入到该总和的值缺失是必要的(且充分的),这反过来可能包括(a)缺失(b)你做了一些事情,比如取负数的平方根(c)你指的是不存在的东西,哪个Stata评估为缺失

    最好的调试方法是
    显示添加的每个术语,并找出缺少的术语。您似乎正在这样做,那么为什么您不能识别缺少的术语呢


    从长远来看,要知道Stata有几种无循环求和的方法,包括
    summary,meanonly
    ,它将变量的和保留为
    r(sum)
    ,以及
    sum()
    函数,可以在Mata中用于向量和矩阵

    @refp16在这种情况下有一个很好的答案,但你的问题归结为

  • 我在一系列嵌套循环中求和一个标量
  • 答案不见了
  • 这让我感到惊讶 一般来说,这里只能回答“再次查看您的数据和代码”。在细节上,除了

    • Stata没有
      +=
      运算符。这也许是一个惊喜,因为斯塔塔显然喜欢类似C的结构,但这在这里并不重要<代码>+=
  • 允许您稍微缩短代码,但不会改变您的问题

  • 对于缺失的总和,至少有一个输入到该总和的值缺失是必要的(且充分的),这反过来可能包括(a)缺失(b)你做了一些事情,比如取负数的平方根(c)你指的是不存在的东西,哪个Stata评估为缺失

  • 最好的调试方法是
    显示添加的每个术语,并找出缺少的术语。您似乎正在这样做,那么为什么您不能识别缺少的术语呢


    从长远来看,要知道Stata有几种无循环求和的方法,包括
    summary,meanonly
    ,它将变量的和保留为
    r(sum)
    ,以及
    sum()
    函数,可以在Mata中用于向量和矩阵

    我不太清楚你想在这里实现什么。您的
    foreach
    s不完整(可能隐藏了问题的某些根源)。也许你可以重新设计你的问题。“输入10而不是0”是什么意思?没有涉及变量吗?@refp16-我测试了foreach的工作原理,首先创建所有变量,然后为它们创建的每个变量显示。我的问题是topTerm缺少值,当我尝试显示“topTerm”时,它返回为“.”。我不太清楚您想要在这里实现什么。您的
    foreach
    s不完整(可能隐藏了问题的某些根源)。也许你可以重新设计你的问题。“输入10而不是0”是什么意思?没有涉及变量吗?@refp16-我测试了foreach的工作原理,首先创建所有变量,然后为它们创建的每个变量显示。我的问题是topTerm缺少值,当我尝试显示“topTerm”时,它以“.”返回。