全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SAS专版
2220 3
2013-08-07
现在有一个数据集,其数据为下显示:name $ nbr test1 :yymmdd10. test2: yymmdd10.

张三 1 2012-03-03 2012-04-02
张三 2 2012-04-03 2012-05-02
张三 3 2012-05-03 2012-06-02
张三 4 2012-06-03 2012-07-02
张三 5 2012-07-03 2012-08-02
张三 6 2012-08-03 2012-09-02
李四 1 2012-03-07 2012-04-06
李四 2 2012-04-07 2012-05-06
李四 3 2012-05-07 2012-06-06
李四 4 2012-06-07 2012-07-06
李四 5 2012-07-07 2012-08-06
王五 2 2012-04-10 2012-05-09
王五 3 2012-05-10 2012-06-09
王五 4 2012-06-10 2012-07-09
王五 5 2012-07-10 2012-08-09
赵六 1 2012-03-15 2012-04-14
赵六 2 2012-04-15 2012-05-14
赵六 4 2012-06-15 2012-07-14
赵六 6 2012-08-15 2012-09-14

现在想根据nbr来增加行数据,在以name分组的情况下,如果nbr中缺少1-6中的任意一个,则相应的补上,预期的数据集为:

name $ nbr test1 :yymmdd10. test2: yymmdd10.
张三   1   2012-03-03       2012-04-02
张三   2   2012-04-03       2012-05-02
张三   3   2012-05-03       2012-06-02
张三   4   2012-06-03       2012-07-02
张三   5   2012-07-03       2012-08-02
张三   6   2012-08-03       2012-09-02
李四   1   2012-03-07       2012-04-06
李四   2   2012-04-07       2012-05-06
李四   3   2012-05-07       2012-06-06
李四   4   2012-06-07       2012-07-06
李四   5   2012-07-07       2012-08-06
李四   6   2012-08-07       2012-09-06
王五   1   2012-03-10       2012-04-09
王五   2   2012-04-10       2012-05-09
王五   3   2012-05-10       2012-06-09
王五   4   2012-06-10       2012-07-09
王五   5   2012-07-10       2012-08-09
王五   6   2012-08-10       2012-09-09
赵六   1   2012-03-15       2012-04-14
赵六   2   2012-04-15       2012-05-14
赵六   3   2012-05-15       2012-06-14
赵六   4   2012-06-15       2012-07-14
赵六   5   2012-07-15       2012-08-14
赵六   6   2012-08-15       2012-09-14

备注:红色标注的为新加的数据。
二维码

扫码加我 拉你入群

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

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

全部回复
2013-8-7 11:12:41
针对你的特殊问题,我写了个特殊的解法
如果你要填补的日期间隔或者其他什么设置有变的话,可能就用不了了

data have;
input name $ nbr test1 :yymmdd10. test2: yymmdd10.;
format test1 yymmdd10.;
format test2 yymmdd10.;
datalines;
张三 1 2012-03-03 2012-04-02
张三 2 2012-04-03 2012-05-02
张三 3 2012-05-03 2012-06-02
张三 4 2012-06-03 2012-07-02
张三 5 2012-07-03 2012-08-02
张三 6 2012-08-03 2012-09-02
李四 1 2012-03-07 2012-04-06
李四 2 2012-04-07 2012-05-06
李四 3 2012-05-07 2012-06-06
李四 4 2012-06-07 2012-07-06
李四 5 2012-07-07 2012-08-06
王五 2 2012-04-10 2012-05-09
王五 3 2012-05-10 2012-06-09
王五 4 2012-06-10 2012-07-09
王五 5 2012-07-10 2012-08-09
赵六 1 2012-03-15 2012-04-14
赵六 2 2012-04-15 2012-05-14
赵六 4 2012-06-15 2012-07-14
赵六 6 2012-08-15 2012-09-14
;
run;

proc sort data=have;
by name nbr;
run;

data base;
set have;
by name nbr;
if first.name;
run;

data want(drop=i);
set base;
do i=1 to 6;
        if nbr eq i then output;
        else do;
                test1=INTNX('MONTH',test1,i-nbr,'sameday');
                test2=INTNX('MONTH',test2,i-nbr,'sameday');
                nbr=i;
                output;
        end;
end;
run;

二维码

扫码加我 拉你入群

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

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

2013-8-7 11:22:41
恩,日期的补充规则是我说的不完全,应该是按照前后的日期推导出来的,并不是我举例的这么简单,谢谢你这么热心。
二维码

扫码加我 拉你入群

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

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

2013-12-6 10:53:47
二维码

扫码加我 拉你入群

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

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

相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群