我试图了解在 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 个这样的观察结果。当你做一个“编程如果”时,执行是:
if
语句并决定是否满足条件。 }
并忽略 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/