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 SAS


Sujet :

SAS Base

  1. #1
    Futur Membre du Club
    Femme Profil pro
    Inscrit en
    Septembre 2013
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2013
    Messages : 6
    Points : 7
    Points
    7
    Par défaut Fonction LAG SAS
    Bonjour,

    J'ai une question concernant la fonction Lag en SAS.

    J'ai une table de la forme

    indic date
    1 12/12/12
    1 12/12/12
    2 15/02/13
    2 15/02/13
    3 15/06/13
    4 22/08/13
    4 22/08/13
    5 22/08/13

    Il ne s'agit pas de doublons, j'ai d'autres variables qui complètent cette table.
    Je souhaiterais obtenir la date précédente pour chaque valeur différente de la variable indic. La table serait de la forme :
    indic date mavar
    1 12/12/12 .
    1 12/12/12 .
    2 15/02/13 12/12/12
    2 15/02/13 12/12/12
    3 15/06/13 15/02/13
    4 22/08/13 15/06/13
    4 22/08/13 15/06/13
    5 22/08/13 16/06/13

    Avec la fonction lag, je réalise le programme suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    DATA test1;
    SET test;
    BY indic;
    IF first.indic then mavar=lag(date);
    ELSE mavar=lag(date);
    run;
    Ce programme me donne uniquement la date précédente pour la première ligne de groupe d'observations.
    J'ai tenté de le faire en deux temps mais cela ne fonctionne pas.

    Savez-vous comment procéder ?

  2. #2
    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
    Hello

    J'évite autant que faire se peut la fonction lag(), et préfère utiliser des retain

    Voici un code pour générer ta table d'exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    data TEST ;
        attrib indic length = 3 ;
        attrib date  length = 6 format = ddmmyy10. ;
        indic = 1 ; date = mdy(12,12,2012) ; output ; output ;  
        indic = 2 ; date = mdy(02,15,2013) ; output ; output ;
        indic = 3 ; date = mdy(06,15,2013) ; output ;         
        indic = 4 ; date = mdy(06,16,2013) ; output ; output ; 
        indic = 5 ; date = mdy(08,22,2013) ; output ;
    run ;
    Et voici un sort puis une étape data avec un retain qui donne la solution voulue :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    proc sort data = TEST ; by indic ; run ; 
    data TEST2 ;
        set TEST ;
        by indic ; 
        attrib mavar length = 6 format = ddmmyy10. ;
        retain date_indic_prec ; drop date_indic_prec ;
        mavar = date_indic_prec ;
        if last.indic /* indique qu'on passe à la valeur d'indic suivante */
            then date_indic_prec = date ;
    run ;
    Si tu n'es pas habitué aux retain, prend une feuille et un crayon pour comprendre ce qui se passe... et une aspirine si besoin !

  3. #3
    Membre éclairé

    Femme Profil pro
    SAS FRANCE - Support Clients France et Europe
    Inscrit en
    Février 2010
    Messages
    289
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : SAS FRANCE - Support Clients France et Europe
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2010
    Messages : 289
    Points : 886
    Points
    886
    Par défaut
    Bonjour,

    je pense qu'il manque juste un retain, pour être sûr qu'un même BY accède bien à la même ligne.

    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
     
    data data1;
    attrib date informat=ddmmyy8. format=ddmmyy8. ;
    input indic $1. date ;
    cards ;
    1 12/12/12
    1 12/12/12
    2 15/02/13
    2 15/02/13
    3 15/06/13
    4 22/08/13
    4 22/08/13
    5 22/08/13
    ;run ;
     
    DATA data2 ;
    retain mavar 0 ;
    attrib mavar informat=ddmmyy8. format=ddmmyy8. ;
    SET data1;
    BY indic;
    IF first.indic then mavar=lag(date);
    run;
    Cordialement,
    Géraldine Cade
    Support Clients SAS
    Cordialement,

    --
    Géraldine CADE-DESCHAMPS
    Consultante ▪ Support Clients SAS
    Tel: +33 1 60 62 12 12 ▪ support@sas.com
    www.sas.com/france
    SAS® … THE POWER TO KNOW®

  4. #4
    Futur Membre du Club
    Femme Profil pro
    Inscrit en
    Septembre 2013
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2013
    Messages : 6
    Points : 7
    Points
    7
    Par défaut
    Merci beaucoup pour vos réponses !
    je viens de tester la réponse de Géraldine et ça fonctionne parfaitement.
    Merci beaucoup

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

Discussions similaires

  1. Complément fonction LAG SAS
    Par Lorinlo dans le forum SAS Base
    Réponses: 2
    Dernier message: 31/10/2013, 10h01
  2. Correspondance fonction split sas
    Par Tyler Durden dans le forum SAS Base
    Réponses: 3
    Dernier message: 07/05/2008, 15h37
  3. Doublons avec fonction lag
    Par aurelie83 dans le forum SQL
    Réponses: 0
    Dernier message: 16/11/2007, 12h46
  4. Fonctions LAG et LEAD
    Par Nounoursonne dans le forum Oracle
    Réponses: 8
    Dernier message: 16/10/2007, 10h49
  5. fonction LAG et erreur PLS-00103. Oracle 8i
    Par henrirobert dans le forum Oracle
    Réponses: 7
    Dernier message: 26/05/2005, 16h03

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