在 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 fillinthis paper

在这种特殊情况下,使用 contractzero 选项可以完全避免该问题。事实上,获得频率数据集 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