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 :

Remplacer un champ vide par la dernière valeur connue de ce champ [DATA]


Sujet :

SAS Base

  1. #1
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2014
    Messages
    55
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2014
    Messages : 55
    Points : 61
    Points
    61
    Par défaut Remplacer un champ vide par la dernière valeur connue de ce champ
    Bonjour à tous,

    Je ne suis pas parvenu à faire ce que je souhaitais en code SAS.

    En regardant l'illustration ci-dessous, je voudrais, pour chaque ligne où first_date est vide, remplacer ce vide par la dernière valeur connue de first_date.
    Ainsi, je voudrais remplacer les 3 première cellules vides par la date 21 décembre 2012 et les 3 dernières celulles vides par la date du 09 janvier 2013.

    Nom : exemple.png
Affichages : 832
Taille : 140,6 Ko

    J'ai essayé de faire ça avec un RETAIN et un LAG mais je n'y suis pas parvenu.
    Avez-vous une idée de la manière dont je pourrais procéder ?

    Merci d'avance.

    Cordialement.

  2. #2
    Membre éprouvé
    Avatar de m.brahim
    Homme Profil pro
    SAS / BIG DATA
    Inscrit en
    Juillet 2011
    Messages
    461
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : SAS / BIG DATA
    Secteur : Conseil

    Informations forums :
    Inscription : Juillet 2011
    Messages : 461
    Points : 1 119
    Points
    1 119
    Billets dans le blog
    14
    Par défaut
    Bonjour,

    je te propose cette solution:

    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
     
    data exemple ;
    input id date ddmmyy8.  ;
    format date ddmmyy8. ;
    cards ;
    1 25/01/14
    1 25/01/14
    1 .
    1 .
    1 .
    2 16/01/14
    2 16/01/14
    2 .
    2 .
    2 .
    2 .
    3 17/01/14
    3 .
    3 17/01/14
    3 .
    run ;
     
    data exemple1 (drop=temp lag_date);
    format lag_date ddmmyy8.;
    set exemple;
    retain temp;
    by id;
    lag_date=lag(date);
    if date =. and lag_date ne . then temp=lag_date;
    if date=. then date=temp;
    run;
    Cordialement

  3. #3
    Membre éclairé
    Homme Profil pro
    responsable adjoint service stat
    Inscrit en
    Mars 2009
    Messages
    448
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France

    Informations professionnelles :
    Activité : responsable adjoint service stat
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2009
    Messages : 448
    Points : 823
    Points
    823
    Par défaut
    Je me demande si tu ne te compliques pas la vie en utilisant conjointement du "lag" et du "retain".
    Voici une solution uniquement basée sur le retain, où je remplace date par date_retain (qu'on pourrait renommer en date si besoin)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    data exemple1 (drop = date);   
        format date_retain ddmmyy8. ;
        set exemple ;
        by id ;         
        retain date_retain ;
        if not missing(date) then date_retain = date ;
    run ;

  4. #4
    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
    Une solution plus courte avec UPDATE :
    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
     
    data exemple;
    infile datalines;
    input GMT_Offset$  first_date ddmmyy10.;
    format first_date ddmmyy10.;
    datalines;
    +0 21/12/2012
    +0 21/12/2012
    +0 21/12/2012
    +0 21/12/2012
    +0 .		 
    +0 .		 
    +0 .		 
    +0 .		 
    -5 09/01/2013
    -5 09/01/2013
    -5 09/01/2013
    -5 09/01/2013
    -5 .		 
    -5 .		 
    -5 .		 
    -5 .		 
    ;	
     
    data exemple_1;
       update exemple (obs=0) exemple ;
       by GMT_Offset;
       output;
    run;
    Cordialement
    Ward

  5. #5
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2014
    Messages
    55
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2014
    Messages : 55
    Points : 61
    Points
    61
    Par défaut
    Merci pour vos réponses, ça répond à mon besoin

    Bonne journée à tous.

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

Discussions similaires

  1. Remplacement des champs vides par une valeur N/A
    Par dandy87 dans le forum SSIS
    Réponses: 2
    Dernier message: 18/04/2013, 09h58
  2. Réponses: 7
    Dernier message: 15/06/2011, 11h26
  3. Réponses: 2
    Dernier message: 13/08/2009, 09h24
  4. Réponses: 5
    Dernier message: 13/12/2006, 16h08
  5. Réponses: 14
    Dernier message: 25/09/2006, 13h03

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