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

Débutez Discussion :

Trouver la deuxième valeur la plus grande


Sujet :

Débutez

  1. #1
    Membre du Club
    Inscrit en
    Avril 2010
    Messages
    124
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 124
    Points : 60
    Points
    60
    Par défaut Trouver la deuxième valeur la plus grande
    Bonjour,

    Voici la table que j'ai:

    numClient Score1 Score2 Score3
    21225 4 2 1
    55555 3 7 1
    55558 2 4 6

    Je souhaiterais obtenir une table avec pour 1ere variable, la variable score la plus grande et pour 2eme variable, la 2eme variable la plus grande. Voici la table que je voudrais:

    numclient Max Max2
    21225 Score1 Score2
    55555 Score2 Score1
    55558 Score3 Score2

    Merci à tous pour votre aide.

  2. #2
    Membre expérimenté
    Homme Profil pro
    Développeur en SAS/ Statisticien
    Inscrit en
    Janvier 2013
    Messages
    482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur en SAS/ Statisticien
    Secteur : Enseignement

    Informations forums :
    Inscription : Janvier 2013
    Messages : 482
    Points : 1 547
    Points
    1 547
    Par défaut
    Bonjour,
    La fonction LARGEST retourne la plus grande valeur non manquante.
    Pour réorganiser du plus petit au plus grand, utilisez la fonction SMALLEST
    à la place.

    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
     
    data intiale;
    input numClient Score1 Score2 Score3 ;
    cards ;
    21225 4 2 1
    55555 3 7 1
    55558 2 4 6
    ;   
     
    data finale ;
      keep numClient Max1-Max2 ;
      set intiale;
      array Score(3) Score1-Score3 ;
      array Max(3);
      do k=1 to 3 ;
        Max(k)=LARGEST(k, of Score1-Score3);  
      end;
    run;
    Bon courage

  3. #3
    Membre du Club
    Inscrit en
    Avril 2010
    Messages
    124
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 124
    Points : 60
    Points
    60
    Par défaut
    Bonjour,

    Merci pour votre aide, je ne connaissais pas la fonction largest.
    Cependant, je voudrais obtenir dans ma table finale, le nom des variables et non pas la valeur de cette variable.

    numclient Max Max2
    21225 Score1 Score2
    55555 Score2 Score1
    55558 Score3 Score2

    je pense qu'il faudrait peut-être utiliser une boucle pour comparer la valeur à chaque variable ?

    Ma table contient en fait beaucoup plus de variable (j'en ai mis ici 3 pour illustrer ma question).

    Merci pour votre aide

  4. #4
    Membre habitué
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    114
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2010
    Messages : 114
    Points : 158
    Points
    158
    Par défaut Recuperer les noms de variables
    Bonjour,

    Pour avoir le nom des variables et non les valeurs il faut modifier le programme qui t'a été proposé à la marge. Voici la solution que je te propose :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    data finale;
    set  initiale;
    length max1 $32 max2 $32;
    val1=largest(1,of score1-score3);
    val2=largest(2,of score1-score3);
    array vecteur score1-score3;
    do j=1 to dim(vecteur);
    if vecteur(j)=val1 then max1=cats("score",put(j,best.));
    if vecteur(j)=val2 then max2=cats("score",put(j,best.));
    end;
    drop val1-val2 j;
    run;
    Bon courage

  5. #5
    Membre expérimenté
    Homme Profil pro
    Développeur en SAS/ Statisticien
    Inscrit en
    Janvier 2013
    Messages
    482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur en SAS/ Statisticien
    Secteur : Enseignement

    Informations forums :
    Inscription : Janvier 2013
    Messages : 482
    Points : 1 547
    Points
    1 547
    Par défaut
    Bonjour,
    Parfois on a besoin de visualiser la table finale dans son ensemble puis éditer les n-premières variables souhaités. Je propose donc la solution suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    DATA finale (keep= max1-max3);
    SET   initiale ;
    array Score(3) ;
    array lar(3)   ;
    array macs(3)$ max1-max3;
     
    do j=1 to dim(Score) ;
    do k=1 to dim(Score) ;
    lar(k)=largest(k, of score1-score3);
    if Score(j)=lar(k) then macs(k)=vname(Score(j));
    end ;
    end ;
    run;
    Si la solution vous convient cliquez sur résolu.

  6. #6
    Membre du Club
    Inscrit en
    Avril 2010
    Messages
    124
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 124
    Points : 60
    Points
    60
    Par défaut
    Bonjour,

    merci pour vos contributions. J'avais dû laisser ce projet un peu de côté.

    En fait, pour simplifier mon problème, j'avais noté que les noms des variables étaient "score1", "score2" ... mais ce n'est pas le cas. Elles ont d'autres noms.
    donc je ne peux pas appliquer la solution d'ibrahima.

    Quant à la proposition d'hossward, je ne vois comment cela fonctionne.

  7. #7
    Membre expérimenté
    Homme Profil pro
    Attaché statisticien
    Inscrit en
    Mai 2011
    Messages
    687
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Attaché statisticien
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mai 2011
    Messages : 687
    Points : 1 581
    Points
    1 581
    Par défaut
    mais ce n'est pas le cas. Elles ont d'autres noms.
    donc je ne peux pas appliquer la solution d'ibrahima.
    Bonjour, tu ne veux pas changer les noms dans le code ?

    Bon alors voici un petit secouage de tableau sans expliciter les noms juste pour s'amuser

    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
    DATA a;
    INFILE DATAlines DLM=',';
    INPUT numClient $5. Score1  Score2 Score3;
    DATALINES;
    21225,4,2,1
    55555,3,7,1
    55558,2,4,6
    ;
    RUN;
     
    PROC PRINT DATA=a;
     
    PROC TRANSPOSE DATA=a OUT=a; BY numClient;run;
     
    PROC SORT DATA=a; BY numClient DESCENDING col1;RUN;
     
    DATA a; SET a; RETAIN max ; BY numClient;
    IF first.numClient THEN max=1;ELSE max+1;
    RUN;
     
    PROC TRANSPOSE DATA =a(drop=col1) OUT=a(drop=_name_ _label_) PREFIX=max;
    BY numClient;
    VAR _name_ ;
    ID max;
    run;
     
    PROC PRINT DATA=a;
    RUN;
     
                                       num
                               Obs    Client    Score1    Score2    Score3
     
                                1     21225        4         2         1
                                2     55555        3         7         1
                                3     55558        2         4         6
     
     
                                       num
                               Obs    Client     max1      max2      max3
     
                                1     21225     Score1    Score2    Score3
                                2     55555     Score2    Score1    Score3
                                3     55558     Score3    Score2    Score1
    Have fun !

  8. #8
    Membre expérimenté
    Homme Profil pro
    Développeur en SAS/ Statisticien
    Inscrit en
    Janvier 2013
    Messages
    482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur en SAS/ Statisticien
    Secteur : Enseignement

    Informations forums :
    Inscription : Janvier 2013
    Messages : 482
    Points : 1 547
    Points
    1 547
    Par défaut
    Bonjour,
    J’ai repris le code que j’avais proposé et j’ai changé les noms de variables.
    J’ai mis Juin Juillet Aout à la place de Score1 Score2 Score3. On peut mettre les noms qu’on veut et c’est la fonction VNAME qui fait le reste.
    La fonction VNAME(var), elle retourne le nom de la variable spécifié.

    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
    DATA initiale;
    input numClient Juin Juillet Aout ;
    cards ;
    21225 4 2 1
    55555 3 7 1
    55558 2 4 6
    ;  					
    
    DATA  finale (keep= max1-max3) ;
    SET   initiale ;
    array Score(3) Juin Juillet Aout ;
    array   lar(3) ;
    array  macs(3)$ max1-max3;
    do j=1 TO dim(Score) ;
    do k=1 TO dim(Score) ;
    lar(k)=largest(k, of Juin Juillet Aout) ; 
    IF Score(j)=lar(k) then macs(k)=vname(Score(j)) ;
    end ;
    end ;
    run ;
    Cordialement

Discussions similaires

  1. Déterminer la Valeur la plus grande dans une table
    Par arnaud_verlaine dans le forum Langage SQL
    Réponses: 9
    Dernier message: 22/08/2014, 23h35
  2. requête pôur sélectionner les 5 valeurs les plus grandes ?
    Par kikidrome dans le forum Langage SQL
    Réponses: 7
    Dernier message: 06/11/2007, 16h29
  3. Réponses: 2
    Dernier message: 16/04/2007, 11h53
  4. c++ valeur la plus grande parmis les valeurs dun tableau
    Par corseb-delete dans le forum C++
    Réponses: 19
    Dernier message: 14/12/2006, 22h14
  5. Réponses: 4
    Dernier message: 29/05/2006, 13h04

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