转换为面板数据的最佳技术

Best technique to convert to panel data

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

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

我附上了原始数据集的示例以及我希望它看起来像什么。有没有办法做到这一点?我是 Excel/VBA 的中级水平,是 SAS/Stata 的新手,但可以使用它们并自学。

这可以在 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;

在 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