各位大牛,我的数据集如下所示:
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运行完后,不能将前一行的变量取值,复制到新添加行的相应的空缺值中。
所以,向各位大侠请教一下。如何解决该问题。
谢谢。谢谢。