SAS 中的组交叉日期范围

问题描述 投票:0回答:1

我需要混合 SAS 中交叉的日期范围。

例如:

ID  PROV    dt_entrata  dt_uscita   FLAG
381 00001   31/12/2004  09/11/2005  OK
381 00001   05/07/2011  16/04/2012  OK
**381   00001   31/12/2013  20/10/2014  KO
381 00001   19/10/2014  15/02/2018  KO**

它必须变成:

ID  PROV    dt_entrata  dt_uscita   FLAG
381 00001   31/12/2004  09/11/2005  OK
381 00001   05/07/2011  16/04/2012  OK
**381   00001   31/12/2013  15/02/2018  OK**
date sas range
1个回答
0
投票

此方法扩展范围,然后重新组合并折叠回范围。

data have;
   input ID $ PROV $ (dt_entrata dt_uscita)(:ddmmyy.)  FLAG $;
   cards;
381 00001   31/12/2004  09/11/2005  OK
381 00001   05/07/2011  16/04/2012  OK
381 00001   31/12/2013  20/10/2014  KO
381 00001   19/10/2014  15/02/2018  KO
;;;;
   run;
data havev / view=havev;
   set have;
   do date = dt_entrata to dt_uscita;
      output;
      end;
   drop dt_: flag;
   run;
proc sort data=havev out=exp nodupkey;
   by id prov date;
   run;

data expV / view=expV;
   set exp;
   run + dif(date) ne 1;
   format date ddmmyy10.;
   run;
proc summary data=expv nway;
   by id prov;
   class run;
   output out=range(drop=_type_) min(date)=dt_entrata max(date)=dt_uscita;
   run;
proc print;
   run;

© www.soinside.com 2019 - 2024. All rights reserved.