全部版块 我的主页
论坛 计量经济学与统计论坛 五区 计量经济学与统计软件 Stata专版
1981 2
2012-07-05
悬赏 5 个论坛币 未解决
手上有195个公司,需要两两配对然后作比较。试着写了指令:

save compid2
rename compid compid1
cross using compid2
rename compid compid2
drop if compid1==compid2
duplicates drop



但这样的话
compid1  compid2
     1              9
     9              1
就会被认为是两个组合,但其实公司1和公司9只应该是一个组合

求指点应该如何才能达到那种效果,先行谢过
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

全部回复
2012-7-6 01:04:23
forv i=1/10{
loc s=`i'+1
forv j=`s'/10{
n di `i' "  " `j'
}
}
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2012-7-6 08:03:27
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后缀
imitation.dta.rar
大小:(4.7 KB)

 马上下载

):

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

二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群