楼主在主楼中上传了两份excel文件。请撤掉
不适用于你命令的那个(一份有sheet1,一份有Deals10)。
我觉得您可能没有试验我的代码,我最后的代码的结果完全符合我问题的要求。
采用主楼中所给出的
有sheet1的那个excel文件,再采用以下主楼中所给出的代码(已不存在默认目录问题):
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 Advisor Assignment, i(Number) j(num)
drop if Advisor==""&Assignment==""
会发现生成了ID1-ID11这些变量,这些变量是楼主所要的?且最后一个命令显示type mismatch。请问楼主用的是哪份数据与哪些命令?
<另>主楼中的命令改作以下即可:
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==""
本方法优点是:完全自动,命令行少(从而容易理解);缺点是:可能生成长字符串变量及大量中间变量(从而多占内存),运行时间稍长。
个人倾向(或者习惯)少生成中间变量,特别是处理大数据库时。数据处理速度上似乎是怕宽(变量多)不怕长(观测值数多)。
您说的这个问题只不过是我一开始用subinstr和char(10)解决的问题而已
个人觉得(当然可能因人而异),这个思路的核心就是
如何(手工或自动)查找或替换不可打印字符而已(也就是让,
分行且在同一单元格的内容变成
同一个观测值的内容)。(至于后面的部分是水到渠成的,只不过如何压缩运行时间与命令行而已)
另一思路的核心是,(利用stata对分行内容可能具有的处理方式)让分行且在同一单元格的内容直接变成不同观测值的内容。(后面的部分仍是水道渠成的,仍是压缩时间与命令字符数的问题)
简单重复地说,两种思路并在一起考虑,对于“分行单元格”的处理,个人以为不过是,最初要不要查找或替换不可打印字符而已(也就是如何对付已有的分行符),由此引出后面不同的再处理。
若要再说一些不同之处。每个人的思维模式可能不一样,一种是根据后面部分找前面部分的处理方法,一种是根据前面部分找后面部分的处理方法。哪种方法“更有效”,应该没有一般的客观标准。客观的也许只是运行时间与命令字符数。