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 :

Fonction lag et valeurs manquantes


Sujet :

SAS Base

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2011
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 22
    Points : 7
    Points
    7
    Par défaut Fonction lag et valeurs manquantes
    Bonjour

    Voici le genre de table dont je dispose :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    data test;
    input id $ code $;
    datalines ;
    1 1235
    2  .  
    3  .  
    4 0123
    5  .  
    6  .  
    7  .  
     ;
     run;
    J'aimerai remplacer les valeurs manquantes par le code qui se trouve au dessus et ceci jusque la prochaine valeur de code renseignée.

    Voici l'illustration sur la table crée précédemment :

    1 1235
    2 1235
    3 1235
    4 0123
    5 0123
    6 0123
    7 0123

    J'ai pensé à utiliser la fonction lag mais je rencontre quelques problèmes.
    Est ce que quelqu'un a une idée??
    Pour info j'utilise SAS 9 sur server!!

    Merci d'avance

  2. #2
    Expert confirmé
    Avatar de olivier.decourt
    Homme Profil pro
    Formateur R/SAS/statistiques
    Inscrit en
    Avril 2008
    Messages
    2 064
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France

    Informations professionnelles :
    Activité : Formateur R/SAS/statistiques
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 064
    Points : 4 478
    Points
    4 478
    Par défaut
    Bonsoir.
    J'aurais utilisé un RETAIN plutôt qu'un LAG.
    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 (drop=memoire) ;
    input id $ code $;
    retain memoire ;
    if not missing(code) then memoire=code ;
    else code=memoire ;
    datalines ;
    1 1235
    2 .
    3 .
    4 0123
    5 .
    6 .
    7 .
    ;
    run;
    Olivier

  3. #3
    Membre expérimenté
    Avatar de MEGAMIND2
    Homme Profil pro
    Paris
    Inscrit en
    Janvier 2011
    Messages
    1 029
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Paris

    Informations forums :
    Inscription : Janvier 2011
    Messages : 1 029
    Points : 1 489
    Points
    1 489
    Par défaut
    Beau gosse

  4. #4
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2011
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 22
    Points : 7
    Points
    7
    Par défaut
    Merci beaucoup Olivier.

    Bonne journée

  5. #5
    Expert confirmé
    Avatar de olivier.decourt
    Homme Profil pro
    Formateur R/SAS/statistiques
    Inscrit en
    Avril 2008
    Messages
    2 064
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France

    Informations professionnelles :
    Activité : Formateur R/SAS/statistiques
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 064
    Points : 4 478
    Points
    4 478
    Par défaut
    En SAS 9 il y avait plus "élégant" (pour la note artistique), avec la fonction COALESCE plutôt que IF/ELSE. Mais le RETAIN reste indispensable puisqu'il assure la mémorisation de la dernière valeur non manquante.
    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
    DATA test (DROP=memoire) ;
    input id $ code $;
    retain memoire ;
     memoire = COALESCE(code,memoire) ;
     code = COALESCE(code,memoire) ;
    datalines ;
    1 1235
    2 .
    3 .
    4 0123
    5 .
    6 .
    7 .
    ;
    run;
    proc print ;
    run ;

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

Discussions similaires

  1. Valeurs manquantes et fonction lag
    Par Emeline_ dans le forum SAS Base
    Réponses: 1
    Dernier message: 17/01/2012, 11h26
  2. Fonctions LAG et LEAD
    Par Nounoursonne dans le forum Oracle
    Réponses: 8
    Dernier message: 16/10/2007, 10h49
  3. fonction retournant une valeur
    Par ryan dans le forum ASP
    Réponses: 4
    Dernier message: 06/09/2004, 17h45
  4. Pb pour créer un ID en fonction de la valeur d'un champ....
    Par zouzou.net dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 26/03/2004, 11h11
  5. Recherche fonctions rendant la valeur
    Par Bertrand_Collet dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 26/11/2002, 12h05

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