cxqxpy 发表于 2012-2-16 10:48 
谢谢你,十分感激,用你的方法得出了我想要的结果,只是出现了两个小问题(这两个小问题不改也没关系), ...
clear
use "D:\temp\tardevalue.dta", clear
sum year
scalar yearb=r(min)
scalar yeare=r(max)
reshape wide tradevalue tradequantity,i(importer HScode) j(year)
sort importer
drop tradequantity*
local i=yearb
while `i'<yeare{
local j=`i'+1
bysort importer: egen d1_`i'=sum(tradevalue`i'*(tradevalue`i'~=. & tradevalue`j'==.)) /*前一年有数据,后一年没有*/
bysort importer: egen d2_`j'=sum(tradevalue`j'*(tradevalue`i'==. & tradevalue`j'~=.)) /*前一年没有数据,后一年有*/
bysort importer: egen d3_`i'=sum(tradevalue`i'*(tradevalue`i'~=. & tradevalue`j'~=.)) /*前一年有数据,后一年有*/
bysort importer: egen d4_`j'=sum(tradevalue`j'*(tradevalue`i'~=. & tradevalue`j'~=.)) /*前一年有数据,后一年有*/
bysort importer: egen d5_`i'=sum(tradevalue`i') /*前一年总额*/
bysort importer: egen d6_`j'=sum(tradevalue`j') /*后一年总额*/
local i=`i'+1
}
drop tradevalue* exporter HScode
bysort importer: gen id=_n
keep if id==1
drop id
reshape long d1_ d2_ d3_ d4_ d5_ d6_,i(importer) j(year)
rename d1_ d1
rename d2_ d2
rename d3_ d3
rename d4_ d4
rename d5_ d5
rename d6_ d6
*rename *_ *
table importer year
label var d1 "前一年有,而后一年没有数据,前一年的总额"
label var d2 "前一年没有,后一年有数据,后一年的总额"
label var d3 "前一年有,后一年也有数据,前一年的总额"
label var d4 "前一年有,后一年也有数据,后一年的总额"
label var d5 "前一年总额"
label var d6 "后一年总额"
format d* %15.1f
list
des
order importer year d1 d2 d3 d4 d5 d6
*d2+d4=d6
gen d2_ratio=d2/d6
gen d4_ratio=d2/d6