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 70 71 72 73 74 75 76 77 78 79 80 81
| Data pr;
input ANNEE1 ANNEE2 SOCIETE_1 $ SOCIETE_2 $ MONTANT1 MONTANT2 ECART ;
cards;
2001 2001 X X 7649.71 7273.35 0
2002 2001 X X 7649.71 7245.35 1
2003 2001 X X 7649.71 7328.31 2
2007 2001 X X 7621.71 7447.91 6
2008 2001 X X 8359.19 8359.19 7
2009 2001 X X 8359.19 8359.19 8
2001 2001 Y Y 7649.71 7273.35 0
2002 2001 Y Y 7649.71 7245.35 1
2003 2001 Y Y 7649.71 7328.31 2
2003 2001 Z Z 7649.71 7328.31 2
2007 2001 Z Z 7621.71 7447.91 6
;run;
data fmt;
length start $40 label $200 fmtname $32;
retain fmtname '$Societe';
set pr end=last;
Start = CATS(Societe_1,ANNEE1);
Label = CATX("/",ANNEE1,Montant1,Montant2);
Output;
If last then do;
hlo = 'O';
Label = "";
Output;
End;
run;
proc format cntlin=fmt;
run;
Data pr2 (keep = ann: soci: mont: ecart);
Set pr;
By Societe_1;
length an $ 60 data $ 60 rev $ 1;
Retain an;
If first.societe_1 then an = put(ANNEE1,4.);
Else an = catx(',',an,Annee1);
Output;
If last.societe_1 then do i = 2001 to 2012;
p = 0;
cpt = 0;
call missing (rev,data);
If find(an,put(i,4.)) = 0 and i ne 2001 then do until(missing(data)=0);
cpt + 1;
p + 1;
Data = IFC(Rev ne "+",put(CATS(Societe_1,i - p),$societe.),put(CATS(Societe_1,i + p),$societe.));
If i - p = 2000 then do;
p = 0;
rev = "+";
End;
If missing(data) = 0 then do;
Annee1 = i;
Montant1 = scan(data,2,"/") * 1;
Montant2 = scan(data,3,"/") * 1;
Ecart = Annee1 - Annee2;
Output;
End;
If cpt > 12 then leave;
End;
Else If find(an,put(i,4.)) = 0 and i EQ 2001 then do until(missing(data)=0);
cpt + 1;
p + 1;
Data = put(CATS(Societe_1,i + p),$societe.);
If missing(data) = 0 then do;
Annee1 = i;
Montant1 = scan(data,2,"/") * 1;
Montant2 = scan(data,3,"/") * 1;
Ecart = Annee1 - Annee2;
Output;
End;
If cpt > 12 then leave;
End;
End;
run;
Proc sort data = pr2;
by Societe_1 Annee1;
Run; |
Partager