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 :

Supprimer doublon mais selon criteres


Sujet :

Débutez

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2011
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2011
    Messages : 36
    Par défaut Supprimer doublon mais selon criteres
    Bonjour,
    Voila je travaille sous SAS et je crée une table qui me donne des doublons.
    Je souhaiterais supprimer les doublons, mais je souhaiterais supprimer ceux dont la valeur pour la variable etab est <> "X".
    Je ne sais pas si je suis très claire.
    Merci d'avance.

  2. #2
    Membre Expert
    Avatar de MEGAMIND2
    Homme Profil pro
    Paris
    Inscrit en
    Janvier 2011
    Messages
    1 029
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Paris

    Informations forums :
    Inscription : Janvier 2011
    Messages : 1 029
    Par défaut
    Bonjour Natacha,
    ça devait marcher ça:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    proc sort nodupkey data=test out=out(where var ne "X"); 
     by id; 
     run;

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2011
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2011
    Messages : 36
    Par défaut
    C'est exactement ça.
    Merci pour tout.
    Bonne journée.

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2011
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2011
    Messages : 36
    Par défaut
    En fait je suis désolée mais j'ai un message d'erreur:

    ERROR 12-63: '=' manquant pour l'option WHERE.

    Je ne sais pas pourquoi mon where ne s'affiche pas en bleu.
    Merci d'avance.
    Natacha

  5. #5
    Modérateur

    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Février 2011
    Messages
    1 625
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Consultant en Business Intelligence
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2011
    Messages : 1 625
    Par défaut
    Hello,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    proc sort nodupkey DATA=test out=out(WHERE=(var ne "X")); 
     BY id; 
     run;
    N'oubliez pas de consulter les FAQ SAS et les cours et tutoriels SAS
    N'oubliez pas de mettre votre message à si la solution donnée résout votre problème

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2011
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2011
    Messages : 36
    Par défaut
    Je viens de tester je suis désolée mais c'est pas exactement ce que je souhaite.
    Avec ce code cela ma supprime toute les lignes pour lesquelles var = "X" alors que ce que je veux c'est que en cas de doublon (et uniquement en cas de doublon) je garde la ligne pour laquelle var = "X" .
    Merci d'avance pour vos propositions.

  7. #7
    Modérateur

    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Février 2011
    Messages
    1 625
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Consultant en Business Intelligence
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2011
    Messages : 1 625
    Par défaut
    j'ai fais une petite bricole de ce que j'ai compris.

    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
     
     
    data test ;
    set sashelp.class sashelp.class (obs=5);
    run;
     
    proc sort data=test dupout=doublons out=pas_doublons nodupkey; 
    by age ;
    run;
     
     
    proc sort data=doublons  (where =(sex='M')) nodupkey ; 
    by age ;
    run;
     
     
    data finale;
    set doublons pas_doublons;
    run;
    N'oubliez pas de consulter les FAQ SAS et les cours et tutoriels SAS
    N'oubliez pas de mettre votre message à si la solution donnée résout votre problème

  8. #8
    Membre Expert
    Avatar de MEGAMIND2
    Homme Profil pro
    Paris
    Inscrit en
    Janvier 2011
    Messages
    1 029
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Paris

    Informations forums :
    Inscription : Janvier 2011
    Messages : 1 029
    Par défaut
    Bonjour,

    J'allais proposé la même solution que Sam, à lire de la doc ici

  9. #9
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2011
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2011
    Messages : 36
    Par défaut
    C'est pas exactement ça.
    Je suis désolée de ne pas décrire très clairement mon problème.
    Je vous transmets un fichier excel pour essayer d'être plus claire.
    Merci d'avance.
    Fichiers attachés Fichiers attachés

  10. #10
    Modérateur

    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Février 2011
    Messages
    1 625
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Consultant en Business Intelligence
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2011
    Messages : 1 625
    Par défaut
    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
     
    data test;
    input
     
    idet	@5 VAR1 $1.	@9 VAR2 $2.	@13 VAR3 1.	@17 VAR4 $15. ;
    cards;
    1	A	AZ	4	GRENOBLE 1
    1	Z	AR	5	GRENOBLE 3
    2	E	ZT	5	GRENOBLE 2
    3	R	SF	6	GRENOBLE 2
    4	T	ZR	5	GRENOBLE 3
    4	T	SF	6	GRENOBLE 2
    5	E	SF	3	GRENOBLE 3
    ;
    run;
    proc sort data=test ;
    by idet descending var4 ;
    run;
     
    proc sort data=test out=finale  nodupkey;
    by idet;
    run;
    N'oubliez pas de consulter les FAQ SAS et les cours et tutoriels SAS
    N'oubliez pas de mettre votre message à si la solution donnée résout votre problème

  11. #11
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2011
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2011
    Messages : 36
    Par défaut
    Merci beaucoup pour cette réponse.
    Mais en fait j'ai simplifié les données et en var4 : je peux avoir Marseille, Lyon, Toulouse. Et je ne peux donc pas faire la sélection par un tri descendant.

  12. #12
    Membre Expert
    Avatar de MEGAMIND2
    Homme Profil pro
    Paris
    Inscrit en
    Janvier 2011
    Messages
    1 029
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Paris

    Informations forums :
    Inscription : Janvier 2011
    Messages : 1 029
    Par défaut
    Bonjour Natacha,

    Essaie ce code (je n'ai pas testé):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    data test;
    set test;
    indic=substr(compress(VAR4),-1,1);
    run;
     
    Proc sql; 
    create table test2 as select
    idet, var1, var2, var3, var4, max(indic) from test
    group by idet;
    quit;

  13. #13
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2011
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2011
    Messages : 36
    Par défaut
    Je viens de tester, et aucun doublon n'est supprimer.
    Merci quand même.

  14. #14
    Membre Expert
    Avatar de MEGAMIND2
    Homme Profil pro
    Paris
    Inscrit en
    Janvier 2011
    Messages
    1 029
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Paris

    Informations forums :
    Inscription : Janvier 2011
    Messages : 1 029
    Par défaut
    ça m'étonne quand même que ça puisse pas fonctionner, c'est bien ce code que tu as exécuté?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    DATA test;
    SET test;
    indic=substr(compress(VAR4),-1,1);
    run;
     
    Proc sql; 
    CREATE TABLE test2 AS SELECT
    idet, var1, var2, var3, var4, max(indic) FROM test
    GROUP BY idet;
    quit;

  15. #15
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2011
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2011
    Messages : 36
    Par défaut
    Oui c'est bien le code que j'ai fait, mais il n'y a aucune données dans la variable : indic

  16. #16
    Modérateur

    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Février 2011
    Messages
    1 625
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Consultant en Business Intelligence
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2011
    Messages : 1 625
    Par défaut
    Une autre bricole, j'espère que sa pourra t'aider.

    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
     
     
    DATA test;
    input idet	@5 VAR1 $1.	@9 VAR2 $2.	@13 VAR3 1.	@17 VAR4 $15. ;
    cards;
    1	A	AZ	4	GRENOBLE 1
    1	Z	AR	5	GRENOBLE 3
    2	E	ZT	5	GRENOBLE 2
    3	R	SF	6	GRENOBLE 2
    4	T	ZR	5	GRENOBLE 3
    4	T	SF	6	GRENOBLE 2
    5	E	SF	3	GRENOBLE 3
    ;
    run;
     
    /* ne garder dans la table doublons que les données avec VAR4='GRENOBLE 3'  ==> ce qui correspond à ta condition */ 
    proc sort DATA=test out= pas_doublons dupout=doublons (where=(var4='GRENOBLE 3'))  nodupkey ;
    	BY idet;
    run;
     
    proc sql;
    	delete  from  pas_doublons  
    	where idet in ( select distinct idet from doublons);
    quit;
     
    data finale;
    set doublons pas_doublons;
    run;
    N'oubliez pas de consulter les FAQ SAS et les cours et tutoriels SAS
    N'oubliez pas de mettre votre message à si la solution donnée résout votre problème

  17. #17
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2011
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2011
    Messages : 36
    Par défaut
    Merci pour le code, je viens de tester, j'ai effectivement une table finale sans doublon mais avec comme valeur pour la var4 une valeur <> de "Grenoble 3"

  18. #18
    Modérateur

    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Février 2011
    Messages
    1 625
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Consultant en Business Intelligence
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2011
    Messages : 1 625
    Par défaut
    5natacha , le résultat que j'ai obtenu correspond exactement à ce que t'as mis comme résultat dans ton fichier Excel .
    Images attachées Images attachées  
    N'oubliez pas de consulter les FAQ SAS et les cours et tutoriels SAS
    N'oubliez pas de mettre votre message à si la solution donnée résout votre problème

  19. #19
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2011
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2011
    Messages : 36
    Par défaut
    Merci beaucoup pour votre aide, cela fonction si je remplace le = dans la condition where par ne.
    Encore merci à tout le monde.
    Bonne journée

  20. #20
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2011
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2011
    Messages : 36
    Par défaut
    Bonjour, j'ai encore un petit souci.
    Le code fonctionne 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
    proc sort DATA=sasuser.C6789L1 out= sasuser.pas_doublons dupout=sasuser.doublons (WHERE=(diplomR09 NE 'LEA'))    
      nodupkey ;                                                                                                                                                                                      
            BY idet;                                                                                                                                                                                  
    run;                                                                                                                                                                                              
     
    proc sql;                                                                                                                                                                                         
            DELETE  FROM  sasuser.pas_doublons                                                                                                                                                        
            WHERE idet IN ( SELECT DISTINCT idet FROM sasuser.doublons);                                                                                                                              
    quit;                                                                                                                                                                                   
    DATA sasuser.C6789L1;                                                                                                                                                                             
    SET sasuser.doublons sasuser.pas_doublons;                                                                                                                                                        
    run;
    Mais je voudrais ne pas sélectionné que sur la variable "diplomR09", mais également sur le niveau.
    En bref rajouter une seconde condition dans le where.
    Si j'ai des doublons, retenir en priorité le diplome "LEA", si pas de diplôme LEA choisir le niveau le plus élevé.
    J'espere que c'est pas trop confus.
    Merci d'avance à vous.

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Réponses: 3
    Dernier message: 09/02/2012, 11h37
  2. [E-03] Tableau dans lequel on supprime les doublons mais pas toujours
    Par edonist dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 08/10/2008, 21h38
  3. Changer la couleur de police selon critere
    Par guidzit dans le forum Access
    Réponses: 5
    Dernier message: 01/09/2006, 11h09
  4. Réponses: 21
    Dernier message: 01/08/2006, 20h44
  5. [SQL Serveur 2K] Procédure pour Supprimer doublons
    Par Vesta dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 29/05/2006, 11h32

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