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 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69
| data base ;
input id d_cre $ n_act d_d_act $ d_ctr $ SS MM GG ;
cards ;
01 01/02/08 1 27/08/10 15/09/10 22 3.2 3.1
01 01/02/08 1 27/08/10 22/10/10 26 3.4 3.3
01 01/02/08 1 27/08/10 25/11/10 25 3.4 3.1
01 01/02/08 1 27/08/10 19/12/10 22 3.3 3.1
01 01/02/08 1 27/08/10 27/01/11 19 3.1 3.0
01 01/02/08 1 27/08/10 17/02/11 17 3.0 2.9
01 01/02/08 1 27/08/10 23/03/11 12 3.0 2.9
01 01/02/08 2 23/02/12 18/03/12 26 3.2 3.4
01 01/02/08 2 23/02/12 01/04/12 26 3.2 3.2
01 01/02/08 2 23/02/12 13/05/12 25 3.2 3.0
01 01/02/08 2 23/02/12 28/06/12 23 3.2 3.1
01 01/02/08 2 23/02/12 15/08/12 17 3.3 .
01 01/02/08 2 23/02/12 26/09/12 0 0 0
02 15/09/07 1 02/12/09 24/12/09 12 3.0 2.9
02 15/09/07 1 02/12/09 13/02/10 19 3.1 3.0
02 15/09/07 1 02/12/09 28/03/10 19 . .
02 15/09/07 1 02/12/09 01/04/10 26 3.2 3.4
02 15/09/07 1 02/12/09 30/04/10 26 3.2 3.2
02 15/09/07 1 02/12/09 09/06/10 24 3.2 3.2
02 15/09/07 1 02/12/09 11/07/10 23 3.0 3.2
02 15/09/07 1 02/12/09 03/09/10 20 3.2 3.2
02 15/09/07 3 03/06/13 07/06/13 21 3.3 3.2
02 15/09/07 3 03/06/13 19/07/13 20 3.2 3.2
02 15/09/07 3 03/06/13 28/08/13 19 3.1 3.1
02 15/09/07 3 03/06/13 03/10/13 15 3.2 2.9
;
%macro dispatcher ;
data _null_ ;
set base ;
call execute ('data base'||trim(left(n_act))||' ;
set base;
if n_act ='||trim(left(n_act))||';
run;') ;
run;
proc sql noprint ;
select distinct n_act, count(distinct n_act)
into :listactivs separated by ' ', :nb
from base ;
quit ;
%do ii=1 %to &nb ;
%let i=%scan(&listactivs., &ii);
data base&i. ;
set base&i. ;
by id d_cre ;
if first.id then cnt=0 ; cnt+1 ;
run;
proc sql noprint ;
create table temp as
select distinct n_act, cnt from base&i. ;
quit;
data _null_;
set temp end=fin ;
if _n_ eq 1 then call execute('data base_&i ; merge ') ;
call execute(catt('base&i. (where=(cnt=', cnt,' and n_act=', n_act,') rename=(d_ctr=d_ctr_', cnt, ' SS=SS_', cnt, ' MM=MM_', cnt, ' GG=GG_', cnt,'))')) ;
if fin then call execute('; by id ; drop n_act cnt ; run; ') ;
run;
proc print data=base_&i ; run ;
%end ;
%mend dispatcher ; %dispatcher ; |
Partager