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

时间:2016-09-28 12:22:16

标签: excel vba sas stata panel-data

我有1000多家公司的退货数据,我想将其转换成面板形式。

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

我附上了原始数据集的示例以及我想要它的样子。有没有办法实现这个目标?我是Excel / VBA的中间人,是SAS / Stata的新手,但可以使用它们并自我教学。

enter image description here

2 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:3)

在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