【问题标题】:Best technique to convert to panel data转换为面板数据的最佳技术
【发布时间】:2017-02-06 10:15:07
【问题描述】:

我有一些关于 1000 多家公司的退货数据,我想将其转换为面板形式。

根据我的理解,它既不是真正的宽格式也不是长格式(至少从我看到的示例来看)。

我附上了原始数据集的示例以及我希望它的外观。有没有办法做到这一点?我是 Excel/VBA 的中级人员,并且是 SAS/Stata 的新手,但可以使用它们并自学。

【问题讨论】:

  • 这完全是宽数据,SAS 中只需要一个基本的 Proc 转置。如果您无法确定代码发布您尝试过的内容。提示:仅指定您的输入和输出数据集以及按日期变量。
  • 在 Stata 中查看 help reshape。
  • 这里的好问题展示了一些代码尝试和(在这个领域)可以复制和粘贴的数据示例。

标签: excel vba sas stata panel-data


【解决方案1】:

考虑这个在 Stata 中使用 reshape 的例子:

clear *
input float(date FIRM_A FIRM_B FIRM_C FIRM_D)
 1 .14304407   .8583148  .3699433  .7310092
 2 .34405795   .9531917  .6376472  .2895169
 3 .04766626   .6588161  .6988417  .5564945
 4 .21615694  .18380463  .4781089  .3058527
 5   .709911     .85116 .14080866 .10687433
 6  .3805699 .070911616 .55129284  .8039169
 7  .1680727   .7267236  .1779183 .51454383
 8  .3610604   .1578059 .15383714  .9001798
 9  .7081585   .9755411 .28951603 .20034006
10 .27780765   .8351805 .04982195  .3929535
end

reshape long FIRM_, i(date) j(Firm_ID) string
rename FIRM_ return
replace Firm_ID = "Firm " + Firm_ID

list in 1/8, sepby(date)
     +---------------------------+
     | date   Firm_ID     return |
     |---------------------------|
  1. |    1    Firm A   .1430441 |
  2. |    1    Firm B   .8583148 |
  3. |    1    Firm C   .3699433 |
  4. |    1    Firm D   .7310092 |
     |---------------------------|
  5. |    2    Firm A   .3440579 |
  6. |    2    Firm B   .9531917 |
  7. |    2    Firm C   .6376472 |
  8. |    2    Firm D   .2895169 |
     +---------------------------+

有关该主题的更多信息,请参阅help reshape。

【讨论】:

  • 感谢您的回复。这看起来与我需要的非常接近,但实际上我所追求的输出需要按日期顺序对公司 A 进行所有观察,并且相应的回报升序。我将如何改变它来获得它?
  • 这个还是有问题的。我不确定如何同时按升序日期和升序 id 进行排序。也就是说,让日期升序为 id = 1,然后循环回到起点并升序为 id = 2。我试过 gsort +date +id 无济于事
  • 从头开始 - 它确实有效,但它已将日期按升序排序,但将日期变量识别为字符串......我只需将其更改为日期
【解决方案2】:

这可以通过 SAS 中的proc transpose 轻松完成。您需要添加的只是 A 列的列名。这将是您的 by 变量,以便以下变量将沿每个特定日期转置。除此之外,只需确保您的数据按日期列排序。代码看起来类似于:

proc sort data=have;
by date;
run;

proc transpose data=have out=want; /* you could add a name= or prefix= statement here to rename your variables */
by date;
run;

【讨论】:

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