楼主: steeds
27091 16

[数据管理求助] 请问如何把横向排列的数据整理成竖向排列的面板数据 [推广有奖]

  • 1关注
  • 1粉丝

讲师

91%

还不是VIP/贵宾

-

威望
0
论坛币
6687 个
通用积分
0.8509
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
319 点
帖子
142
精华
0
在线时间
1157 小时
注册时间
2009-5-9
最后登录
2023-5-16

200论坛币
大家好,假设我有2只股票AAA跟BBB的三项数据var1,var2,var3,时间2004-2005,现在的数据是这样的:

AAA
Period   2004    2005
var1       10          5
var2       20         10
var3       30         15

BBB
Period   2004    2005
var1       10          5
var2       20         10
var3       30         15

我想把它们转换成如下这样
Stock   Period     var1    var2    var3
AAA     2004         10       20       30
AAA     2005          5        10       15
BBB     2004         10       20       30
BBB     2005          5        10       15

请问该怎么做呢,谢谢啦

最佳答案

jjjj6666 查看完整内容

try: /* if the data is like var1 var2 var3 AAA . . Period 2004 2005 var1 10 5 var2 20 10 var3 30 15 BBB . . Period 2004 2005 var1 10 5 var2 20 10 var3 30 15 */ gen company = var1 if var1!="Period" & substr(var1,1,3) ...
关键词:面板数据 数据整理 period Stock tock 如何
Information Asymmetry|Market Microstructure|Credit Rating Agencies
沙发
jjjj6666 发表于 2014-3-13 22:56:15 |只看作者 |坛友微信交流群
try:

/* if the data is like
     var1   var2   var3  
       AAA      .      .  
    Period   2004   2005  
      var1     10      5  
      var2     20     10  
      var3     30     15  
       BBB      .      .  
    Period   2004   2005  
      var1     10      5  
      var2     20     10  
      var3     30     15  
*/

gen company = var1 if var1!="Period" & substr(var1,1,3)!="var"
replace company=company[_n-1] if company==""
drop if company==var1 | var1=="Period"
preserve
drop var3
reshape wide var2, i(company) j(var1) string
tempfile f1
sort company
save `f1'
restore
drop var2
rename var3 var2
reshape wide var2, i(company) j(var1) string
tempfile f2
sort company
save `f2'
use `f1'
append using `f2'
sort company, stable
gen period=2005 if int(_n/2)==_n/2
replace period=2004 if period==.
order company period

已有 2 人评分经验 论坛币 热心指数 收起 理由
xmulinkun + 1 鼓励积极发帖讨论
dxystata + 40 + 20 + 1 精彩帖子

总评分: 经验 + 40  论坛币 + 20  热心指数 + 2   查看全部评分

使用道具

藤椅
dogmamongo 发表于 2014-3-13 23:06:49 |只看作者 |坛友微信交流群
转置
用sas处理挺快的

使用道具

板凳
a529916304 发表于 2014-3-13 23:44:48 |只看作者 |坛友微信交流群
看我发的截图。希望对你有所帮助。

数据表.png (2.53 KB)

excel中,把原有的数据写成你题目的样子。然后复制这些原始数据,在新的单元格中,右击选择性粘贴,选择转置 ...

excel中,把原有的数据写成你题目的样子。然后复制这些原始数据,在新的单元格中,右击选择性粘贴,选择转置 ...

数据生成.png (16.62 KB)

数据生成.png

已有 1 人评分论坛币 热心指数 收起 理由
dxystata + 10 + 1 精彩帖子

总评分: 论坛币 + 10  热心指数 + 1   查看全部评分

使用道具

报纸
zj20000101 发表于 2014-3-14 00:11:48 |只看作者 |坛友微信交流群
命令
命令解释
用法示例
reshape
将数据重整
reshape long inc,i(id) j(yr)
inc--时间前面的统一的变量  
id-要分类的变量
yr-时间



