Publicité
+ Répondre à la discussion
Affichage des résultats 1 à 4 sur 4
  1. #1
    Invité régulier
    Inscrit en
    août 2010
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : août 2010
    Messages : 17
    Points : 5
    Points
    5

    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 émérite
    Homme Profil pro Ludovic Le Breton
    Statisticien/développeur BI
    Inscrit en
    janvier 2012
    Messages
    264
    Détails du profil
    Informations personnelles :
    Nom : Homme Ludovic Le Breton
    Âge : 39
    Localisation : France, Oise (Picardie)

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

    Informations forums :
    Inscription : janvier 2012
    Messages : 264
    Points : 899
    Points
    899

    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 :
    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 émérite
    Inscrit en
    avril 2009
    Messages
    745
    Détails du profil
    Informations forums :
    Inscription : avril 2009
    Messages : 745
    Points : 936
    Points
    936

    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
    Invité régulier
    Inscrit en
    août 2010
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : août 2010
    Messages : 17
    Points : 5
    Points
    5

    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.

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •