Code : Sélectionner tout - Visualiser dans une fenêtre à part
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;


Bonjour,

J’essaye toujours mon exorcise de valeurs consécutifs. Je pense que j’ai réussie mais j’ai du générer une variable « unos » pour éviter le cas ou il y a une coupure soit des variables vides (.). J’aimerais savoir si on pourrait utiliser une méthode plus courte pour le réaliser ? C’était une bonne idée transposer la matrix initiale pour arriver à ce but ?
Merci pour vos commentaires,