Bonjour amis saseurs!
J'ai des petits soucis de compteurs... Je vous explique mon problème :
Dans ma table, il y a deux variables : le numéro et l'année.
Je souhaiterais que pour chaque numero, lorsqu'il y a des années consécutives, le compteur soit le même. Par contre lorsqu'elles ne le sont pas, on ajoute 1 au compteur.
Le résultat donnerait un truc du genre :
Numero Annee Compteur
1007 1991 1
1007 1992 1
1007 1995 2
1007 1996 2
1007 1998 3
1007 1999 3
1007 2000 3
1007 2001 3
1008 1997 4
1008 1999 5
1008 2000 5
1008 2001 5
1008 2002 5
1008 2003 5
1009 2004 6<---Attention, ici, on change de numéro donc aussi de compteur!
1009 2005 6
1009 2006 6
1009 2010 7
1010 1973 8
1009 1975 9
1009 1976 9
J'ai pour code :
Merci pour votre aide!!!
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 proc sort data = coucou; by numero annee; run; data coucou (keep=numero annee compteur64); set coucou; retain compteur64; if first.numero then compteur64=1; else compteur64 +1; by numero; run; proc sort data=coucou; by numero descending annee; run; proc sort data=coucou out=coucousort nodupkey; by numero; run; data _null_; set coucousort; call symput('var'||left(_N_),numero); call symput('nb'||left(_n_),compteur64); call symput('nb',_N_); run; proc sort data = coucou; by numero annee; run; options mlogic mprint; %macro numero(); data coucou; set coucou; retain compteur; %do i=1 %to &nb; if numero=&&var&i then do; %do k=1 %to &&nb&i; if annee=lag(annee)+1 then compteur=&i; else compteur +1; %end; end; %end; by numero annee; run; %mend; %numero();
Partager