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 :

Récupérer des variables différentes pour un même identifiant


Sujet :

SAS Base

  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2013
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2013
    Messages : 3
    Points : 2
    Points
    2
    Par défaut Récupérer des variables différentes pour un même identifiant
    Bonjour,
    j'ai une table de 3 colonne comme celle-ci : tab (A, B, C)
    A B C
    24 1 96
    24 2 96
    35 3 01
    35 4 02
    35 10 01
    74 8 96
    74 5 42
    89 6 32
    89 3 32

    Requête:
    J'aimerai récupérer tous les numéros d'assurés (A) ayant des prêts (B) et qui ont des RIB(C) différents.
    Résultat souhaité par rapport à la table ci-dessus:
    A B C
    35 3 01
    35 4 02
    35 10 01

    74 8 96
    74 5 42

    Si quelqu'un peut m'aider pour réaliser cette réquête SAS.
    Je vous remercie d'avance...

  2. #2
    Membre à l'essai
    Homme Profil pro
    Data Manager
    Inscrit en
    Octobre 2013
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Data Manager
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Octobre 2013
    Messages : 10
    Points : 20
    Points
    20
    Par défaut
    Bonjour,

    Je le verrais comme cela, d'ailleurs si j'ai bien compris, on ne devrait pas récupérer dans la table de sortie les lignes relatives à l'assuré A avec le RIB "01".
    Dis-moi STP si c'est ce que tu recherchais.

    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
    DATA t1;
    INPUT A B C $;
    cards;
    24 1 96
    24 2 96
    35 3 01
    35 4 02
    35 10 01
    74 8 96
    74 5 42
    89 6 32
    89 3 32
    run;
     
    Proc sort data=t1;
    By A C;
    Run;
     
    Data t2 (drop=nombre);/*on supprime la variable   intermédiaire "nombre" */
    Set t1;
    By A C;
    /* on crée un compteur qui s'incrémente à chaque nouveau RIB différent par assuré */
    if first.C then NOMBRE=1; else NOMBRE+1;   
    /* on conserve uniquement les RIBs uniques par assuré */
    If last.C and NOMBRE=1;                    
    Run;

  3. #3
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2013
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2013
    Messages : 3
    Points : 2
    Points
    2
    Par défaut
    Bonjour saseramoi,

    Je te remercie d'avoir pris du temps pour répondre mon message.

    Oui c'est ça que je cherche mais il y a un petit détails que j'ai oublié à ajouter.

    Effectivement, on doit récupérer l'Assuré A avec le RIB 01 aussi parce que cet assuré a 3 RIB dont 2 identique et 1 différent.
    Le but c'est de récupérer tous les Assurés donc ils ont au moins 2 RIBs différents.
    Exemple:
    Soit Assuré X avec 6 RIBs (01, 02, 02, 02, 01, 01), on doit récupérer cet assuré parce que RIB 01 est différent du RIB 02.

    On ne récupère juste pas des assurés avec des RIBs identiques pour tous les prêts.

    Donc est ce qu'il y aura des choses à modifier dans la requête que tu viens de poster?

    Merci

  4. #4
    Membre à l'essai
    Homme Profil pro
    Data Manager
    Inscrit en
    Octobre 2013
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Data Manager
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Octobre 2013
    Messages : 10
    Points : 20
    Points
    20
    Par défaut
    OK, j'ai rebricolé le code pour obtenir ce que tu voulais. C'est sans doutes pas la solution la plus jolie ni la plus rapide, mais ça a l'air de fonctionner, essaye cela:

    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
    29
    30
    31
    32
    33
    34
    35
    DATA t1;
    INPUT A B C $;
    cards;
    24 1 96
    24 2 96
    35 3 01
    35 4 02
    35 10 01
    74 8 96
    74 5 42
    89 6 32
    89 3 32
    run;
     
    Proc sort DATA=t1;
    BY A C;
    Run;
     
    DATA t2 (keep=A);
    SET t1;
    BY A C;
    If first.A then NOMBRE1=1;else NOMBRE1+1;
    IF first.C then NOMBRE2=1; else NOMBRE2+1;   
    If NOMBRE1 > 1 and last.A and NOMBRE1 = NOMBRE2; 
    Run;
     
    Data T_FINAL;
    Merge t1 (in=x) t2 (in=y);
    By A;
    If x and not y;
    Run;
     
    Proc sort data=T_FINAL;
    By A B C;
    Run;

  5. #5
    Membre averti
    Inscrit en
    Janvier 2010
    Messages
    235
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 235
    Points : 372
    Points
    372
    Par défaut
    Bonjour,
    La proc sql est toute indiquée pour remplir ce genre de tache:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    proc sql;
    create table T_FINAL as
    select * from t1
    group by A
    having count(distinct C)>1
    ;
    quit;

  6. #6
    Membre à l'essai
    Homme Profil pro
    Data Manager
    Inscrit en
    Octobre 2013
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Data Manager
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Octobre 2013
    Messages : 10
    Points : 20
    Points
    20
    Par défaut
    Super ! Il me semblait bien qu'il y avait plus simple... Merci

  7. #7
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2013
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2013
    Messages : 3
    Points : 2
    Points
    2
    Par défaut merci
    Je vous remercie beaucoup saseramoi et sasadm. Vraiment vous m'avez sauvé
    Mon problème est résolu.


    Merci encore

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

Discussions similaires

  1. Formats différents pour une même variable
    Par Petru16 dans le forum SAS Base
    Réponses: 4
    Dernier message: 25/03/2010, 13h46
  2. Réponses: 17
    Dernier message: 09/02/2010, 16h22
  3. Réponses: 2
    Dernier message: 14/04/2009, 10h27
  4. Réponses: 2
    Dernier message: 19/04/2008, 13h01
  5. Réponses: 6
    Dernier message: 25/03/2008, 16h13

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