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

SAS Base Discussion :

Recherche maximum sans passer par une PROC SQL


Sujet :

SAS Base

  1. #1
    Responsable SAS


    Inscrit en
    Septembre 2006
    Messages
    3 176
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 3 176
    Points : 16 219
    Points
    16 219
    Par défaut Recherche maximum sans passer par une PROC SQL
    Bonjour,

    J'ai une table contenant une clé multiple : identifiant, entretien et résultat.
    Je souhaite obtenir le max de la variable résultat pour chaque identifiant et entretien.

    Ma table à la forme suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    identifiant   entretien      resultat
    1               1                5
    1               1                2
    1               1                4
    1               2                2
    1               2                1
    2               1                3
    2               1                1
    2               2                2 
    2               2                3
    Je souhaite obtenir cette table
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    identifiant   entretien      resultat
    1               1                5
    1               2                2
    2               1                3
    2               2                3
    Pour faire cette manipulation via une PROC SQL pas de problème, mais comment la faire avec uniquement une étape DATA ?

    Merci
    Les balises code
    FAQ SAS
    Rubrique SAS

    Si vous souhaitez contribuer à la rubrique SAS, contactez-moi ou tout autre membre de l'équipe BI par MP.

  2. #2
    Membre régulier
    Homme Profil pro
    Inscrit en
    Juin 2012
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Juin 2012
    Messages : 40
    Points : 100
    Points
    100
    Par défaut
    Bonjour,

    Vous pouvez le faire dans une étape data avec un retain .
    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
    data a ;
    input identifiant   entretien      resultat;
    cards ;
    1               1                5
    1               1                2
    1               1                4
    1               2                2
    1               2                1
    2               1                3
    2               1                1
    2               2                2 
    2               2                3
    ;run;
     
     
    data b(rename=(maxi=resultat));
    set a ;
    retain maxi;
    by identifiant entretien;
    if first.entretien then maxi= resultat ;
    maxi=max(maxi,resultat) ;
    if last.entretien ;
    drop resultat;
    run;
    Il faut indiquer dans le by les 2 variables identifiant entretien et initialiser votre maximum avec la valeur de la première ligne de la variable entretien.

    Cordialement, Pascal

  3. #3
    Membre éprouvé
    Homme Profil pro
    Statisticien/développeur BI
    Inscrit en
    Janvier 2012
    Messages
    326
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Statisticien/développeur BI
    Secteur : Transports

    Informations forums :
    Inscription : Janvier 2012
    Messages : 326
    Points : 1 142
    Points
    1 142
    Par défaut
    Citation Envoyé par p.pfeiffer Voir le message
    Bonjour,

    Vous pouvez le faire dans une étape data avec un retain .
    Uniquement si les tables sont bien triées ....

    Sinon, pourquoi pas une proc means tout simplement ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    proc means data=matable max;
    class identifiant entretien;
    var resultat;
    output out=matable2 (where=(_type_=3) drop=_freq_) max=resultat;
    run;

  4. #4
    Responsable SAS


    Inscrit en
    Septembre 2006
    Messages
    3 176
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 3 176
    Points : 16 219
    Points
    16 219
    Par défaut
    C'est parfait !
    Les balises code
    FAQ SAS
    Rubrique SAS

    Si vous souhaitez contribuer à la rubrique SAS, contactez-moi ou tout autre membre de l'équipe BI par MP.

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

Discussions similaires

  1. Réponses: 5
    Dernier message: 10/05/2008, 18h11
  2. Réponses: 2
    Dernier message: 10/05/2008, 17h53
  3. Background degradé sans passer par une image?
    Par j14z dans le forum Balisage (X)HTML et validation W3C
    Réponses: 7
    Dernier message: 28/03/2008, 15h02
  4. execution de requete sans passer par un fichier sql
    Par funboard dans le forum Oracle
    Réponses: 5
    Dernier message: 11/12/2007, 10h31
  5. changer les valeurs graphique sans passer par une cellule
    Par mennix dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 06/11/2007, 19h56

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