1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46
| data test;
Input ID $ Datdebut Datefin Info1 $ Info2;
cards;
A 1 10 idem 10
A 11 20 idem 10
B 1 5 dataB 25
D 6 9 dataD 40
D 16 21 dataD 21
C 2 9 dataC 1
C 10 15 dataC 1
;run;
/* Création d'une table qui regroupe les doublons */
Proc sort data = test nodupkey dupout = test2;
by id;
run;
Data test3 (drop = ret: rc fc);
If _n_ = 1 then do;
IF 0 then set test2;/* déclaration des tables hash */
DCL HASH che (dataset: 'test2');
che.definekey ('ID', 'Info1', 'Info2');
che.definedata ('Datdebut', 'Datefin');
che.definedone();
DCL HASH che2 (dataset: 'test2');
che2.definekey ('ID' );
che2.definedata ('Info1', 'Info2', 'Datdebut', 'Datefin');
che2.definedone();
End;
Set test;
ret = datdebut;
ret2 = datefin;
RC = che.find();
If rc = 0 then do;
datdebut = min(datdebut,ret);
datefin = max(datefin,ret2);
Output;
End;
Else do;
Output;
fc = che2.Find();
If fc = 0 then output;
End;
Run; |
Partager