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 doublons après la mise à jour


Sujet :

SAS Base

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2018
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Tarn (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2018
    Messages : 20
    Points : 26
    Points
    26
    Par défaut supprimer les doublons après la mise à jour
    bonjour tout le monde, j'ai une problématique à vous poser :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    data test2;
      input id $ region $ departement $ quartier $ commune $;
      cards;
    10 25 NULL NULL NULL
    10 NULL 27 NULL NULL
    10 NULL NULL 13 20
    111 94 NULL NULL NULL
    113 27 NULL NULL NULL
    113 NULL 25 NULL NULL
    113 NULL NULL 30 NULL
    113 70 NULL NULL NULL
    113 NULL NULL NULL 100
    ;
    run;
    je veux supprimer les doublons mais avant de le faire j'aimerais bien mettre à jour les valeurs NULL de même id
    exemple pour id =10 j'aurai la ligne 10 27 13 20

    j'aurais comme résultat ce tableau

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    10 25 27 13 20
    111 94 NULL NULL NULL
    113 70 25 30 100
    je vous remercie d'avance

  2. #2
    Membre expérimenté
    Inscrit en
    Novembre 2009
    Messages
    703
    Détails du profil
    Informations forums :
    Inscription : Novembre 2009
    Messages : 703
    Points : 1 311
    Points
    1 311
    Par défaut Regrouper des observations
    Bonjour,

    Êtes-vous sûr de ce que vous voulez faire ? Une de vos collègues a posé une question sur le même jeu de données ici.

    Votre demande n'est pas suffisamment précise. Comment choisissez-vous entre la région 27 et la région 70 pour l'id 113 ?

    En supposant que vous vouliez le maximum, vous pouvez utiliser la proc univariate :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    data test2;
      input id region departement quartier commune;
      cards;
    10 25 . . .
    10 . 27 . .
    10 . . 13 20
    111 94 . . .
    113 27 . . .
    113 . 25 . .
    113 . . 30 .
    113 70 . . .
    113 . . . 100
    ;
    run;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    proc univariate data=test2 noprint;
      var region departement quartier commune;
      by id;
      output out=test2_out max=region departement quartier commune;
    run;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     id    region    departement    quartier    commune
     10      25           27           13          20
    111      94            .            .           .
    113      70           25           30         100
    Cordialement,

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2018
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Tarn (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2018
    Messages : 20
    Points : 26
    Points
    26
    Par défaut
    j ai pris le même jeux de donné car j ai un problème similaire , la différence que je cherche à cumuler les informations pour chaque ID on remarque bien que à chaque ligne y a des informations qui manquent , le but est de cumuler les informations dans une seule ligne pour chaque ID , et pour les informations disponibles pour un ID on prend la dernière

  4. #4
    Membre expérimenté
    Inscrit en
    Novembre 2009
    Messages
    703
    Détails du profil
    Informations forums :
    Inscription : Novembre 2009
    Messages : 703
    Points : 1 311
    Points
    1 311
    Par défaut Regrouper des observations
    Bonjour,

    Je ne connais pas de fonction "dernière donnée non manquante" qui pourrait être utilisée dans la proc univariate.

    Une possibilité est de traiter chaque variable indépendamment et merger les tables obtenues :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    data test2;
      input id $ region $ departement $ quartier $ commune $;
      cards;
    10 25 NULL NULL NULL
    10 NULL 27 NULL NULL
    10 NULL NULL 13 20
    111 94 NULL NULL NULL
    113 27 NULL NULL NULL
    113 NULL 25 NULL NULL
    113 NULL NULL 30 NULL
    113 70 NULL NULL NULL
    113 NULL NULL NULL 100
    ;
    run;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    %macro niveau(niv);
      data ∋
        set test2(keep=(id niv) where=(niv ne "NULL"));
        by id;
        if last.id;
      run;
     
      data test2_out;
        merge test2_out ∋
        by id;
      run;
    %mend;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    data test2_out;
      length id 8.;
    run;
     
    %macro niveau(region);
    %macro niveau(departement);
    %macro niveau(quartier);
    %macro niveau(commune);
    Cordialement,

    PS : J'ai vu que j'avais oublié de coller le code de la proc univariate dans mon précédent message, c'est réparé.

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2018
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Tarn (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2018
    Messages : 20
    Points : 26
    Points
    26
    Par défaut problème résolue
    je vous remercie infiniment le code marche très bien et donne le résultat souhaité

    je vous propose une amélioration pour ne pas répéter l’exécution de la macro plusieurs fois en cas on aura plusieurs colonnes :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    proc sql;
            create table inventaire_tables_col as select
            b.name
            from dictionary.columns b
            where  b.libname eq "WORK"
            and    b.memtype ="DATA"
            and    strip(lowcase(b.memname)) eq "test2" 
    		and    strip(lowcase(b.name)) ne "id" ;
        quit;
    data _null_;
    set inventaire_tables_col; 
    call execute('%nrstr(%niveau(%nrstr('||strip(name)||')))');
    run;

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

Discussions similaires

  1. Réponses: 12
    Dernier message: 22/04/2020, 15h02
  2. Réponses: 2
    Dernier message: 30/03/2016, 13h03
  3. Réponses: 2
    Dernier message: 03/02/2014, 08h06
  4. Comment supprimer les doublons
    Par djelloulc dans le forum MS SQL Server
    Réponses: 9
    Dernier message: 17/09/2013, 14h30
  5. Réponses: 2
    Dernier message: 14/06/2007, 22h24

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