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 :

Supprimer les lignes qui ne correspondent pas à la valeur max d'une variable


Sujet :

SAS Base

  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2018
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2018
    Messages : 4
    Points : 3
    Points
    3
    Par défaut Supprimer les lignes qui ne correspondent pas à la valeur max d'une variable
    Bonjour à tous,
    j'ai une table de ce type :

    Obs. ID var1 var2
    1 424a 21 21.8182
    2 424a 71 7.2727
    3 691e 50 30.6306
    4 691e 71 24.3243

    Je ne souhaite conserver que les lignes où var2 prend la valeur maximum, ce qui donnerait ici :

    Obs. ID var1 var2
    1 424a 21 21.8182
    2 691e 50 30.6306

    J'ai essayer de procéder comme suit :

    PROC SQL;
    create table test as select var1,var2, max(var2)as var2 from mydata group by var1;

    J'obtien une table de ce type :

    Obs. ID var1 var2
    1 424a 21 21.8182
    2 424a 71 21.8182
    3 691e 50 30.6306
    4 691e 71 30.6306

    Merci par avance de votre aide !

  2. #2
    Expert confirmé
    Avatar de olivier.decourt
    Homme Profil pro
    Formateur R/SAS/statistiques
    Inscrit en
    Avril 2008
    Messages
    2 064
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Activité : Formateur R/SAS/statistiques
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 064
    Points : 4 478
    Points
    4 478
    Par défaut
    Bonjour.
    Il ne te manque qu'un HAVING dans ton SQL ; c'est l'équivalent d'un WHERE, on y pose des conditions, mais sur le résultat de la requête (alors que WHERE porte sur les lignes lues).
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    PROC SQL;
    create table test as 
    select var1,var2, max(var2)as var2Max
    from mydata 
    group by var1 
    having var2=var2Max ;
    Bon courage.
    Olivier

  3. #3
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2018
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2018
    Messages : 4
    Points : 3
    Points
    3
    Par défaut
    Merci pour votre réponse rapide !
    cependant lorsque je lance le programme avec having j'obtient le message d'erreur suivant :

    ERROR 180-322: Statement is not valid or it is used out of proper order.

  4. #4
    Expert confirmé
    Avatar de olivier.decourt
    Homme Profil pro
    Formateur R/SAS/statistiques
    Inscrit en
    Avril 2008
    Messages
    2 064
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Activité : Formateur R/SAS/statistiques
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 064
    Points : 4 478
    Points
    4 478
    Par défaut
    Vous n'auriez pas laissé un point-virgule à la fin du GROUP BY ? Il n'y en n'a qu'un seul, à la toute fin de la requête (ie après le HAVING).
    Bon courage.
    Olivier

  5. #5
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2018
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2018
    Messages : 4
    Points : 3
    Points
    3
    Par défaut
    Problème résolu !
    Merci infiniment de votre aide.

  6. #6
    Nouveau membre du Club
    Homme Profil pro
    Ingénieur commercial
    Inscrit en
    Août 2017
    Messages
    67
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur commercial

    Informations forums :
    Inscription : Août 2017
    Messages : 67
    Points : 29
    Points
    29
    Par défaut Max par entité
    Bonjour,

    Je me permets de relancer ce sujet..Je me suis inspiré pour trouver ma date la plus ancienne...toutefois la requete me tope les opérations sur la date la plus ancienne...ce que je veux c'est chaque opération la plus ancienne sur chaque libellé DR

    Voici ma PROQ

    PROC SQL;
    CREATE TABLE XXX AS
    SELECT t1.'Date Création'n,

    t1.'Identifiant opération'n,
    t1.'Libellé DR'n


    FROM WORK.XXXX t1
    group by t1.'Libellé DR'n
    having t1.'Date Création'n =min(t1.'Date Création'n)AND t1.'Libellé DR'n IN (X1,X2,X3)
    quit;


    Merci par avance

  7. #7
    Membre confirmé
    Homme Profil pro
    Consultant Finance/Assurance
    Inscrit en
    Décembre 2013
    Messages
    198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Consultant Finance/Assurance

    Informations forums :
    Inscription : Décembre 2013
    Messages : 198
    Points : 638
    Points
    638
    Par défaut
    Bonjour,

    Il faut créer une variable qui prendra le min de chaque groupe dans ton select (variable "mini" dans l'exemple ci-dessous) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     PROC SQL;
     CREATE TABLE XXX AS 
     SELECT t1.'Date Création'n, 
     t1.'Identifiant opération'n, 
     t1.'Libellé DR'n,
     min(t1.'Date Création'n) as mini
     FROM WORK.XXXX t1
     group by t1.'Libellé DR'n
     having t1.'Date Création'n = mini AND t1.'Libellé DR'n IN (X1,X2,X3);
     quit;
    Flo00154

  8. #8
    Inactif  

    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    3 064
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2011
    Messages : 3 064
    Points : 4 605
    Points
    4 605
    Par défaut
    Bonjour,

    Pour passer de ceci :

    Code CSV : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Obs.	ID	var1	var2
    1	424a	21	21.8182
    2	424a	71	7.2727
    3	691e	50	30.6306
    4	691e	71	24.3243

    a ceci

    Code CSV : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Obs.	ID	var1	var2
    1	424a	21	21.8182
    2	691e	50	30.6306

    Je conseille d'avoir :

    * un "proc sort" ou "order by" sur " Obs. " et " ID " avec DESC sur var2 .
    * un transpose sur " Obs. " et " ID " ou var2 sera transposé pour chaque couple " Obs. " et " ID " . La plus grand valeur sera rangé en début de la transposé , la plus petit à la fin.

    J'ai déjà testé ce type de requête avec la transpose. On gagne 1h de traitement sur des grosses base à 30 secondes ... Y'a pas photo , prend la second solution.

  9. #9
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2018
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2018
    Messages : 4
    Points : 3
    Points
    3
    Par défaut
    En effet c'est plus rapide merci !

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

Discussions similaires

  1. Supprimer les lignes qui ne répondent pas à les conditions
    Par tlhousni dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 10/04/2017, 12h16
  2. Réponses: 1
    Dernier message: 04/06/2012, 22h19
  3. supprimer les fichiers qui ne sont pas dans une liste
    Par jeorcal dans le forum Langage
    Réponses: 7
    Dernier message: 15/01/2011, 10h03
  4. [XL-2003] Supprimer les lignes qui contiennent un mot
    Par GOMMME dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 05/09/2010, 20h34
  5. Supprimer les cellules qui ne sont pas colorées
    Par Gwadadev dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 22/05/2008, 10h45

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