SAS SQL:如何合并重叠日期

时间:2013-11-13 14:32:29

标签: sas overlap

我正在尝试合并日期,如果它们重叠。 例如,

当前数据看起来像,

ID  START     END 
223 20130101  20130201
223 20130104  20130109
223 20130120  20130320
223 20130430  20130930
110 19981219  20010412
110 20000901  20010206
110 20000926  20010306
110 20001002  20010423
110 20001218  20010306
110 20001218  20010306

我需要的结果是,

ID  START     END 
223 20130101  20130320
223 20130430  20130930
110 19981219  20010412

我查找了这种类型的问题,但无法使可执行查询适合我的数据.. 我甚至不理解这些代码,非常感谢任何帮助

1 个答案:

答案 0 :(得分:3)

这方面的数据步骤解决方案非常简单。这是一般形式;您可能需要针对特定​​数据进行调整。

data have;
informat start end YYMMDD8.;
format start end DATE9.;
input ID  START     END;
datalines;
223 20130101  20130201
223 20130104  20130109
223 20130120  20130320
223 20130430  20130930
110 19981219  20010412
110 20000901  20010206
110 20000926  20010306
110 20001002  20010423
110 20001218  20010306
110 20001218  20010306
;;;;
run;
proc sort data=have;
by id start end;
run;

data want;
set have;
by id start end;
retain curstart curend;
format curstart curend DATE9.;
if first.id then do;   *clear the retained variables for first record of new id;
    curend=.;
    curstart=.;
end;
if start > curend then do;   *if there is a gap, or it is the first record of a new id;
    if not (first.id) then output;
    curstart=start;
    curend=end;
end;
else if end > curend then do;  *update the current period end;
    curend=end;
end;
if last.id then output;  *output the final record for each ID;
run;