【问题标题】:Restructuring variables in Stata在Stata中重组变量
【发布时间】:2018-08-24 20:56:44
【问题描述】:

我是 Stata 的新用户,我正在尝试了解它是如何执行命令的。我在将数据从当前格式重组为面板数据格式时遇到了麻烦。

我正在使用公司级别的微数据,例如,包含公司 ID、上一可用年份(从该公司收集数据的最新年份)和营业额(REV_LAY-0 = 上一可用年份的营业额 - 0 , REV_LAY-1 = 上次播出年份的营业额 - 1 等等)。

目前的数据格式如下:

所需的面板格式如下所示:

在 SAS 中,我会循环执行以下操作:

if last_avail_yr=2016 then do;
rev_2016=rev_lay-0;
rev_2015=rev_lay-1;
rev_2014=rev_lay-2;
rev_2013=rev_lay-3;
end;

但我不太确定如何做到这一点。我尝试使用带有forvalues 循环的if 语句来实现类似的结果,但效果不佳。

示例数据如下:

MARK BvD_ID       LAST_AVAIL_YR REV_LAY0 REV_LAY1 REV_LAY2 REV_LAY3 REV_LAY4
437  ESA22001721  2016          27689    32097    28992    35868    36493
438  ESF23212103  2015          26786    52095    33023    29493    40368
439  ESB45426806  2012          22072    14864    12877    15330    6403
440  ESA45039294  2015          26700    23387    21104    21272    20002
441  ESB76638790  2016          27480    24303    10699    .        .

谁能帮我解决这个问题的Stata代码?

【问题讨论】:

  • 请像 SAS 代码一样发布示例数据,作为其他人可以复制和粘贴的文本。 statalist.org/forums/help#stata 的指南通常也适用于此。
  • 我在我的帖子中发布了示例数据。正如 Mauricio 指出的那样,问题中描述的变量名称在 stata 中不是有效名称。我把名字这样写是为了让问题更清楚。
  • 我还是很不清楚。例如,我在上面没有看到firm_id,但它在你的图片中,@Mauricio 指的是它。
  • firm_id 是 BvD_ID,很抱歉更改了变量的名称,没有在帖子中说清楚

标签: stata panel-data


【解决方案1】:

rev_lay-0 等在 Stata 中不是有效名称,所以我假设它们将被命名为 rev_lay_0 等等。鉴于此,以下应该可以解决问题:a

reshape long rev_lay_, i(firm_id last_avail_yr) j(id)
by firm_id last_avail_yr: gen yr = last_avail_yr - _n + 1
keep firm_id last_avail_yr rev_lay_ yr
reshape wide rev_lay_, i(firm_id last_avail_yr) j(yr)

【讨论】:

    【解决方案2】:

    虽然接受的答案为 OP 提供了所要求的内容,但所需的数据布局在 Stata 中并不是很有用。单独一个reshape long 会产生一个简单的布局,这对于大多数数据管理、所有图形和所有在 Stata 中使用面板数据进行的统计建模来说要好得多:

    clear 
    input MARK str11 BvD_ID       LAST_AVAIL_YR REV_LAY0 REV_LAY1 REV_LAY2 REV_LAY3 REV_LAY4
    437  ESA22001721  2016          27689    32097    28992    35868    36493
    438  ESF23212103  2015          26786    52095    33023    29493    40368
    439  ESB45426806  2012          22072    14864    12877    15330    6403
    440  ESA45039294  2015          26700    23387    21104    21272    20002
    441  ESB76638790  2016          27480    24303    10699    .        .
    end 
    
    reshape long REV_LAY , i(BvD_ID) 
    
    gen YEAR = LAST_AVAIL_YR - _j
    drop if missing(REV_LAY)
    drop _j LAST
    
    list, sepby(BvD_ID)
    
          +-------------------------------------+
         |      BvD_ID   MARK   REV_LAY   YEAR |
         |-------------------------------------|
      1. | ESA22001721    437     27689   2016 |
      2. | ESA22001721    437     32097   2015 |
      3. | ESA22001721    437     28992   2014 |
      4. | ESA22001721    437     35868   2013 |
      5. | ESA22001721    437     36493   2012 |
         |-------------------------------------|
      6. | ESA45039294    440     26700   2015 |
      7. | ESA45039294    440     23387   2014 |
      8. | ESA45039294    440     21104   2013 |
      9. | ESA45039294    440     21272   2012 |
     10. | ESA45039294    440     20002   2011 |
         |-------------------------------------|
     11. | ESB45426806    439     22072   2012 |
     12. | ESB45426806    439     14864   2011 |
     13. | ESB45426806    439     12877   2010 |
     14. | ESB45426806    439     15330   2009 |
     15. | ESB45426806    439      6403   2008 |
         |-------------------------------------|
     16. | ESB76638790    441     27480   2016 |
     17. | ESB76638790    441     24303   2015 |
     18. | ESB76638790    441     10699   2014 |
         |-------------------------------------|
     19. | ESF23212103    438     26786   2015 |
     20. | ESF23212103    438     52095   2014 |
     21. | ESF23212103    438     33023   2013 |
     22. | ESF23212103    438     29493   2012 |
     23. | ESF23212103    438     40368   2011 |
         +-------------------------------------+
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-04-29
      • 2017-03-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多