【问题标题】:Expanding annual to semiannual data in panel data将面板数据中的年度数据扩展到半年度数据
【发布时间】:2021-03-16 19:13:50
【问题描述】:

我有一个面板数据集,其中包含 1960-2050 年间 30 个 OECD 国家在一个国家/地区的年轻人比例(变量是命名值)。

数据仅以每年一次的频率提供,但我希望它以每半年一次的频率提供,因此我想扩展和插入数据。目标是每半年为每个国家/地区提供价值。

我已经扩展了数据集并分配了重复的 dupe=1 来跟踪。然后我生成了一个名为 year_half 的变量,原始值(上半年)的值为 1,副本(下半年)的值为 2。然后我插值。代码是:

expand 2, gen(dupe)

gen year_half = 1 if dupe==0
replace year_half = 2 if dupe==1

bysort year : gen hdate = yh(year, year_half)
by year : replace value = . if dupe==1

ipolate value hdate, gen(linear) epolate

我没有收到任何错误代码,但我也没有得到正确的结果。变量linear只有一些观测值的插值(其余的都缺失),它似乎不对应year_half、hdate或dupe。有谁知道如何解决这个问题?

【问题讨论】:

    标签: interpolation panel stata


    【解决方案1】:

    这似乎是你所做的事情的本质,除了面板结构需要重复by country:

    * Example generated by -dataex-. To install: ssc install dataex
    clear
    input float(year value)
    2010 2
    2011 4
    2012 6
    end
    
    expand 2
    bysort year : replace value = . if _n == 2
    by year : gen halfyear = yh(year, _n)
    
    ipolate value halfyear , gen(value2) epolate
    
    list, sep(0)
    
         +----------------------------------+
         | year   value   halfyear   value2 |
         |----------------------------------|
      1. | 2010       2        100        2 |
      2. | 2010       .        101        3 |
      3. | 2011       4        102        4 |
      4. | 2011       .        103        5 |
      5. | 2012       6        104        6 |
      6. | 2012       .        105        7 |
         +----------------------------------+
    

    但是,您的方法是任意的。你把年值当作上半年应用,如果你把它当作下半年应用,就会得到不同的答案。

    这是一个更对称的过程:

     clear
     input float(year value)
     2010 2
     2011 4
     2012 6
     end
        
     expand 2 
        
     sort year 
     gen VALUE = (value[_n-1] + 2 * value + value[_n+1])/4 
     by year : gen halfyear = yh(year, _n)
     ipolate VALUE halfyear, gen(value2) epolate 
        
     list, sep(0) 
     
          +------------------------------------------+
         | year   value   VALUE   halfyear   value2 |
         |------------------------------------------|
      1. | 2010       2       .        100      1.5 |
      2. | 2010       2     2.5        101      2.5 |
      3. | 2011       4     3.5        102      3.5 |
      4. | 2011       4     4.5        103      4.5 |
      5. | 2012       6     5.5        104      5.5 |
      6. | 2012       6       .        105      6.5 |
         +------------------------------------------+
    

    EDIT 对面板数据的初步概括(未测试)

      expand 2 
      sort country year 
      by country: gen VALUE = (value[_n-1] + 2 * value + value[_n+1])/4 
      by country year : gen halfyear = yh(year, _n)
      by country: ipolate VALUE halfyear, gen(value2) epolate 
    

    【讨论】:

    • 感谢您的回复!我尝试了你关于更对称程序的建议,但它混合了所有国家。如果我尝试按照您在每个国家/地区显示的数据对数据进行排序,那么我会收到by year: gen halfyear = yh(year, _n) 的错误消息,说 not sorted r(5)。我该如何解决这个问题?
    • 确实,因为正如我所指出的,您需要添加面板代码。我会补充的。
    猜你喜欢
    • 2020-08-14
    • 2020-07-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-30
    • 2022-01-01
    • 2019-08-13
    • 1970-01-01
    相关资源
    最近更新 更多