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 :

Pour un même ID - dupliquer la valeur d'un champ si elle est trouvée


Sujet :

SAS Base

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Janvier 2019
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2019
    Messages : 25
    Points : 34
    Points
    34
    Par défaut Pour un même ID - dupliquer la valeur d'un champ si elle est trouvée
    Bonjour,

    J'ai une table avec 2 colonnes :
    - ID
    - Field2 qui peut donner des valeurs différentes pour un même ID dont A

    L'objectif serait de créer une nouvelle colonne avec les règles suivantes :
    - Si la valeur A est trouvée dans Field2 sur un ID cette valeur A est dupliquée dans Field3 sur toutes les lignes ayant cet ID
    - Si la valeur A n'est pas trouvée sur un ID les valeurs Field3 seront identiques à Field2

    Ci-dessous un exemple :

    Input :

    ID Field2
    X1 A
    X1 B
    X1 C
    X1 D
    X2 A
    X2 B
    X2 E
    X3 B
    X3 C
    X3 F


    Output

    ID Field2 Field3
    X1 A A
    X1 B A
    X1 C A
    X1 D A
    X2 A A
    X2 B A
    X2 E A
    X3 B B
    X3 C C
    X3 F F

    Pour la valeur X1 - la valeur A est trouvée dans Field2 alors pour toutes les valeurs X1 le field3 sera alimenté d'un A

    Pour la valeur X2 - la valeur A est trouvée dans Field2 alors pour toutes les valeurs X1 le field3 sera alimenté d'un A

    Pour la valeur X3 - la valeur A n'est pas trouvée dans Field2 alors pour les valeurs de field3 seront les mêmes que Field2 pour tous les X3

    merci 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 Pour un même ID - dupliquer la valeur d'un champ si elle est trouvée
    Bonjour,

    Vous pouvez créer une base avec les A et la merger avec la table initiale. J'ai légèrement modifié votre table initiale pour ajouter le cas où A n'apparaît pas en position initiale et celui où il y aurait deux A pour un id.

    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
    data test;
      input id :$2. field2 :$1.;
      cards;
    X1 A
    X1 B
    X1 C
    X1 D
    X2 B
    X2 A
    X2 A
    X3 B
    X3 C
    X3 F
    ;
    run;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    data A;
      set test;
      if field2="A";
      rename field2=field3;
    run;
     
    data A;
      set A;
      by id;
      if first.id;
    run;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    data test;
      merge test A;
      by id;
    run;
     
    data test;
      set test;
      if field3="" then field3=field2;
    run;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    id    field2    field3
    X1      A         A
    X1      B         A
    X1      C         A
    X1      D         A
    X2      B         A
    X2      A         A
    X2      A         A
    X3      B         B
    X3      C         C
    X3      F         F
    Cordialement,

  3. #3
    Membre expérimenté
    Homme Profil pro
    Développeur en SAS/ Statisticien
    Inscrit en
    Janvier 2013
    Messages
    483
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur en SAS/ Statisticien
    Secteur : Enseignement

    Informations forums :
    Inscription : Janvier 2013
    Messages : 483
    Points : 1 552
    Points
    1 552
    Par défaut
    Bonjour,
    Une 2ème proposition :

    Mat{1:N} est une matrice où N est le nombre d'identifiants distincts à modifier. Dans ton cas N=3.

    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 (drop=V1 V2 i) ;	
    array Mat{1:100} $ _temporary_ ;
    if _n_ = 1 then do i=1 to fin ;  
                set test  nobs=fin ;
    			by id notsorted ;	
    			if first.id then V1+1 ;
    			if Field2="A" then Mat(V1)="A" ;	 
    			end ; 			
    set test ;
    by id notsorted ;	
    if first.id then V2+1 ;
    Field3=Mat(V2) ;
    if missing(Field3) then Field3=Field2 ; 
    run ;
    Cordialement Ward

Discussions similaires

  1. Réponses: 5
    Dernier message: 17/11/2013, 14h37
  2. Réponses: 10
    Dernier message: 18/04/2011, 15h53
  3. Réponses: 1
    Dernier message: 25/06/2010, 05h16
  4. Réponses: 2
    Dernier message: 27/01/2009, 09h32
  5. Réponses: 4
    Dernier message: 01/02/2008, 21h12

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