html拆分单元格多行,拆分一个单元格中多行字符到不同单元格

有如下格式excel数据:

Number           ID                Assignment

1                     A                       AS1

B                       AS2

C                       AS3

2                     A                       AS5

D                       AS2

3                     E                       AS6

...

以Number为1的这个观察值来说,ID:A,B,C在同一个excel单元格里的不同行,同理Assigment:AS1,AS2,AS3也在同一个excel单元格里的不同行。

现想用stata将同一个单元格中不同行的string转入不同观察值,如下格式所示:

Number         ID                   Assignment

1                    A                          AS1

1                    B                          AS2

1                    C                          AS3

2                    A                          AS5

2                    D                          AS2

3                    E                          AS6

...

哪位高手有什么好的解决方法么?

非常感谢!

d86fd4823ec08af74d1f1a2f6d78dea3.gif

2013-6-25 00:51:20 上传

我已将voodoo提供的方法评为最佳答案,思路清晰,程序简洁明了。sungmoo提供的方案也很好,但是正如voodoo所说,excel copy+paste到stata产生错行,用Stata编程解决错行,并达成最终目的,这恐怕只有像sungmoo一样具备极高超技能才能解决,一般人不太容易理解。

但是voodoo的方法离完美还差那么一点点,问题就在于第一步excel的预处理,这里还要感谢那么现在的问题就转换为如何用Stata处理导入excel带来的换行问题。Dr Nick Cox编写的charlist(需要ssc install)可以查看variable中包含的ASCII码,但是很遗憾,经我试验,这个命令并不显示“换行”字符。经Statalist上Joseph Coveney的提示,char(10)和 char(13)分别代表line feed和carriage return。于是我用subinstr解决字符替换问题。最后结合voodoo的代码后,我编写完整程序如下:

***import data***

clear

import excel "Example.xlsx", sheet("sheet1") firstrow

***replace line feed with "///"***

gen ids=subinstr(ID,char(10),"///",.)

gen assignments=subinstr(Assignment,char(10),"///",.)

***split each ID and Assignment into different observations***

split ids, gen(ID) parse("///")

split assignments, gen(Assignment) parse("///")

drop ID Assignment ids assignments

***reshape to long data***

reshape long ID Assignment, i(Number) j(num)

drop if ID==""&Assignment==""

针对上述程序,sungmoo又提出了让代码更简洁的修改建议

import excel "Example.xls", sh("sheet1") first clear

split ID, p(`=char(10)')

split Assignment, p(`=char(10)')

drop ID Assignment

reshape long ID Assignment, i(Number)

drop if ID==""

最后感谢所有参与这个帖子讨论的人,真的获益良多。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值