3

我试图了解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查看价格的第一个观察值,然后查看它是否大于指定的数字,然后执行程序。但是,这显然不是我在这里看到的。在这方面的任何帮助将不胜感激。

4

1 回答 1

6

您正在看到预期的行为。

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 美元。当您运行“条件” if likesum price if price > 4499时,Stata 会找到price超过 4,499 的观察结果,然后summarize对这些观察结果运行命令。有 48 个这样的观察结果。

当您执行“编程如果”时,执行是:

  1. Stata 到达if语句并决定是否满足条件。
  2. 如果满足条件,则进入 if 块并执行代码。
  3. 如果条件不满足,Stata 会跳过关闭}并忽略if代码。

因此,当您这样做时if price > 4000 { ... },Stata 会查看第一个观察结果,发现价格大于 4,000 并继续执行代码。由于块summarizeif没有条件,因此该命令与所有观察结果一起执行。当您这样做时if price > 5000 { ... },Stata 会发现条件不满足并跳过其中的代码{ ... }

StataCorp 在其常见问题解答中解释if了限定词和if语句之间的区别。

于 2013-07-23T13:05:22.943 回答