缺失值的处理
Handling of missing values
考虑以下玩具示例:
. clear
. set obs 10
. generate double random = runiform()
. generate foo = 1
. replace foo = . if random < 0.50
. generate foo_sum = sum(foo)
. list random foo foo_sum
+---------------------------+
| random foo foo_sum |
|---------------------------|
1. | .06692297 . 0 |
2. | .85529108 1 1 |
3. | .35454616 . 1 |
4. | .4995136 . 1 |
5. | .53638222 1 2 |
|---------------------------|
6. | .84661429 1 3 |
7. | .15198199 . 3 |
8. | .33054815 . 3 |
9. | .06141655 . 3 |
10. | .01555962 . 3 |
+---------------------------+
给定变量 foo
中的缺失值,结果是
foo_sum
错了?
简而言之,没有。
结果来自 Stata 处理缺失观察的事实
与预期不同。
foo_sum
中的结果可以描述为反直觉 因为:
. display .
.
. display . + 1
.
但是:
. display sum(.)
0
. display sum(. + 1)
0
那么这里到底发生了什么?
好吧,在这种情况下,Stata 似乎将缺失值视为零。
另一个例子:
. generate foo_max = max(foo, foo_sum)
. list
+-------------------------------------+
| random foo foo_sum foo_max |
|-------------------------------------|
1. | .06692297 . 0 0 |
2. | .85529108 1 1 1 |
3. | .35454616 . 1 1 |
4. | .4995136 . 1 1 |
5. | .53638222 1 2 2 |
|-------------------------------------|
6. | .84661429 1 3 3 |
7. | .15198199 . 3 3 |
8. | .33054815 . 3 3 |
9. | .06141655 . 3 3 |
10. | .01555962 . 3 3 |
+-------------------------------------+
鉴于 Stata 中的缺失值通常被视为 正无穷大,
在这种情况下,期望值是 .
而不是 0
或 3
在观察 1
中说 7
。
看起来 Stata 只是忽略了缺失值!
以上例子说明了我最近的一个相当令人惊讶的发现
在编程时,我想我应该在这里分享。
考虑以下玩具示例:
. clear
. set obs 10
. generate double random = runiform()
. generate foo = 1
. replace foo = . if random < 0.50
. generate foo_sum = sum(foo)
. list random foo foo_sum
+---------------------------+
| random foo foo_sum |
|---------------------------|
1. | .06692297 . 0 |
2. | .85529108 1 1 |
3. | .35454616 . 1 |
4. | .4995136 . 1 |
5. | .53638222 1 2 |
|---------------------------|
6. | .84661429 1 3 |
7. | .15198199 . 3 |
8. | .33054815 . 3 |
9. | .06141655 . 3 |
10. | .01555962 . 3 |
+---------------------------+
给定变量 foo
中的缺失值,结果是
foo_sum
错了?
简而言之,没有。
结果来自 Stata 处理缺失观察的事实 与预期不同。
foo_sum
中的结果可以描述为反直觉 因为:
. display .
.
. display . + 1
.
但是:
. display sum(.)
0
. display sum(. + 1)
0
那么这里到底发生了什么?
好吧,在这种情况下,Stata 似乎将缺失值视为零。
另一个例子:
. generate foo_max = max(foo, foo_sum)
. list
+-------------------------------------+
| random foo foo_sum foo_max |
|-------------------------------------|
1. | .06692297 . 0 0 |
2. | .85529108 1 1 1 |
3. | .35454616 . 1 1 |
4. | .4995136 . 1 1 |
5. | .53638222 1 2 2 |
|-------------------------------------|
6. | .84661429 1 3 3 |
7. | .15198199 . 3 3 |
8. | .33054815 . 3 3 |
9. | .06141655 . 3 3 |
10. | .01555962 . 3 3 |
+-------------------------------------+
鉴于 Stata 中的缺失值通常被视为 正无穷大,
在这种情况下,期望值是 .
而不是 0
或 3
在观察 1
中说 7
。
看起来 Stata 只是忽略了缺失值!
以上例子说明了我最近的一个相当令人惊讶的发现 在编程时,我想我应该在这里分享。