楼主: 纯宇之恋
6215 16

[数据管理求助] 短数据变长数据 [推广有奖]

  • 22关注
  • 5粉丝

讲师

69%

还不是VIP/贵宾

-

威望
0
论坛币
5326 个
通用积分
15.2186
学术水平
12 点
热心指数
12 点
信用等级
6 点
经验
3750 点
帖子
220
精华
0
在线时间
876 小时
注册时间
2010-9-22
最后登录
2024-10-27

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
原始数据结构如下:
country  indicator  year1991  year1992  
A           xx              1             2            
A           yy              3             4                  
B           xx              5             6         
B           yy              7             8

我想变成下面的结构:
country year      xx    yy
A          1991      1     3
A          1992      2     4
B          1991      5     7
B          1992      6     8

以上仅是个例子,实际数据中国家和indicator更多。虽然我已经用最笨的方法搞定了(如果indicator只有一种我是会处理的),但是还是想知道用循环如何处理。
不知道哪位可以帮忙解决一下。非常感谢!
二维码

扫码加我 拉你入群

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

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

关键词:长数据 Indicator Country Count year country 国家 如何

回帖推荐

hplcdadong 发表于15楼  查看完整内容

本帖被以下文库推荐

要么别抱怨,要么改变!
沙发
SpencerMeng 在职认证  发表于 2015-4-29 07:27:07 |只看作者 |坛友微信交流群
good question

已帮你@高手

使用道具

藤椅
lavie8023 发表于 2015-4-29 10:11:18 |只看作者 |坛友微信交流群
你说的最笨的方法是RESHAPE吗

使用道具

板凳
纯宇之恋 发表于 2015-4-29 20:53:58 |只看作者 |坛友微信交流群
lavie8023 发表于 2015-4-29 10:11
你说的最笨的方法是RESHAPE吗
如果Indicator只有一种,reshape可以处理。因为我这里indicator有多个,我就是只能拆成一个一个的子数据文件,reshape完了再merge在一起,我的indicator有十几个呢,超级浪费时间。

使用道具

报纸
纯宇之恋 发表于 2015-4-29 20:54:29 |只看作者 |坛友微信交流群
SpencerMeng 发表于 2015-4-29 07:27
good question

已帮你@高手
谢谢!!

使用道具

地板
纯宇之恋 发表于 2015-4-30 11:00:23 |只看作者 |坛友微信交流群
SpencerMeng 发表于 2015-4-29 07:27
good question

已帮你@高手
麻烦你多找几位大神

使用道具

7
SpencerMeng 在职认证  发表于 2015-4-30 12:22:25 |只看作者 |坛友微信交流群
纯宇之恋 发表于 2015-4-30 11:00
麻烦你多找几位大神
好的

已@

等待正解~

使用道具

8
SpencerMeng 在职认证  发表于 2015-4-30 12:22:25 |只看作者 |坛友微信交流群
纯宇之恋 发表于 2015-4-30 11:00
麻烦你多找几位大神
好的

已@

等待正解~

使用道具

9
ywh19860616 发表于 2015-4-30 15:38:32 |只看作者 |坛友微信交流群
  1. clear
  2. input str25 (country  indicator)  year1991  year1992  
  3. A           xx              1           2            
  4. A           yy            3           4                  
  5. B           xx            5           6         
  6. B           yy              7           8
  7. end
  8. list

  9. tempfile building150
  10. save `"`building150'"', emptyok


  11. levelsof indicator, local(levels) clean
  12. display  "`levels'"

  13. foreach k of local levels {
  14. preserve
  15. qui keep if indicator == "`k'"
  16. qui reshape long year,i(country) j(mon)
  17. qui rename year `k'
  18. qui tempfile succ150
  19. qui save `"`succ150'"',replace
  20. qui merge 1:1 _n using `"`building150'"'
  21. qui keep if _merge==3
  22. qui drop _merge
  23. qui save `"`building150'"',replace
  24. restore
  25. }

  26. use "`building150'",clear
  27. local myvars "`levels'"
  28. keep country mon `myvars'
  29. list
复制代码
已有 3 人评分论坛币 学术水平 热心指数 信用等级 收起 理由
纯宇之恋 + 5 + 2 + 2 精彩帖子
Alfred_G + 5 + 3 + 3 + 3 热心帮助其他会员,很好的方法,学习了~
SpencerMeng + 80 + 1 + 1 + 1 精彩帖子

总评分: 论坛币 + 90  学术水平 + 6  热心指数 + 6  信用等级 + 4   查看全部评分

使用道具

10
ywh19860616 发表于 2015-4-30 15:39:36 |只看作者 |坛友微信交流群
SpencerMeng 发表于 2015-4-30 12:22
好的

已@
  1. . do "D:\Temp\STD02000000.tmp"

  2. . clear

  3. . input str25 (country  indicator)  year1991  year1992  

  4.                        country                  indicator    year1991    year1992
  5.   1. A           xx              1           2            
  6.   2. A           yy            3           4                  
  7.   3. B           xx            5           6         
  8.   4. B           yy              7           8
  9.   5. end

  10. . list

  11.      +------------------------------------------+
  12.      | country   indica~r   year1991   year1992 |
  13.      |------------------------------------------|
  14.   1. |       A         xx          1          2 |
  15.   2. |       A         yy          3          4 |
  16.   3. |       B         xx          5          6 |
  17.   4. |       B         yy          7          8 |
  18.      +------------------------------------------+

  19. .
  20. . tempfile building150

  21. . save `"`building150'"', emptyok
  22. file D:\Temp\ST_02000001.tmp saved

  23. .
  24. . **keep if indicator == "yy"
  25. . levelsof indicator, local(levels) clean
  26. xx yy

  27. . display  "`levels'"
  28. xx yy

  29. .
  30. . foreach k of local levels {
  31.   2. preserve
  32.   3. qui keep if indicator == "`k'"
  33.   4. qui reshape long year,i(country) j(mon)
  34.   5. qui rename year `k'
  35.   6. qui tempfile succ150
  36.   7. qui save `"`succ150'"',replace
  37.   8. **list
  38. . qui merge 1:1 _n using `"`building150'"'
  39.   9. qui keep if _merge==3
  40. 10. qui drop _merge
  41. 11. qui save `"`building150'"',replace
  42. 12. restore
  43. 13. }

  44. .
  45. . use "`building150'",clear

  46. . local myvars "`levels'"

  47. . keep country mon `myvars'

  48. . list

  49.      +--------------------------+
  50.      | country    mon   yy   xx |
  51.      |--------------------------|
  52.   1. |       A   1991    3    1 |
  53.   2. |       A   1992    4    2 |
  54.   3. |       B   1991    7    5 |
  55.   4. |       B   1992    8    6 |
  56.      +--------------------------+

  57. .
  58. end of do-file
复制代码
已有 1 人评分学术水平 热心指数 信用等级 收起 理由
Sunknownay + 3 + 3 + 3 热心帮助其他会员

总评分: 学术水平 + 3  热心指数 + 3  信用等级 + 3   查看全部评分

使用道具

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

本版微信群
加好友,备注jltj
拉您入交流群

京ICP备16021002-2号 京B2-20170662号 京公网安备 11010802022788号 论坛法律顾问:王进律师 知识产权保护声明   免责及隐私声明

GMT+8, 2025-1-7 06:09