在 Stata 中添加观察
Adding observations in Stata
我的数据库的基础是暴力事件。我知道这些事件发生在哪个网格单元以及哪一天。在我的分析中,我使用特定网格单元、国家和年份中暴力事件的频率作为因变量。为了创建这个频率变量,我 collapse
我的暴力事件数据库,并计算特定年份特定网格单元中的暴力事件数量。
如果某年某个网格单元中没有暴力事件,我想包括一个 0 值。然而,由于我的基础是暴力事件数据库,所以当我 collapse
我的数据时,我没有这些观察结果。有什么方法可以为没有暴力事件的年份和网格单元中的观测值创建 0 值吗?
在我 collapse
我的日期集之前它看起来像这样
+--------------------------+
|Country Year Grid_cell_id |
|--------------------------|
|Benin 2012 365 |
|Benin 2012 365 |
|Benin 2012 367 |
|Benin 2014 365 |
|Benin 2014 365 |
|Benin 2014 365 |
|Benin 2015 240 |
|Benin 2015 240 |
|Kenya 2012 430 |
|Kenya 2012 430 |
|Kenya 2013 467 |
|Kenya 2014 567 |
|Kenya 2014 567 |
|Kenya 2014 567 |
+--------------------------+
一旦我 collapse
我的数据集,它看起来像这样:
+---------------------------------+
|Country Year Grid_cell_id freq |
|---------------------------------|
|Benin 2012 365 2 |
|Benin 2012 367 1 |
|Benin 2014 365 3 |
|Benin 2015 240 2 |
|Kenya 2012 430 2 |
|Kenya 2013 467 1 |
|Kenya 2014 567 3 |
+---------------------------------+
当我使用fillin
创建0频率值时,我只使用我只使用grid-cell_id和年份,但我还想要有关网格单元所在国家/地区的信息.我可以使用 fillin
函数轻松访问下面的数据集,但是如何保留国家/地区值而不将其用作 fillin
标准。
+---------------------------------+
|Country Year Grid_cell_id freq |
|---------------------------------|
|Benin 2012 365 2 |
|. 2013 365 0 |
|. 2014 365 3 |
|. 2015 365 0 |
|Benin 2012 367 1 |
|. 2012 367 0 |
|. 2013 367 0 |
|. 2014 367 0 |
|. 2015 367 0 |
+---------------------------------+
这里我创建了提到的问题,然后用fillin
解决了它。参见 help fillin
和 this paper。
在这种特殊情况下,使用 contract
的 zero
选项可以完全避免该问题。事实上,获得频率数据集 contract
通常优于 collapse
.
sysuse auto, clear
(1978 Automobile Data)
. contract foreign rep78
. list, sepby(foreign)
+--------------------------+
| rep78 foreign _freq |
|--------------------------|
1. | 1 Domestic 2 |
2. | 2 Domestic 8 |
3. | 3 Domestic 27 |
4. | 4 Domestic 9 |
5. | 5 Domestic 2 |
6. | . Domestic 4 |
|--------------------------|
7. | 3 Foreign 3 |
8. | 4 Foreign 9 |
9. | 5 Foreign 9 |
10. | . Foreign 1 |
+--------------------------+
. fillin foreign rep78
. list, sepby(foreign)
+------------------------------------+
| rep78 foreign _freq _fillin |
|------------------------------------|
1. | 1 Domestic 2 0 |
2. | 2 Domestic 8 0 |
3. | 3 Domestic 27 0 |
4. | 4 Domestic 9 0 |
5. | 5 Domestic 2 0 |
6. | . Domestic 4 0 |
|------------------------------------|
7. | 1 Foreign . 1 |
8. | 2 Foreign . 1 |
9. | 3 Foreign 3 0 |
10. | 4 Foreign 9 0 |
11. | 5 Foreign 9 0 |
12. | . Foreign 1 0 |
+------------------------------------+
. replace _freq = 0 if _fillin
(2 real changes made)
. drop _fillin
. list, sepby(foreign)
+--------------------------+
| rep78 foreign _freq |
|--------------------------|
1. | 1 Domestic 2 |
2. | 2 Domestic 8 |
3. | 3 Domestic 27 |
4. | 4 Domestic 9 |
5. | 5 Domestic 2 |
6. | . Domestic 4 |
|--------------------------|
7. | 1 Foreign 0 |
8. | 2 Foreign 0 |
9. | 3 Foreign 3 |
10. | 4 Foreign 9 |
11. | 5 Foreign 9 |
12. | . Foreign 1 |
+--------------------------+
编辑
您似乎忽略了使用 contract, zero
的建议,它会自动添加频率为零的观测值。
否则请注意 Stata 标签 wiki 中关于呈现数据示例的详细建议,并考虑使用 egen
组合标识符和年份的这种变体。对于任何长期数据集,假设网格单元保留在同一个国家似乎是不明智的,因此不假设。
* Example generated by -dataex-. To install: ssc install dataex
clear
input str35 Country int(Year Grid_cell_id) byte freq
"Benin" 2012 365 2
"Benin" 2012 367 1
"Benin" 2014 365 3
"Benin" 2015 240 2
"Kenya" 2012 430 2
"Kenya" 2013 467 1
"Kenya" 2014 567 3
end
egen Id = concat(Grid_cell_id Country), p(" ")
fillin Id Year
replace Grid_cell_id = real(word(Id, 1))
replace Country = trim(subinstr(Id, word(Id, 1), "", 1))
drop Id
replace freq = 0 if _fillin
drop _fillin
我的数据库的基础是暴力事件。我知道这些事件发生在哪个网格单元以及哪一天。在我的分析中,我使用特定网格单元、国家和年份中暴力事件的频率作为因变量。为了创建这个频率变量,我 collapse
我的暴力事件数据库,并计算特定年份特定网格单元中的暴力事件数量。
如果某年某个网格单元中没有暴力事件,我想包括一个 0 值。然而,由于我的基础是暴力事件数据库,所以当我 collapse
我的数据时,我没有这些观察结果。有什么方法可以为没有暴力事件的年份和网格单元中的观测值创建 0 值吗?
在我 collapse
我的日期集之前它看起来像这样
+--------------------------+
|Country Year Grid_cell_id |
|--------------------------|
|Benin 2012 365 |
|Benin 2012 365 |
|Benin 2012 367 |
|Benin 2014 365 |
|Benin 2014 365 |
|Benin 2014 365 |
|Benin 2015 240 |
|Benin 2015 240 |
|Kenya 2012 430 |
|Kenya 2012 430 |
|Kenya 2013 467 |
|Kenya 2014 567 |
|Kenya 2014 567 |
|Kenya 2014 567 |
+--------------------------+
一旦我 collapse
我的数据集,它看起来像这样:
+---------------------------------+
|Country Year Grid_cell_id freq |
|---------------------------------|
|Benin 2012 365 2 |
|Benin 2012 367 1 |
|Benin 2014 365 3 |
|Benin 2015 240 2 |
|Kenya 2012 430 2 |
|Kenya 2013 467 1 |
|Kenya 2014 567 3 |
+---------------------------------+
当我使用fillin
创建0频率值时,我只使用我只使用grid-cell_id和年份,但我还想要有关网格单元所在国家/地区的信息.我可以使用 fillin
函数轻松访问下面的数据集,但是如何保留国家/地区值而不将其用作 fillin
标准。
+---------------------------------+
|Country Year Grid_cell_id freq |
|---------------------------------|
|Benin 2012 365 2 |
|. 2013 365 0 |
|. 2014 365 3 |
|. 2015 365 0 |
|Benin 2012 367 1 |
|. 2012 367 0 |
|. 2013 367 0 |
|. 2014 367 0 |
|. 2015 367 0 |
+---------------------------------+
这里我创建了提到的问题,然后用fillin
解决了它。参见 help fillin
和 this paper。
在这种特殊情况下,使用 contract
的 zero
选项可以完全避免该问题。事实上,获得频率数据集 contract
通常优于 collapse
.
sysuse auto, clear
(1978 Automobile Data)
. contract foreign rep78
. list, sepby(foreign)
+--------------------------+
| rep78 foreign _freq |
|--------------------------|
1. | 1 Domestic 2 |
2. | 2 Domestic 8 |
3. | 3 Domestic 27 |
4. | 4 Domestic 9 |
5. | 5 Domestic 2 |
6. | . Domestic 4 |
|--------------------------|
7. | 3 Foreign 3 |
8. | 4 Foreign 9 |
9. | 5 Foreign 9 |
10. | . Foreign 1 |
+--------------------------+
. fillin foreign rep78
. list, sepby(foreign)
+------------------------------------+
| rep78 foreign _freq _fillin |
|------------------------------------|
1. | 1 Domestic 2 0 |
2. | 2 Domestic 8 0 |
3. | 3 Domestic 27 0 |
4. | 4 Domestic 9 0 |
5. | 5 Domestic 2 0 |
6. | . Domestic 4 0 |
|------------------------------------|
7. | 1 Foreign . 1 |
8. | 2 Foreign . 1 |
9. | 3 Foreign 3 0 |
10. | 4 Foreign 9 0 |
11. | 5 Foreign 9 0 |
12. | . Foreign 1 0 |
+------------------------------------+
. replace _freq = 0 if _fillin
(2 real changes made)
. drop _fillin
. list, sepby(foreign)
+--------------------------+
| rep78 foreign _freq |
|--------------------------|
1. | 1 Domestic 2 |
2. | 2 Domestic 8 |
3. | 3 Domestic 27 |
4. | 4 Domestic 9 |
5. | 5 Domestic 2 |
6. | . Domestic 4 |
|--------------------------|
7. | 1 Foreign 0 |
8. | 2 Foreign 0 |
9. | 3 Foreign 3 |
10. | 4 Foreign 9 |
11. | 5 Foreign 9 |
12. | . Foreign 1 |
+--------------------------+
编辑
您似乎忽略了使用 contract, zero
的建议,它会自动添加频率为零的观测值。
否则请注意 Stata 标签 wiki 中关于呈现数据示例的详细建议,并考虑使用 egen
组合标识符和年份的这种变体。对于任何长期数据集,假设网格单元保留在同一个国家似乎是不明智的,因此不假设。
* Example generated by -dataex-. To install: ssc install dataex
clear
input str35 Country int(Year Grid_cell_id) byte freq
"Benin" 2012 365 2
"Benin" 2012 367 1
"Benin" 2014 365 3
"Benin" 2015 240 2
"Kenya" 2012 430 2
"Kenya" 2013 467 1
"Kenya" 2014 567 3
end
egen Id = concat(Grid_cell_id Country), p(" ")
fillin Id Year
replace Grid_cell_id = real(word(Id, 1))
replace Country = trim(subinstr(Id, word(Id, 1), "", 1))
drop Id
replace freq = 0 if _fillin
drop _fillin