IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macro Discussion :

Ajout d'un compteur


Sujet :

Macro

  1. #1
    Nouveau membre du Club
    Inscrit en
    Avril 2009
    Messages
    63
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 63
    Points : 32
    Points
    32
    Par défaut Ajout d'un compteur
    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 :

    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();
    Merci pour votre aide!!!

  2. #2
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Avril 2011
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2011
    Messages : 29
    Points : 32
    Points
    32
    Par défaut
    Bonjour,

    à priori avec une seule étape data ça marche très bien :

    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
     
    data truc;
    input num annee compteur;
    cards;
    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
    1009 2005 6
    1009 2006 6
    1009 2010 7
    1010 1973 8
    1011 1975 9
    1011 1976 9
    ;
    run;
     
    proc sort data=truc;
    by num annee;
    run;
     
    data coucou (keep=num annee compteur new_compteur);
    set truc;
    if _n_ = 1 then new_compteur = 0;
    if first.num then new_compteur+1;/*quand on change de num on rajoute 1*/
    by num;
    if annee^=lag(annee)+1 then new_compteur+1;/*quand on change d'année on rajoute 1*/
    if first.num and annee^=lag(annee)+1 then new_compteur=new_compteur-1;/*si on change de num et d'année on a rajouté 2 avec les lignes d'avant donc là on enlève 1*/
    run;

  3. #3
    Nouveau membre du Club
    Inscrit en
    Avril 2009
    Messages
    63
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 63
    Points : 32
    Points
    32
    Par défaut
    Merci

    Suis-je bête...!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [DATA] Ajouter 1 au compteur seulement quand nouvelle observation
    Par alers dans le forum SAS Base
    Réponses: 6
    Dernier message: 11/12/2014, 09h40
  2. Aide sur l'ajout d'un compteur dans un tableau
    Par prugne dans le forum PL/SQL
    Réponses: 5
    Dernier message: 17/09/2010, 11h25
  3. Ajout d'un compteur dans un champ
    Par alexandrebergercyr dans le forum Oracle
    Réponses: 3
    Dernier message: 06/03/2007, 08h46
  4. [SQL] Ajout d'un compteur dans une requete
    Par at_first dans le forum Access
    Réponses: 7
    Dernier message: 04/10/2006, 16h40
  5. Ajout d'un compteur
    Par LudoSo dans le forum Access
    Réponses: 1
    Dernier message: 20/06/2006, 20h40

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo