楼主: syeira1224
6203 9

[面板数据求助] 请问stata怎么根据年份的range填充数据? [推广有奖]

  • 0关注
  • 1粉丝

已卖:115份资源

硕士生

20%

还不是VIP/贵宾

-

威望
0
论坛币
1672 个
通用积分
2.8500
学术水平
0 点
热心指数
1 点
信用等级
0 点
经验
1391 点
帖子
67
精华
0
在线时间
203 小时
注册时间
2013-3-2
最后登录
2025-10-23

楼主
syeira1224 发表于 2016-12-30 07:09:25 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
各位大神好,有个问题想请教一下
我有如下数据:
id  startyear endyear A B C D .....
1   1998      2002     a b c d......
2   2001      2005     w e r t .......
3   2003      2007     t  t y u.......
....

A B C D等是我编的其余变量
我现在想实现:
1.生成一个变量year表示当前年份,也就是说year range里每一年都有个观测值
2.除了year这个变量,其他的观测值都相同

最后的数据这样(以第一个id为例):
id  startyear endyear year A B C D .....
1   1998      2002     1998 a b c d......

1   1998      2002     1999 a b c d......
1   1998      2002     2000 a b c d......
1   1998      2002     2001 a b c d......
1   1998      2002     2002 a b c d......


有木有大神知道怎么在stata实现呢?感激不尽!
二维码

扫码加我 拉你入群

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

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

关键词:Stata range tata RAN starty

沙发
黃河泉 在职认证  发表于 2016-12-30 07:13:30
请用 (help) expand 指令!

藤椅
ctx5518 发表于 2016-12-30 12:12:18
1. 生成4个变量包含所有的年份:
forvalue i = 1 / 4 {
gen y`i' =  startyear + `i' - 1
}
2. Reshape 数据
reshape y, i(id startyear endyear A B C D) j(year)

板凳
syeira1224 发表于 2016-12-31 06:20:21
ctx5518 发表于 2016-12-30 12:12
1. 生成4个变量包含所有的年份:
forvalue i = 1 / 4 {
gen y`i' =  startyear + `i' - 1
多谢!!不过,有个问题就是,我每个变量year 的range不一定是4啊,可能是10可能是5的,每个都不一样,我怎么处理这个问题呢?谢谢谢谢!!!

报纸
黃河泉 在职认证  发表于 2016-12-31 07:11:00
* Example generated by -dataex-. To install: ssc install dataex
clear
input float(id startyear endyear) str2(A B C D)
1 1998 2002 "a" "b" "c" "d"
2 2001 2005 "w" "e" "r" "t"
3 2003 2007 "t" "t" "y" "u"
end

expand endyear-startyear+1
gen year = startyear
bysort id (year): replace year = year[_n-1]+1 if _n > 1
sort id year
order id year

地板
黃河泉 在职认证  发表于 2016-12-31 07:54:50
syeira1224 发表于 2016-12-31 06:20
多谢!!不过,有个问题就是,我每个变量year 的range不一定是4啊,可能是10可能是5的,每个都不一样,我 ...
请试试
  1. expand endyear-startyear+1
  2. gen year = startyear
  3. bysort id (year): replace year = year[_n-1]+1 if _n > 1
  4. sort id year
  5. order id year
复制代码

7
黃河泉 在职认证  发表于 2016-12-31 07:55:46
syeira1224 发表于 2016-12-31 06:20
多谢!!不过,有个问题就是,我每个变量year 的range不一定是4啊,可能是10可能是5的,每个都不一样,我 ...
结果为
  1. * Example generated by -dataex-. To install: ssc install dataex
  2. clear
  3. input float(id year startyear endyear) str2(A B C D)
  4. 1 1998 1998 2002 "a" "b" "c" "d"
  5. 1 1999 1998 2002 "a" "b" "c" "d"
  6. 1 2000 1998 2002 "a" "b" "c" "d"
  7. 1 2001 1998 2002 "a" "b" "c" "d"
  8. 1 2002 1998 2002 "a" "b" "c" "d"
  9. 2 2001 2001 2005 "w" "e" "r" "t"
  10. 2 2002 2001 2005 "w" "e" "r" "t"
  11. 2 2003 2001 2005 "w" "e" "r" "t"
  12. 2 2004 2001 2005 "w" "e" "r" "t"
  13. 2 2005 2001 2005 "w" "e" "r" "t"
  14. 3 2003 2003 2007 "t" "t" "y" "u"
  15. 3 2004 2003 2007 "t" "t" "y" "u"
  16. 3 2005 2003 2007 "t" "t" "y" "u"
  17. 3 2006 2003 2007 "t" "t" "y" "u"
  18. 3 2007 2003 2007 "t" "t" "y" "u"
  19. end
复制代码

8
syeira1224 发表于 2017-1-1 00:49:35
黃河泉 发表于 2016-12-31 07:54
请试试
管用!!!多谢你啦!!
之前也找了help expand 没想到可以这么用

9
黃河泉 在职认证  发表于 2017-1-1 06:52:22
syeira1224 发表于 2017-1-1 00:49
管用!!!多谢你啦!!
之前也找了help expand 没想到可以这么用
No problem at all.

10
gppra 发表于 2017-10-1 21:37:22
请问是如何实现填充,然后转置的?我使用上面的代码在窗口可以执行,在do文档里不行;已解决,do文档可能抽风了,今天又好了

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

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