楼主: laojie
3211 7

[数据管理求助] 如何批量合并多个具有相同变量的时间序列数据,悬赏5个币 [推广有奖]

  • 1关注
  • 0粉丝

已卖:4份资源

本科生

39%

还不是VIP/贵宾

-

威望
0
论坛币
3456 个
通用积分
52.7080
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
1511 点
帖子
55
精华
0
在线时间
100 小时
注册时间
2006-12-28
最后登录
2025-11-23

楼主
laojie 发表于 2016-10-9 00:50:34 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
我收集了100多个国家1995年-2005年的专题数据,以年为单位存储在1张excel里的20个sheet里。每个sheet的数据结果如下:变量完全相同,但每年参与统计的国家不完全重合。

countryscorerank
Argentina

5

24

Australia

9

7

Austria

7

16

Belgium/Luxembourg

7

19

Brazil

3

37

Canada

9

5



目前我已经把这20个sheet批量转换成20个.dta文件,分别命名为1995.dta、1996.dta……2005.dta。
我的问题是: 如何将这20个dta文件合并成一个文件,并且增加year这个变量?
                    也就是说,如何形成这样的数据库?

countryscorerankyear
Argentina

5

24

1995

Australia

9

7

1995

Austria

7

16

1995

Belgium/Luxembourg

7

19

1995

Argentina

3.41

35

1996

Australia

8.6

10

1996

Austria ..

1996

Belgium/Luxembourg ..

1996



多谢!悬赏功能不会用,一定兑现。请高手帮忙!
二维码

扫码加我 拉你入群

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

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

关键词:时间序列数据 序列数据 时间序列 Argentina Australia stat country excel 数据库 如何

回帖推荐

夏目贵志 发表于8楼  查看完整内容

是。会有这个出现,但是duplicates drop就好了。并没什么影响。也可以 use data1.dta drop in 1/l forvalues i=1/10 { append using data`i' } 这样先drop掉也是可以的。应该比duplicates drop略快一点。

沙发
夏目贵志 发表于 2016-10-9 00:56:45
保存每个文件之前生成一个year变量,比如
... import ...
gen year = 1995
save 1995.dta
这样。
然后全部append到一起就可以了。

藤椅
laojie 发表于 2016-10-9 01:12:40
夏目贵志 发表于 2016-10-9 00:56
保存每个文件之前生成一个year变量,比如
... import ...
gen year = 1995
多谢您的回复,我考虑过这个思路。
还是有点费劲啊,有更好的办法吗?

板凳
夏目贵志 发表于 2016-10-9 01:27:38
laojie 发表于 2016-10-9 01:12
多谢您的回复,我考虑过这个思路。
还是有点费劲啊,有更好的办法吗?
....我一直都是这么做的。很快啊。并没有觉得费劲。我觉得与其花时间想怎么用别的方法做,还不如就这么做了就算了。
话说,记得用循环哦,别手动一个一个弄啊。

报纸
laojie 发表于 2016-10-9 01:38:42
夏目贵志 发表于 2016-10-9 01:27
....我一直都是这么做的。很快啊。并没有觉得费劲。我觉得与其花时间想怎么用别的方法做,还不如就这么做 ...
嗯,你说的也对。
用循环函数怎么做呢?我试着写了一个,但系统提示找不到.dta。
  1. cd "C:\Users\laojie\Desktop\test"
  2. local myfilelist: dir . files "*.dta"
  3. foreach x of local myfilelist {
  4. append using  “`x'”
  5. save "merge.dta", replace
  6. clear
  7. }
复制代码
系统报错:file ?_2009.dta?not found
r(601);

cd文件夹下明明有5个.dta文件,分别是1_2009.dta、1_2010.dta……1_2013.dta.

求救哪里有错?

地板
laojie 发表于 2016-10-9 01:40:40
夏目贵志 发表于 2016-10-9 01:27
....我一直都是这么做的。很快啊。并没有觉得费劲。我觉得与其花时间想怎么用别的方法做,还不如就这么做 ...
我之前写过一个循环函数,死活运行不了,就放弃了
听你一说,又检查了一遍,发现是双引号用了中文、而非英文格式,导致无法辨认

现在已经修正过来了,托你洪福,终于run成功了
话说下载币怎么给你?实在是不会用这个系统

7
laojie 发表于 2016-10-9 03:18:11
夏目贵志 发表于 2016-10-9 01:27
....我一直都是这么做的。很快啊。并没有觉得费劲。我觉得与其花时间想怎么用别的方法做,还不如就这么做 ...
我发现写循环有一个问题,
最后一年的数据,会重复出现两次,因为它和自己合并了一次。我接着把重复案例删除了

您也有同样的问题吗?是不是我的循环写的不对?
local myfilelist: dir . files "*.dta"
foreach x of local myfilelist {
append using  "`x'"
}
save merge,replace

8
夏目贵志 发表于 2016-10-9 04:16:46
laojie 发表于 2016-10-9 03:18
我发现写循环有一个问题,
最后一年的数据,会重复出现两次,因为它和自己合并了一次。我接着把重复案例 ...
是。会有这个出现,但是duplicates drop就好了。并没什么影响。也可以
use data1.dta
drop in 1/l
forvalues i=1/10 {
append using data`i'
}
这样先drop掉也是可以的。应该比duplicates drop略快一点。
已有 1 人评分学术水平 热心指数 收起 理由
laojie + 1 + 1 精彩帖子

总评分: 学术水平 + 1  热心指数 + 1   查看全部评分

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

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