stack
将多列数据转换成一列数据
stack a b c d, into(e f)
xpose
数据转置
xpose, clear

任务4.5 数据集mywide.dta共有六个变量,其中后四个变量分别为2003年和2004年的数据成绩和经济学成绩,现要求将数据转化为mylong.dta的格式,将年份单独做成变量,数学和经济学成绩则成为两个单独变量。

原始数据mywide.dta
id        name        math2003        math2004        economy2003        economy2004
1        John        40        13        68        55
2        Chris        80        64        52        87
3        Jack        90        55        76        25
4        Huang        43        60        90        4
5        Tom        70        68        96        42
6        Han        53        10        85        89
7        Phillip        85        61        36        52
8        Jin        95        6        65        84

转了之后
id        name        year        math        economy
1        John        2003        40        68
1        John        2004        13        55
2        Chris        2003        80        52
2        Chris        2004        64        87
3        Jack        2003        90        76
3        Jack        2004        55        25
4        Huang        2003        43        90
4        Huang        2004        60        4
5        Tom        2003        70        96
5        Tom        2004        68        42
6        Han        2003        53        85
6        Han        2004        10        89
7        Phillip        2003        85        36
7        Phillip        2004        61        52
8        Jin        2003        95        65
8        Jin        2004        6        84



重整参考操作
*---------将学习成绩数据集mywide变换形式---------
use mywide, clear
reshape long math economy, i(id name) j(year)
save mylong, replace
*---------将学习成绩数据集mylong变换形式---------
reshape wide
*或者
use mylong, clear
reshape wide math economy, i(id name) j(yearr)
save mywide2, replace
已有 4 人评分经验 论坛币 学术水平 热心指数 信用等级 收起 理由
yanzehao1995121 + 1 + 1 + 1 精彩帖子
xmulinkun + 1 + 1 + 1 好的意见建议
dxystata + 40 + 1 + 1 精彩帖子
蓝色 + 60 + 1 精彩帖子

总评分: 经验 + 40  论坛币 + 60  学术水平 + 3  热心指数 + 4  信用等级 + 2   查看全部评分

使用道具

地板
steeds 发表于 2014-3-14 01:01:21 |只看作者 |坛友微信交流群
a529916304 发表于 2014-3-13 23:44
看我发的截图。希望对你有所帮助。
谢谢啊,但是我有很多股票,AAA,BBB。。。很多,直接转置的话远超excel允许的列数极限。我是想把BBB还是放在AAA下面
Information Asymmetry|Market Microstructure|Credit Rating Agencies

使用道具

7
steeds 发表于 2014-3-14 07:08:17 |只看作者 |坛友微信交流群
jjjj6666 发表于 2014-3-13 22:56
try:

/* if the data is like
多谢啊
Information Asymmetry|Market Microstructure|Credit Rating Agencies

使用道具

8
蓝色 发表于 2014-3-14 08:10:18 |只看作者 |坛友微信交流群
如果1,2个转置的情况,excel是可以实现,
但如果在大量需要转置的情况,如果还想用excel,你需要会写宏程序去转置,也是可以实现的,
否则的把人累死啊。

所以,还是要学习编程软件,excel只是一个辅助而已。

使用道具

9
xmulinkun 在职认证  发表于 2015-3-9 01:34:23 |只看作者 |坛友微信交流群
楼主可以把他们合并起来,然后用reshape命令处理。help reshape就知道什么意思了

使用道具

10
liuding1111 发表于 2015-3-9 22:51:48 |只看作者 |坛友微信交流群
如果先用xpose命令转置,然后用append命令拼接,最为简洁

使用道具

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注jltj
拉您入交流群

京ICP备16021002-2号 京B2-20170662号 京公网安备 11010802022788号 论坛法律顾问:王进律师 知识产权保护声明   免责及隐私声明

GMT+8, 2024-11-25 06:37