楼主: zhanghao2qh
12707 19

[面板数据求助] stata如何让某个变量在每一年的数据都相等 [推广有奖]

  • 2关注
  • 9粉丝

讲师

6%

还不是VIP/贵宾

-

威望
0
论坛币
17093 个
通用积分
4.7329
学术水平
5 点
热心指数
4 点
信用等级
4 点
经验
6018 点
帖子
329
精华
0
在线时间
455 小时
注册时间
2008-9-26
最后登录
2023-9-12

相似文件 换一批

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
比如以下数据:
1  1999     11
1  2000     11
1  2001      1
2  1999     22
2  2000     22
2  2001      2
3  1999     13
3  2000     13
3  2001      1

等于这样的数据
1  1999     11
1  2000     11
1  2001      11
2  1999     22
2  2000     22
2  2001      22
3  1999     13
3  2000     13
3  2001      13


就是让每个数据等于每一年的第一个,谢谢啦
二维码

扫码加我 拉你入群

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

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

关键词:Stata tata 如何

人生若只如初见~~
沙发
夏目贵志 发表于 2016-5-19 22:37:19 |只看作者 |坛友微信交流群
xtset id year
gen x = l.x if l.x!=.
试试

使用道具

藤椅
zhanghao2qh 发表于 2016-5-19 22:45:15 |只看作者 |坛友微信交流群
夏目贵志 发表于 2016-5-19 22:37
xtset id year
gen x = l.x if l.x!=.
试试
好像不行哦,

使用道具

板凳
dqlcsm 发表于 2016-5-19 23:44:38 |只看作者 |坛友微信交流群
可以试一下这样,假设你有 id year y 3个变量,对应你提供数据的变量,可以
tsset id year
gen y1=l.y
gen y2=0
replace y2=y if y2==.
bysort id : egen tot=total(y2)

使用道具

报纸
夏目贵志 发表于 2016-5-21 08:56:12 |只看作者 |坛友微信交流群
dqlcsm 发表于 2016-5-19 23:44
可以试一下这样,假设你有 id year y 3个变量,对应你提供数据的变量,可以
tsset id year
gen y1=l.y
你gen y2=0之后的if y2==.就不起作用了。所以你的y2就是等于y,tot就是total(y)。

使用道具

地板
夏目贵志 发表于 2016-5-21 08:59:15 |只看作者 |坛友微信交流群
zhanghao2qh 发表于 2016-5-19 22:45
好像不行哦,
不好意思我打错了,把gen改成replace就好了
  1. . list

  2.      +----------------+
  3.      | id   year    x |
  4.      |----------------|
  5.   1. |  1   1999   11 |
  6.   2. |  1   2000   11 |
  7.   3. |  1   2001    1 |
  8.   4. |  2   1999   22 |
  9.   5. |  2   2000   22 |
  10.      |----------------|
  11.   6. |  2   2001    2 |
  12.   7. |  3   1999   13 |
  13.   8. |  3   2000   13 |
  14.   9. |  3   2001    1 |
  15.      +----------------+

  16. . xtset id year
  17.        panel variable:  id (strongly balanced)
  18.         time variable:  year, 1999 to 2001
  19.                 delta:  1 unit

  20. . replace x=l.x if l.x!=.
  21. (3 real changes made)

  22. . list

  23.      +----------------+
  24.      | id   year    x |
  25.      |----------------|
  26.   1. |  1   1999   11 |
  27.   2. |  1   2000   11 |
  28.   3. |  1   2001   11 |
  29.   4. |  2   1999   22 |
  30.   5. |  2   2000   22 |
  31.      |----------------|
  32.   6. |  2   2001   22 |
  33.   7. |  3   1999   13 |
  34.   8. |  3   2000   13 |
  35.   9. |  3   2001   13 |
  36.      +----------------+
复制代码

使用道具

7
intchen 发表于 2016-5-21 10:06:22 |只看作者 |坛友微信交流群
不需要那么复杂哦,看我的,而且还能想用哪一年的就用哪一年的值。
假定原始值如下:
捕获1.JPG

执行如下命令,假定使用2000年的数据,使用其它年份可以改:
by var1, sort: generate var4 = var3 if var2 == 2000
捕获2.JPG

由于缺失值大于所有数值,在上图的基础上可执行如下命令:
by var1, sort: egen var5 = min(var4)
捕获3.JPG

OK,该留的留,改删的删。

使用道具

8
intchen 发表于 2016-5-21 10:11:54 |只看作者 |坛友微信交流群
如果每个ID的年份不一样,需要其它每年均等于最小那一年的值,比如说:
捕获1.JPG

只需执行以下命令,计算出每个ID的最小年份:
by var1, sort: egen var4 = min(var2)
捕获2.JPG

在上图的基础上执行以下命令,把最小年份对应的那个值取出:
by var1, sort: generate var5 = var3 if var2 == var4
捕获3.JPG

再执行以下命令:
by var1, sort: egen var6 = min(var5)
捕获4.JPG

OK了。

这个方法也可以都等于最大那一年哦。而且不管年份中间是否有缺失,都可以用的。

使用道具

9
夏目贵志 发表于 2016-5-21 10:16:30 |只看作者 |坛友微信交流群
intchen 发表于 2016-5-21 10:11
如果每个ID的年份不一样,需要其它每年均等于最小那一年的值,比如说:
感谢回复!
不需要那么复杂哦
不过我的也就两行而已啊。。。并没有复杂啊。。。

使用道具

10
intchen 发表于 2016-5-21 10:42:25 |只看作者 |坛友微信交流群
夏目贵志 发表于 2016-5-21 10:16
感谢回复!
哈哈,我是说我的这个理解起来可能更容易一些吧。
并且,如果做不成平行面板的话,你的方法有问题哦。
我觉得我的第二个方法通用性更强哈。

使用道具

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

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

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

GMT+8, 2024-5-22 14:33