| 所在主题: | |
| 文件名: Example.zip | |
| 资料下载链接地址: https://bbs.pinggu.org/a-1355435.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 ... 哪位高手有什么好的解决方法么? 非常感谢! 我已将voodoo提供的方法评为最佳答案,思路清晰,程序简洁明了。sungmoo提供的方案也很好,但是正如voodoo所说,excel copy+paste到stata产生错行,用Stata编程解决错行,并达成最终目的,这恐怕只有像sungmoo一样具备极高超技能才能解决,一般人不太容易理解。 但是voodoo的方法离完美还差那么一点点,问题就在于第一步excel的预处理,这里还要感谢h3327156提供的excel预处理方法。但是即便excel能够替换“换行或回车”为指定的字符串,我仍觉得在尽可能的情况下用Stata提供一站式解决方案最好。 那么现在的问题就转换为如何用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
最后感谢所有参与这个帖子讨论的人,真的获益良多。 |
|
熟悉论坛请点击新手指南
|
|
| 下载说明 | |
|
1、论坛支持迅雷和网际快车等p2p多线程软件下载,请在上面选择下载通道单击右健下载即可。 2、论坛会定期自动批量更新下载地址,所以请不要浪费时间盗链论坛资源,盗链地址会很快失效。 3、本站为非盈利性质的学术交流网站,鼓励和保护原创作品,拒绝未经版权人许可的上传行为。本站如接到版权人发出的合格侵权通知,将积极的采取必要措施;同时,本站也将在技术手段和能力范围内,履行版权保护的注意义务。 (如有侵权,欢迎举报) |
|
京ICP备16021002号-2 京B2-20170662号
京公网安备 11010802022788号
论坛法律顾问:王进律师
知识产权保护声明
免责及隐私声明