【问题标题】:Adding observations in Stata在Stata中添加观察
【发布时间】:2020-06-23 16:23:03
【问题描述】:

我的数据库的基础是暴力事件。我知道这些事件发生在哪个网格单元中以及发生在哪个日期。在我的分析中,我使用某个网格单元、国家和年份中暴力事件的频率作为因变量。为了创建这个频率变量,我 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 和 year,但我还想要有关 grid-cell 所在国家/地区的信息。我可以使用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    |
+---------------------------------+

【问题讨论】:

    标签: database stata


    【解决方案1】:

    在这里我创建了提到的问题,然后用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
    

    【讨论】:

    • 感谢您这么快回复我!我还有一个问题:使用填充代码时,我不使用所有变量来选择 get a 上的填充标准。价值。我只需要填写标准的网格单元和年份,但我还需要有关网格单元所在国家/地区的信息。无论如何,我可以轻松地为所有添加的填充观察添加正确的国家/地区吗?
    • 你的问题很宽泛,缺乏数据示例,但本质似乎足够清楚。既然您要添加复杂性,那么缺少数据示例就更加严重了。请参阅 Stata 标签 wiki 以获取有关示例的详细建议。 FWIW,criterioncriteria 的单数形式。
    • 我已经编辑了我的问题,以便更好地了解我的问题,再次感谢您的帮助!
    • 尝试egen group = group(Country Grid_cell_id),然后尝试fillin group year
    • 我不确定这是否能解决我的问题,因为我在使用 fillin 后对所有添加的观察都失去了 country 和 grid_cell_id。我以后想使用国家 x 年固定效果和 grid_cell_id 固定效果。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多