楼主: cxqxpy
6100 23

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

11
cxqxpy 在职认证  发表于 2012-2-14 18:13:27
蓝色 发表于 2012-2-14 16:53
你还是没有说清楚到底想怎么做。
你把中国一个国家不同年份,列出几个年份和代码就可以。
然后再把你想要 ...
year        importer        tradevalue        HScode
1995        Albania              647        910591
1995        Albania          16550        610822
1995        Albania            4172        844220
1995        Albania        236548        845290
1996        Albania            9532        910591
1996        Albania          34966        420212
1996        Albania            6747        961320
1996        Albania        315587        551341
1996        Albania        340902        620530
1996        Albania            2800        611710
1996        Albania          78927        691110
1996        Albania            2419        853649
这是A国95、96两年的部分数据,每一组样本表示的是某国(importer,共2几个)某年(year,95-10年)从中国进口多少(tradealue)某种(hscode,每个国家每年出口种类不定)产品,我想要的结果是从96年开始:
1.每年每个国家与自身上年相比出口了哪些不同类别的商品
2.以及每年每个国家这些不同类别商品的进口总额是多少。

我要的最终结果是2,
举例说,Albania95年进口了4种商品(HS编码),96年进口了8种商品,
在96年的8种商品中有一种(hs编码为910591)与95年相同,
            另外七种都不同(即96年有而95年没有),
我要算的就是96年Albania这7种商品对应的进口总额是多少?
(如果有能的话还要算出95年有而96年没有的那三种产品对应进口额是多少)
这是一个国家一年的数据,总的是 22个国家,15年的数据。
需要注意的是这里要的是每个国家相邻两年(96比95、97比96)出口商品的比较,好像不能简单的用duplicate命令。

12
cxqxpy 在职认证  发表于 2012-2-14 20:06:09
木有人回,自己顶一下,莫要沉了下去了

13
蓝色 发表于 2012-2-14 20:45:08
你贴出一个两个国家,3年的数据,有一些样本就可以,
这样容易编循环

14
cxqxpy 在职认证  发表于 2012-2-14 21:05:08
数据太大,我截取了一部分,版主帮我看看吧

tardevalue.zip
下载链接: https://bbs.pinggu.org/a-1043486.html

909.72 KB

本附件包括:

  • tardevalue.dta

15
cxqxpy 在职认证  发表于 2012-2-15 09:34:52
再顶一下

16
bwhbwh 发表于 2012-2-15 17:48:57
看来做广义边际,feenstrn外交使团指数

17
蓝色 发表于 2012-2-15 19:25:57
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_`j'=sum(tradevalue`i'*(tradevalue`i'~=. & tradevalue`j'==.))  /*前一年有数据,后一年没有*/
                    bysort importer: egen d2_`j'=sum(tradevalue`j'*(tradevalue`i'==. & tradevalue`j'~=.))  /*前一年没有数据,后一年有*/
                    bysort importer: egen d3_`j'=sum(tradevalue`i'*(tradevalue`i'~=. & tradevalue`j'~=.))  /*前一年有数据,后一年有*/
                    bysort importer: egen d4_`j'=sum(tradevalue`j'*(tradevalue`i'~=. & 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_ ,i(importer) j(year)
rename *_     *


table importer year

label var d1 "前一年有,而后一年没有数据,前一年的总额"
label var d2 "前一年没有,后一年有数据,后一年的总额"
label var d3 "前一年有,后一年也有数据,前一年的总额"
label var d4 "前一年有,后一年也有数据,后一年的总额"
format d* %15.1f
list
des


已有 2 人评分经验 论坛币 学术水平 热心指数 信用等级 收起 理由
Sunknownay + 100 + 10 + 1 + 1 + 1 热心帮助其他会员
cxqxpy + 1 + 1 + 1 热心帮助其他会员

总评分: 经验 + 100  论坛币 + 10  学术水平 + 2  热心指数 + 2  信用等级 + 2   查看全部评分

18
sungmoo 发表于 2012-2-16 02:49:24
这是A国95、96两年的部分数据,每一组样本表示的是某国(importer,共2几个)某年(year,95-10年)从中国进口多少(tradealue)某种(hscode,每个国家每年出口种类不定)产品,我想要的结果是从96年开始:
1.每年每个国家与自身上年相比出口了哪些不同类别的商品
2.以及每年每个国家这些不同类别商品的进口总额是多少。

我要的最终结果是2,
举例说,Albania95年进口了4种商品(HS编码),96年进口了8种商品,
在96年的8种商品中有一种(hs编码为910591)与95年相同,另外七种都不同(即96年有而95年没有),
我要算的就是96年Albania这7种商品对应的进口总额是多少?
(如果有能的话还要算出95年有而96年没有的那三种产品对应进口额是多少)
这是一个国家一年的数据,总的是 22个国家,15年的数据。
需要注意的是这里要的是每个国家相邻两年(96比95、97比96)出口商品的比较
*试一下:
tempfile a
use tardevalue.dta, clear
keep year exporter HScode
duplicates drop _all,force
forv i=1995/1998{
g y`i'=(year==`i')
}
collapse (sum)y1995-y1998, by(exporter HScode)
forv i=1996/1998{
loc j=`i'-1
g x`i'=y`i'-y`j'
}
drop y1995-y1998
reshape long x,i(exporter HScode) j(year)
sort exporter year HScode
ren exporter importer
save `a'
use tardevalue.dta, clear
mer m:1 importer year HScode using `a'
keep if _merge==3
g v=tradevalue*(x!=0)
collapse (sum) v, by(importer year)
已有 1 人评分经验 论坛币 学术水平 热心指数 信用等级 收起 理由
Sunknownay + 100 + 10 + 1 + 1 + 1 热心帮助其他会员

总评分: 经验 + 100  论坛币 + 10  学术水平 + 1  热心指数 + 1  信用等级 + 1   查看全部评分

19
sungmoo 发表于 2012-2-16 02:51:12

20
cxqxpy 在职认证  发表于 2012-2-16 10:48:48
蓝色 发表于 2012-2-15 19:25
clear
use "D:\temp\tardevalue.dta", clear
sum year
谢谢你,十分感激,用你的方法得出了我想要的结果,只是出现了两个小问题(这两个小问题不改也没关系),1. rename命令时我是直接按你给的命令复制过去的,结果出现了
.  rename *_ *
* invalid name
r(198);
因为我不懂stata,星号里面的内容是不是需要我自己添些内容我没有添才出现这个问小问题的吗?
2.得出的结果中d1和d3都是本年和前年相比前一年的总额,但是这个数据却放在在了本年度,怎样把它放在前一年度,这个问题的产生是不是不因为我前面rename写错了?
另外我想问如果我想用d2和d4除以所对应国家和年份的出口总额,得出d2和d4分别占该国本年度进口总额的百分比用哪个命令呢?

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

本版微信群
加好友,备注jltj
拉您入交流群
GMT+8, 2026-1-1 01:11