楼主: hbhszhr
1972 6

[面板数据求助] 一个简单的数据内合并问题 希望求助 [推广有奖]

  • 0关注
  • 0粉丝

小学生

57%

还不是VIP/贵宾

-

威望
0
论坛币
0 个
通用积分
0
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
37 点
帖子
3
精华
0
在线时间
12 小时
注册时间
2010-11-5
最后登录
2019-5-6

楼主
hbhszhr 发表于 2014-9-29 12:43:24 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
用stata做project中间处理需要一步,自己尝试了半天各种方法也没弄明白,但是感觉会很简单,希望各位大神帮助。
我的原数据类似为:
country   year      score1    score2     score3
China      2010         1         
China      2011   
China      2012         2
USA        2010        
USA        2011         1
USA        2012         2
Japan     2010         1
Japan     2011         2
Japan     2012         3
China      2010                    1         
China      2011   
China      2012                    2
USA        2010        
USA        2011                    1
USA        2012                    3
Japan     2010                    2
Japan     2011                    3
Japan     2012         

China      2010                                1         
China      2011   
China      2012                                2
USA        2010        
USA        2011                                1
USA        2012                                3
Japan     2010                                2
Japan     2011                                
Japan     2012                                3




即第1行到第9行只有score1  第10行到第18行只有score2    第19行到第27行只有score3, 但是每种score都可能会有missing data。如果看了上表,很明显这个表的表述方式很累赘,本来的27行只需要9行就够了,只需要把后面的score2和socre3都移到前九行。这个问题用Excel非常容易实现,但是使用stata,我尝试了使用duplicates等方法都不知道如何实现,希望各位大神能帮我解答。

      此外,基于这个问题,我想问一个非常简单的问题,例如对于Score2,如果我只想选取它之中的第10行到第18行的九行数据,然后把它移到第一行到第九行,有什么方法快速实现,这样的话,也基本简单的解决了我的问题。


希望有人给出解答,不胜感激!
二维码

扫码加我 拉你入群

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

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

关键词:duplicates duplicate Country Project missing country China 2011

沙发
emilychou 发表于 2014-9-29 16:49:20
help merge  and append

藤椅
ywh19860616 发表于 2014-9-29 18:07:16
  1. clear
  2. input str16 country   year    score1   score2
  3. China      2010        1         .
  4. China      2011        .         .
  5. China      2012        2         .
  6. USA        2010        .         .
  7. USA        2011        1         .
  8. USA        2012        2         .
  9. Japan     2010         1         .
  10. Japan     2011         2         .
  11. Japan     2012         3          .
  12. China      2010        .          1         
  13. China      2011        .          .
  14. China      2012         .         2
  15. USA        2010        .           .  
  16. USA        2011        .           1
  17. USA        2012        .            3
  18. Japan     2010          .          2
  19. Japan     2011          .          3
  20. Japan     2012         .            .
  21. end


  22. preserve
  23. forv i = 1/2 {
  24. local k1 = 1 + (`i' - 1)*9
  25. local k2 = 9 + (`i' - 1)*9
  26. keep in `k1'/`k2'
  27. keep country year score`i'
  28. save ddt`i',replace
  29. restore,preserve
  30. }


  31. use ddt1,clear
  32. joinby country year using ddt2
复制代码
已有 1 人评分论坛币 学术水平 热心指数 收起 理由
SpencerMeng + 20 + 1 + 1 观点有启发

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

板凳
hbhszhr 发表于 2014-9-30 00:46:13
emilychou 发表于 2014-9-29 16:49
help merge  and append
merge 和 append 都是在处理多个dta之间的横向和纵向合并吧,而我这只是一个dta内的重整问题,有什么好的方法来进行拆分?

报纸
hbhszhr 发表于 2014-9-30 01:01:59
ywh19860616 发表于 2014-9-29 18:07
你好,非常感谢你的回答,我大致看懂了你的思路,和我自己实际解决的模式是一样的,就是把表单分拆成了两个dta,然后用joinby。但是,基于我的实际问题,我有下面两个疑问:
1. jionby 这个命令只能在原有一个数据基础上再去合并一个数据,而不是多个数据。我实际处理的数据量非常庞大(也就是例子中的socre种类非常多),可能使用这个分拆方法要分拆成非常多个表格,jionby的时候也要一个个的去合并,有没有什么简单的方法能一次把这些分拆好的dta都合并?

2. 这个问题我还有一个思路:
例如例子中的27行我可以分成三组,每组九行,实际针对各种score,我可以对每一组的第一行,第二行。。。。第九行分别进行求和,然后覆盖原数据的前九行,最后删掉删掉剩下的十八行,也能达到我的要求。

如果按照这个思路,有没有办法在不建立新的dta的基础上就完成这个问题?


希望能得到你的回答,麻烦了!!

地板
ywh19860616 发表于 2014-9-30 08:46:57
hbhszhr 发表于 2014-9-30 01:01
你好,非常感谢你的回答,我大致看懂了你的思路,和我自己实际解决的模式是一样的,就是把表单分拆成了两 ...
  1. mkdir C:\test1\analysis
  2. cd C:\test1\analysis

  3. clear
  4. input str16 country   year    score1   score2  score3
  5. China      2010        1         .         .
  6. USA        2011        1         .         .
  7. China      2010        .         2         .
  8. USA        2011        .         2         .
  9. China      2010        .         .         3
  10. USA        2011        .         .         3
  11. end




  12. preserve
  13. forv i = 1/3 {
  14. local k1 = 1 + (`i' - 1)*2
  15. local k2 = 2 + (`i' - 1)*2
  16. keep in `k1'/`k2'
  17. keep country year score`i'
  18. save tmp`i',replace
  19. restore,preserve
  20. }


  21. use tmp1,clear
  22. local i = 2
  23. while (`i'<=3) {
  24. joinby country year using tmp`i'
  25. local i = `i' + 1
  26. }
  27. save final.dta,replace

  28. forv i = 1/3 {
  29. erase tmp`i'.dta
  30. }
复制代码

7
emilychou 发表于 2014-10-1 17:12:34
hbhszhr 发表于 2014-9-30 00:46
merge 和 append 都是在处理多个dta之间的横向和纵向合并吧,而我这只是一个dta内的重整问题,有什么好的 ...
如果数据项目(score)不是特别多的话,可以尝试先分成多个表,然后用merge啊

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

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