【问题标题】:Generate a lead variable in a panel在面板中生成前导变量
【发布时间】:2019-03-12 19:14:27
【问题描述】:

我想通过CMAProvinceYear 生成一个潜在客户收入变量V1,如下所示:

CMA  Province  Year  Income  V1
TO      A      1990   $5     $8
TO      A      1991   $8     .
TO      A      1991   $8     .
MT      A      1990   $12    $7
MT      A      1991   $7     .
MT      A      1991   $7     .
AB      B      1990   $5     $15
AB      B      1991   $15    .
AB      B      1991   $15    .

我正在使用以下代码,但我只得到缺失值:

gsort CMA Province -Year Income
gen ld_inc = Income[_n-1] if Year == Year[_n-1] + 1
replace ld_inc = ld_inc[_n-1] if Year == Year[_n-1] & missing(ld_inc)

我的代码有问题吗?我做错了什么?

【问题讨论】:

    标签: panel stata


    【解决方案1】:

    以下适用于您的示例:

    clear
    
    input str2 CMA str2 Province Year Income V1
    "TO"  "A" 1990  5  8
    "."   "." 1991  8  .
    "MT"  "A" 1990 12  7
    "."   "." 1991  7  .
    "AB"  "B" 1990  5 15
    "."   "." 1990 15  .
    end
    
    generate V2 = Income[_n+1] if CMA != "."
    
    list, separator(0)
    
         +------------------------------------------+
         | CMA   Province   Year   Income   V1   V2 |
         |------------------------------------------|
      1. |  TO          A   1990        5    8    8 |
      2. |   .          .   1991        8    .    . |
      3. |  MT          A   1990       12    7    7 |
      4. |   .          .   1991        7    .    . |
      5. |  AB          B   1990        5   15   15 |
      6. |   .          .   1991       15    .    . |
         +------------------------------------------+
    

    但是,通常应该使用如下标识符来完成:

    egen id = seq(), block(2)
    bysort id (Year Province): generate V3 = Income[_n+1]
    
    order id
    list, separator(0)
    
         +----------------------------------------------------+
         | id   CMA   Province   Year   Income   V1   V2   V3 |
         |----------------------------------------------------|
      1. |  1    TO          A   1990        5    8    8    8 |
      2. |  1     .          .   1991        8    .    .    . |
      3. |  2    MT          A   1990       12    7    7    7 |
      4. |  2     .          .   1991        7    .    .    . |
      5. |  3    AB          B   1990        5   15   15   15 |
      6. |  3     .          .   1991       15    .    .    . |
         +----------------------------------------------------+
    

    编辑:

    使用您的新示例,事情变得更加简单:

    clear
    
    input str2 CMA  str1 Province  Year  Income  V1
    TO      A      1990   5     8
    TO      A      1991   8     .
    TO      A      1991   8     .
    MT      A      1990   12    7
    MT      A      1991   7     .
    MT      A      1991   7     .
    AB      B      1990   5     15
    AB      B      1991   15    .
    AB      B      1991   15    .
    end
    
    bysort CMA (Year Province): generate V2 = Income[_n+1] if _n == 1
    
    list, sepby(CMA)
    
         +------------------------------------------+
         | CMA   Province   Year   Income   V1   V2 |
         |------------------------------------------|
      1. |  AB          B   1990        5   15   15 |
      2. |  AB          B   1991       15    .    . |
      3. |  AB          B   1991       15    .    . |
         |------------------------------------------|
      4. |  MT          A   1990       12    7    7 |
      5. |  MT          A   1991        7    .    . |
      6. |  MT          A   1991        7    .    . |
         |------------------------------------------|
      7. |  TO          A   1990        5    8    8 |
      8. |  TO          A   1991        8    .    . |
      9. |  TO          A   1991        8    .    . |
         +------------------------------------------+
    

    【讨论】:

      猜你喜欢
      • 2016-06-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-03-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多