我试图了解在 Stata 中编程 if 和条件 if 之间的区别。这就是我正在做的事情。

sysuse auto,clear

#conditional if
sum price if price>4499


    Variable |       Obs        Mean    Std. Dev.       Min        Max
-------------+--------------------------------------------------------
       price |        48    7312.813    3102.784       4504      15906



# programming if
if price>3291{
sum price
}


    Variable |       Obs        Mean    Std. Dev.       Min        Max
-------------+--------------------------------------------------------
       price |        74    6165.257    2949.496       3291      15906



# programming if
if price>5000{
sum price
}

This doesn't give me anything

#programming if

if price>4000{
sum price}

    Variable |       Obs        Mean    Std. Dev.       Min        Max
-------------+--------------------------------------------------------
       price |        74    6165.257    2949.496       3291      15906

我想知道为什么编程 if 给出了 3291 和 4000 而不是 5000 的输出。我可以理解编程 if 查看价格的第一个观察值,然后查看它是否大于指定的数字,然后执行程序。但是,这显然不是我在这里看到的。在这方面的任何帮助将不胜感激。

最佳答案

您正在看到预期的行为。

sysuse auto
. list in 1

     +------------------------------------------------------------------------------------------+
  1. | make        | price | mpg | rep78 | headroom | trunk | weight | length | turn | displa~t |
     | AMC Concord | 4,099 |  22 |     3 |      2.5 |    11 |  2,930 |    186 |   40 |      121 |
     |------------------------------------------------------------------------------------------|
     |                  gear_r~o                  |                   foreign                   |
     |                      3.58                  |                  Domestic                   |
     +------------------------------------------------------------------------------------------+

所以第一个价格观察是 4,099 美元。当您像 sum price if price > 4499 一样运行“条件”时,Stata 会找到 price 超过 4,499 的观测值,然后对这些观测值运行 summarize 命令。有 48 个这样的观察结果。

当你做一个“编程如果”时,执行是:
  • Stata 到达 if 语句并决定是否满足条件。
  • 如果条件满足,则进入 if 块并执行代码。
  • 如果条件不满足,Stata 跳过关闭的 } 并忽略 if 代码。

  • 因此,当您执行 if price > 4000 { ... } 时,Stata 查看第一个观察结果,看到价格大于 4,000 并继续执行代码。由于 summarize 块中的 if 没有条件,因此该命令在所有观察值下执行。当你执行 if price > 5000 { ... } 时,Stata 看到条件不满足并跳过 { ... } 中的代码。
    if 限定符和 if 语句之间的区别是 explained by StataCorp in their FAQs

    关于if-statement - 条件if和编程if在Stata中,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17810731/

    10-16 09:46
    查看更多