楼主: gavin4403
1398 0

[编程问题求助] 循环语句编程 [推广有奖]

  • 2关注
  • 0粉丝

博士生

27%

还不是VIP/贵宾

-

威望
0
论坛币
640 个
通用积分
6.8330
学术水平
11 点
热心指数
14 点
信用等级
10 点
经验
4450 点
帖子
171
精华
0
在线时间
232 小时
注册时间
2007-4-27
最后登录
2023-11-26

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
各位大牛,我的数据集如下所示:
obs  stkcd      niandu  ctype  s  m
1     000003   2000    AB      A   B
2     000003   2003    BC      B   C
3     000003   2005    CA     C    A
4     000003   2007    AD    A     D
5     000004   2008    AB     A     B
6     000004   2008    BA     B    A
7     000005   2009   AB     A    B
8     000005   2009   BC     B    C
我的目标是,想使用循环语句,达到如下效果:
如果某行的观测值与下一行的观测值stkcd相同,并且两行的niandu不相等,而且该行的s值为A,而下一行的m值不是A,那么在这两行之间插入新的行,使得stkcd相同的行与行之间niandu的差值为1.并且新添加的行中,所有变量除了niandu外都要复制上一行中对应变量的值。
如果某行的m值等于A,而下一行与该行stkcd相同,但是下一行的s的值等于A,则尽管两行的niandu差值不等于1,那么,也不要添加新的行。

循环语句想以s=A为开始条件,以m等于A为结束条件。以相邻的两行的stkcd相同,但niandu不同为循环的执行条件。
对于像stkcd为000004这类观测值,如果其在2008年存在m=A的情况,则我们删除000004在2008年m等于B的观测值,仅保留000004在2008年m等于A的观测值。
对于像stkcd为000005这类观测值,如果在2009年不存在m=A的情况,则我们仅保留000005在2009年s等于A的观测值,删除其他观测值。
最终,生成如下数据集
obs   stkcd   niandu  ctype  s   m
1      000003  2000  AB      A   B
2      000003  2001  AB      A   B
3      000003  2002  AB      A   B
4      000003  2003  BC      B   C
5      000003  2004  BC      B   C
6      000003  2005  CA      C   A
7      000003  2007  AD      A   D
8      000004   2008  BA     B   A
9      000005  2009  AB      A   B

自己 在处理该问题时遇到的问题。我原来想使用tsfill来解决该问题。但是,由于存在000004这样在同一年有两种不同观测值的特殊情况,所以,无法设定时间变量。从而无法使用tsfill。
另外,tsfill运行完后,不能将前一行的变量取值,复制到新添加行的相应的空缺值中。


所以,向各位大侠请教一下。如何解决该问题。
谢谢。谢谢。



二维码

扫码加我 拉你入群

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

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

关键词:循环语句 stkcd fill type 时间变量 而且

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

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

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

GMT+8, 2024-5-1 16:12