楼主: cxqxpy
6099 23

[其他] 如何计算组内不同或重复数据之和 [推广有奖]

21
xts1xts 发表于 2012-2-16 14:20:31
蓝色 发表于 2012-2-15 19:25
clear
use "D:\temp\tardevalue.dta", clear
sum year
版主,我目前也遇到类似的问题。按照你的命令,可以做到想要的结果,有个小问题想请教一下:
你的命令里“local i=`i'+1”,我对这个local不大理解,看过manual 11似乎也没有专门的解释,请您赐教。。。

22
蓝色 发表于 2012-2-16 15:04:45
xts1xts 发表于 2012-2-16 14:20
版主,我目前也遇到类似的问题。按照你的命令,可以做到想要的结果,有个小问题想请教一下:
你的命令里 ...
local i=yearb
      while `i'<yeare{

       local i=`i'+1
       }
这是循环

假如yearb=1996;yeare=1998
相当于
local i=yearb                       即让 i=1996   开始计算
      while `i'<yeare{                 如果i <1998,那么执行下面的循环,否则退出循环
      
      
      
       local i=`i'+1                  让i=1996+1  =1997   然后返回前面判断是否小于1998
       }
  

                        

23
蓝色 发表于 2012-2-16 15:12:07
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

24
xts1xts 发表于 2012-2-16 17:45:42
蓝色 发表于 2012-2-16 15:04
local i=yearb
      while `i'
谢谢版主的解释,非常非常感激!不过我自己的数据还在琢磨中,可能还要向版主请教。

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注jltj
拉您入交流群
GMT+8, 2025-12-31 21:26