使用SAS中的滞后功能查找差异,如果值小于30则删除

时间:2013-11-25 18:47:42

标签: diff sas lag

例如

Subject  Date   
1        2/10/13
1        2/15/13
1        2/27/13
1        3/15/13
1        3/29/13
2        1/11/13
2        1/31/13
2        2/15/13

我只需要日期介于30以上的科目。

必需的输出:

Subject  Date   
1        2/10/13
1        3/15/13
2        1/11/13
2        2/15/13  

1 个答案:

答案 0 :(得分:3)

这是一个非常有趣的问题。我将在DATA步骤中使用retain语句。

由于我们试图比较不同观察之间的日期,因此更难一些。我们可以利用SAS可以将日期转换为SAS日期值(即1960年1月1日之后的天数)的事实。然后我们可以使用条件语句比较这些数值。

data work.test;
    input Subject Date anydtdte15.;
    sasdate = Date;

    retain x;

    if -30 <= sasdate - x <= 30 then delete;

    else x = sasdate;  

    datalines;
    1        2/10/13
    1        2/15/13
    1        2/27/13
    1        3/15/13
    1        3/29/13
    2        1/11/13
    2        1/31/13
    2        2/15/13
    ;
run;

proc print data=test;
    format Date mmddyy8.;
    var Subject Date;
run;    

根据需要输出:

                                Obs    Subject        Date

                                 1        1       02/10/13
                                 2        1       03/15/13
                                 3        2       01/11/13
                                 4        2       02/15/13