楼主: Winnis
10103 5

[面板数据求助] 如何生成一个变量使它等于另一个变量某一年的取值 [推广有奖]

  • 1关注
  • 0粉丝

本科生

32%

还不是VIP/贵宾

-

威望
0
论坛币
633 个
通用积分
0
学术水平
0 点
热心指数
2 点
信用等级
0 点
经验
468 点
帖子
39
精华
0
在线时间
134 小时
注册时间
2010-4-5
最后登录
2022-5-8

10论坛币
主要变量包括国家,年份和收入,我希望生成另一个变量叫做初始收入,使这个变量1950年到1959年这十年间的数值等于一个国家1950年的收入,1960年到1969年的数值等于该国1960年的收入,以此类推。大概应该是像下面这样:

country  year  income  income1
1           1950   100      100
1           1951   102      100
.........
1           1959   113      100
1           1960   115      115
1           1961   117      115
.........
1           1969   130      115
2           1950    98        98
2           1951   101       98
.........
2           1959   109       98
2           1960   114      114
2           1961   119      114
.........
2           1969   131      114
这里只列举了两个国家,income1是我希望生成的新变量。其实就是希望income1在1950到1959之间等于1950年的income,在1960到1969年间等于1960年的income,我尝试了用这个命令:
gen income1=.   
bysort country: replace income1=income if year=1950
但是得到了报错,感觉第二个语法不对。还望高手指点迷津,非常感激!



关键词:Country replace Income bysort Count 如何
聪明风行一时,但智慧与日月同辉。争取做一个有智慧的人~
沙发
SpencerMeng 在职认证  发表于 2015-4-12 13:16:44 |只看作者 |坛友微信交流群
楼主,您好,用bysort和gen连用即可哦~~

附例子代码:
  1. clear
  2. inp country year income
  3. 1 1950 35
  4. 1 1951 43
  5. 1 1952 59
  6. 2 1950 36
  7. 2 1951 46
  8. 2 1952 77
  9. 3 1950 54
  10. 3 1951 45
  11. 3 1952 59
  12. end

  13. bysort country: gen income1 = income[1]
复制代码

使用道具

藤椅
ywh19860616 发表于 2015-4-12 14:30:04 |只看作者 |坛友微信交流群
如果间隔是规则的,比如你这里都是10年,只需要把我下面命令的3修改为10
如果是不规则的,再做讨论
  1. . do "D:\Temp\STD01000000.tmp"

  2. . clear

  3. . input country  year  income  income1

  4.         country        year      income     income1
  5.   1. 1           1950   100      100
  6.   2. 1           1951   102      100
  7.   3. 1           1959   113      100
  8.   4. 1           1960   115      115
  9.   5. 1           1961   117      115
  10.   6. 1           1969   130      115
  11.   7. 2           1950    98        98
  12.   8. 2           1951   101       98
  13.   9. 2           1959   109       98
  14. 10. 2           1960   114      114
  15. 11. 2           1961   119      114
  16. 12. 2           1969   131      114
  17. 13. end

  18. . egen ind1 = seq(),b(3)

  19. . gen result = .
  20. (12 missing values generated)

  21. . bys ind1:replace result = income[1]
  22. (12 real changes made)

  23. . list

  24.      +---------------------------------------------------+
  25.      | country   year   income   income1   ind1   result |
  26.      |---------------------------------------------------|
  27.   1. |       1   1950      100       100      1      100 |
  28.   2. |       1   1951      102       100      1      100 |
  29.   3. |       1   1959      113       100      1      100 |
  30.   4. |       1   1960      115       115      2      115 |
  31.   5. |       1   1961      117       115      2      115 |
  32.      |---------------------------------------------------|
  33.   6. |       1   1969      130       115      2      115 |
  34.   7. |       2   1950       98        98      3       98 |
  35.   8. |       2   1951      101        98      3       98 |
  36.   9. |       2   1959      109        98      3       98 |
  37. 10. |       2   1960      114       114      4      114 |
  38.      |---------------------------------------------------|
  39. 11. |       2   1961      119       114      4      114 |
  40. 12. |       2   1969      131       114      4      114 |
  41.      +---------------------------------------------------+

  42. .
  43. end of do-file

  44. .
复制代码
已有 1 人评分论坛币 学术水平 热心指数 信用等级 收起 理由
SpencerMeng + 20 + 1 + 1 + 1 观点有启发

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

使用道具

板凳
Winnis 发表于 2015-4-12 19:24:34 |只看作者 |坛友微信交流群
SpencerMeng 发表于 2015-4-12 13:16
楼主,您好,用bysort和gen连用即可哦~~

附例子代码:
实际处理的数据是个不平衡的面板,不是每个国家都刚好从1950年开始,所以需要确切地指出是1950年的income,而无法用income[1]这样的命令。

使用道具

报纸
Winnis 发表于 2015-4-12 19:28:36 |只看作者 |坛友微信交流群
ywh19860616 发表于 2015-4-12 14:30
如果间隔是规则的,比如你这里都是10年,只需要把我下面命令的3修改为10
如果是不规则的,再做讨论
问题是实际的数据是非平衡面板,不是每个国家都从1950年开始,所以好像需要确切地让1950年以后十年的income1等于1950年的income,让1960年以后十年的income1等于1960年的income,请问这样应该怎么做呢?

使用道具

地板
SpencerMeng 在职认证  发表于 2015-4-12 21:11:40 |只看作者 |坛友微信交流群
Winnis 发表于 2015-4-12 19:28
问题是实际的数据是非平衡面板,不是每个国家都从1950年开始,所以好像需要确切地让1950年以后十年的inco ...
提供dta数据吧,或者你自己模拟下数据,上传供大家参考。

使用道具

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

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

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

GMT+8, 2024-9-18 06:32