转换为面板数据的最佳技术
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
。
我有 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
。