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 des doublons (qui ne le sont que partiellement)


Sujet :

SAS Base

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2010
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 17
    Points : 15
    Points
    15
    Par défaut Supprimer des doublons (qui ne le sont que partiellement)
    Bonjour,

    Je me permets de déplacer une discussion que j’avais ouverte initialement dans SAS macro. Je pense que j'aurais plus de chances de trouver une réponse ici

    Je cherche a lancer une procédure permettant de supprimer l'intégralité d'une ligne si le nom de la ligne i = le nom de la ligne i+1 (la table ayant déja été classée la ligne i est "plus forte" que la ligne i+1).

    Voici la table que j'ai :

    nom information 1 information 2 information 3 information 4

    Dupont x1 23 36 lo
    Dupont x1 71 35 lo
    Durand w2 21 78 ml
    Dumou j3 23 21 xy
    Dumou j1 23 21 xy

    Et voici la table que j'aimerais obtenir :

    nom information 1 information 2 information 3 information 4

    Dupont x1 23 36 lo
    Durand w2 21 78 ml
    Dumou j3 23 21 xy

    Je souhaite supprimer les doublons sur la base de leur ordre d'apparition dans la table, car ils ont été triés en amont sur la base de certaines variables. Il faudrait que je lance une procédure qui, dans le cas ou le nom de la ligne i = le nom de la ligne i+1 (comme dans l'exemple les informations pouvant être différentes entre ces deux personnes qui sont en fait une seule et unique personne), alors SAS "jette" la ligne i+1 (même si les informations diffèrent entre ces deux lignes) pour ne garder une table contenant que les lignes i (dans le cas nom i = nom i+1).

    Je ne sais pas si je suis totalement clair, n'hésitez pas à me demander des précisions et merci d'avance pour les solutions que vous me proposerez

  2. #2
    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
    Bonjour,

    Normalement, tu pourrais utiliser une proc sort avec l'option NODUPKEY, mais cette procédure ne va conserver que le dernier enregistrement.

    Si tu ne veux pas re-trier ta table, tu peux utiliser la fonction lag :


    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
     
    /* Données source */
    DATA test;
    input nom $ info1 $ info2 info3 info4 $;
    cards;
    Dupont x1 23 36 lo
    Dupont x1 71 35 lo
    Durand w2 21 78 ml
    Dumou j3 23 21 xy
    Dumou j1 23 21 xy
    ;
    run;
     
    data test2;
    set test;
    if nom = lag(nom) then delete;
    run;

  3. #3
    Membre éprouvé
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    747
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 747
    Points : 978
    Points
    978
    Par défaut
    Salut,

    Regarde du coté de l'option noduplicate de la PROC SORT.
    C'est une option différente de nodupkey.

    X

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2010
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 17
    Points : 15
    Points
    15
    Par défaut
    @ Edward : Merci pour ta solution, je ne comprends pas la table que tu definies en test. J'ai juste utilisé la fonction lag et cela semble marcher, il ne garde que la première information et supprime la ligne en entier.

    @ Xav : merci pour ta solution que je n'ai pas testée puisque la précédente marche. En revanche il me semble que l'option noduplicate ne marche que si toutes les valeurs d'une ligne sont identiques, ce qui n'est pas le cas dans mon exemple.


    Bonne soirée

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

Discussions similaires

  1. comment supprimer des doublons et ne garder que le plus récent
    Par aerosky dans le forum Requêtes et SQL.
    Réponses: 3
    Dernier message: 10/03/2010, 19h44
  2. Supprimer des fichier qui sont vieux d'une semaine
    Par islyoung2 dans le forum Shell et commandes GNU
    Réponses: 12
    Dernier message: 20/09/2009, 19h32
  3. [XL-2003] Des doublons qui n'en sont pas pour mDF doublons
    Par La Zélie dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 13/05/2009, 12h27
  4. Réponses: 2
    Dernier message: 07/07/2004, 17h44

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