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
| data circo;
input ident csex rev2000 rev2001 rev2002 rev2003 rev2004 rev2005 rev2006 rev2007 rev2008;
datalines;
15468 2 654 . 489 654 789 654 123 0 987
15479 2 236 456 56 456 0 654 654 789 125
15480 1 236 456 56 456 456 654 845 789 125
15481 2 . 456 56 . 456 654 845 789 125
15482 2 . . . . 456 654 845 789 125
;
run;
proc transpose data=circo
out=test1 ;
by ident csex;
var rev2000 rev2001 rev2002 rev2003 rev2004 rev2005 rev2006 rev2007 rev2008;
run;
data test2;
set test1;
substr(_name_,1,3)='';
annee=input(_name_,8.);
run;
data test3;
set test2(where=(col1 ne .));
by ident;
diff=annee-LAG(annee);
If first.ident then do;
diff=1;
end;
run;
data test4;
set test3;
by ident;
conteo=0;
if diff=1 then conteo=diff;
retain type;
if (first.ident)or (conteo eq 0) then type=1;
else if (conteo=1) then type+1;
unos=0;
if (type=1)then unos=1;
run;
data test4a;
set test4;
if annee ne 2008 then delete;
revenus=col1;
run;
proc means data=test4
sum;
var unos;
class ident;
output out=test4_1 sum=;
run;
data test5;
set test4_1;
if unos gt 1 then delete;
run;
proc means data=test4
max;
var type;
class ident;
output out=test5_1 max= ;
run;
data test6(drop=_type_ _freq_
rename=(type=max) );
set test5_1(where=(type le 6));
if ident eq . then delete;
run;
data test7(drop=_TYPE_ _FREQ_ unos);
merge test5 (in=rara)
test6(in=papa);
by ident;
if (rara and papa);
run;
data test8(drop=_NAME_ diff conteo type unos);
merge
test4a (in=rata)
test7 (in=pata);
by ident;
if pata;
run; |
Partager