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
| Data entree ;
format Date_Fin_Rgl Date_Rgl_fin_mois ddmmyy10.;id='0000000001';
Date_Fin_Rgl= '31DEC2009'd; Date_Rgl_fin_mois ='31JAN2008'd; Montant_Reglement=10.0; output;
Date_Fin_Rgl= '31DEC2009'd; Date_Rgl_fin_mois ='31MAR2008'd; Montant_Reglement=15.0; output;
Date_Fin_Rgl= '31DEC2009'd; Date_Rgl_fin_mois ='28APR2008'd; Montant_Reglement=100.0; output;
Date_Fin_Rgl= '31DEC2009'd; Date_Rgl_fin_mois ='31MAR2009'd; Montant_Reglement=150.0; output;
Date_Fin_Rgl= '31DEC2009'd; Date_Rgl_fin_mois ='31MAY2009'd; Montant_Reglement=210.0; output;
id='0000000002';
Date_Fin_Rgl= '31DEC2009'd; Date_Rgl_fin_mois ='31JAN2008'd; Montant_Reglement=410.0; output;
Date_Fin_Rgl= '31DEC2009'd; Date_Rgl_fin_mois ='31MAY2008'd; Montant_Reglement=415.0; output;
Date_Fin_Rgl= '31DEC2009'd; Date_Rgl_fin_mois ='30JUN2008'd; Montant_Reglement=4100.0; output;
Date_Fin_Rgl= '31DEC2009'd; Date_Rgl_fin_mois ='31JUL2009'd; Montant_Reglement=4150.0; output;
run;
proc sort data=entree;
by id Date_Rgl_fin_mois;
run;
/*%let dtfin='31DEC2011'd;*/
data sortie(drop=cum inter inter2 inter3 nbmois i );
set entree;
by id Date_Rgl_fin_mois ;
retain cum inter inter2 inter3;
if first.Date_Rgl_fin_mois then do;
champ=cats('RGL_',put(month(Date_Rgl_fin_mois),z2.),put(year(Date_Rgl_fin_mois),z4.) );
cum=cumul_rgl;
inter=Date_Rgl_fin_mois;
output;
end;
else do;
if Date_Rgl_fin_mois=intnx('MONTH',inter,1,'end') then do;
champ=cats('RGL_',put(month(Date_Rgl_fin_mois),z2.),put(year(Date_Rgl_fin_mois),z4.) );
output;
cum=cumul_rgl;
inter=Date_Rgl_fin_mois;
end;
else do;
inter2=cumul_rgl;
inter3=Date_Rgl_fin_mois;
nbmois=intck('MONTH',inter,Date_Rgl_fin_mois);
do i=1 to nbmois-1;
Date_Rgl_fin_mois=intnx('MONTH',inter,i,'end');
cumul_rgl=cum;
champ=cats('RGL_',put(month(Date_Rgl_fin_mois),z2.),put(year(Date_Rgl_fin_mois),z4.) );
output;
end;
Date_Rgl_fin_mois=inter3;cumul_rgl=inter2;
champ=cats('RGL_',put(month(Date_Rgl_fin_mois),z2.),put(year(Date_Rgl_fin_mois),z4.) );
output;
cum=cumul_rgl;
inter=Date_Rgl_fin_mois;
end;
end;
if last.Date_Rgl_fin_mois and Date_Rgl_fin_mois ne Date_Fin_Rgl then do;
nbmois=intck('MONTH',Date_Rgl_fin_mois,Date_Fin_Rgl);
do i=1 to nbmois;
Date_Rgl_fin_mois=intnx('MONTH',Date_Rgl_fin_mois,1,'end');
champ=cats('RGL_',put(month(Date_Rgl_fin_mois),z2.),put(year(Date_Rgl_fin_mois),z4.) );
output;
end;
end;
run; |
Partager