sungmoo 发表于 2012-7-6 01:04 
forv i=1/10{
loc s=`i'+1
forv j=`s'/10{
非常感谢,我试着运行了一下,大概明白了这个方法,但是还有几个问题:
1.只能在Results Window里面显示结果,在Data Editor里没变化,不利于后续操作
2.源数据中公司id不是连续的,而且还要做同年比较(专利数什么的),在同一年中公司id就更不连续了
刚才我想了个办法,就是强行规定compid1必须小于compid2,不符合的全部转换到符合的顺序,这样就可以duplicates drop了
附上代码和源文件(论坛不支持dta上传啊……加了个rar后缀
):
forv i=1983/2006{
use imitation, clear
keep if year==`i'
keep compid
if _N>0 {
save compid`i'.dta, replace
rename compid compid1
cross using compid`i'.dta
rename compid compid2
drop if compid1==compid2
clonevar compid=compid1 if compid1>compid2
replace compid1=compid2 if compid!=.
replace compid2=compid if compid!=.
drop compid
duplicates drop
gen year=`i'
save cross`i'.dta, replace
}
else {
drop compid
set obs 1
gen compid1=999
gen compid2=999
gen year=`i'
save compid`i'.dta, replace
save cross`i'.dta, replace
}
}
use cross1983, clear
forv i=1984/2006{
append using cross`i'.dta
}
drop if compid1==999
save cross, replace