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 :

Retain sur des données longitudinales


Sujet :

SAS Base

  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2011
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Santé

    Informations forums :
    Inscription : Mars 2011
    Messages : 7
    Points : 3
    Points
    3
    Par défaut Retain sur des données longitudinales
    Bonjour,

    j'ai un problème avec le RETAIN. voici un exemple de mes données :

    patient date taille
    10 01/01/2000 120
    10 01/01/2001 121
    10 02/05/2002 124
    10 05/06/2003 128
    11 01/02/1999 88
    11 05/05/2000 90
    .
    .

    ma question est comment calculés la différence du taille pour chaque patient entre la date de consultation et la date précédente .
    on m'a dit de faire avec un RETAIN mais je n'arrive pas.

    merci de votre réponse

  2. #2
    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
    Tu peux utiliser la fonction 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
    16
    17
    18
    DATA TEST;
    input patient$ date ddmmyy10. taille ;
    cards;
    10 01/01/2000 120
    10 01/01/2001 121
    10 02/05/2002 124
    10 05/06/2003 128
    11 01/02/1999 88
    11 05/05/2000 90
    run;
     
    data test;
    set test;
    format date ddmmyy10.;
    taille2=lag(taille);
    if _n_=1 then diff=taille;
    else diff=abs(taille-taille2);
    run;
    Avec une clause by, tu te débrouilles à faire la différence par patient

  3. #3
    Membre chevronné
    Homme Profil pro
    Biostatisticien
    Inscrit en
    Juin 2009
    Messages
    1 206
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Irlande

    Informations professionnelles :
    Activité : Biostatisticien
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Juin 2009
    Messages : 1 206
    Points : 1 868
    Points
    1 868
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    DATA TEST;
    input PATIENT$ DATE ddmmyy10. TAILLE ;
    cards;
    10 01/01/2000 120
    10 01/01/2001 121
    10 02/05/2002 124
    10 05/06/2003 128
    11 01/02/1999 88
    11 05/05/2000 90
    run;
    deux cas de figure:
    1/ tu veux mesurer la différence, pour chaque patient, le différence entre une observation et sa suivante: le lag semble mieux convenir comme le dit Brice, avec un by. Le lag permet de retenir la valeur d'une variable d'une ligne à l'autre. Il faut réinitialiser à chaque patient.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    DATA TEST2;
    SET TEST;
    BY PATIENT;
    TAILLE2=lag(TAILLE);
    IF first.PATIENT then DIFF=0;
    else DIFF=TAILLE-TAILLE2;
    run;
    2/ Tu veux mesurer la différence avec la première observation de chaque patient: utilise le retain (attention aux valeurs manquantes..):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    data TEST3;
    set TEST;  
    by PATIENT;
    if first.PATIENT 
    	then TAILLEDB=TAILLE;
    retain TAILLEDB;
    DIFF=TAILLE-TAILLEDB;
    run;

  4. #4
    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
    +1 Manoutz

  5. #5
    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
    Citation Envoyé par rimad Voir le message
    Bonjour,

    j'ai un problème avec le RETAIN. voici un exemple de mes données :

    patient date taille
    10 01/01/2000 120
    10 01/01/2001 121
    10 02/05/2002 124
    10 05/06/2003 128
    11 01/02/1999 88
    11 05/05/2000 90
    .
    .

    ma question est comment calculés la différence du taille pour chaque patient entre la date de consultation et la date précédente .
    on m'a dit de faire avec un RETAIN mais je n'arrive pas.

    merci de votre réponse

    Ayez la politesse de dire merci quand les gens vous consacrent 5mn de leur temps de travail.
    Bonne journée

  6. #6
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2011
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Santé

    Informations forums :
    Inscription : Mars 2011
    Messages : 7
    Points : 3
    Points
    3
    Par défaut
    bonjour excusez moi du retard car je n'étais plus sur le forum j'avais trouvé cette solution sur une autres forum du coup je ne suis pas revenu !!
    merci pour votre réponse !! et encore désolé !!

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

Discussions similaires

  1. Réponses: 16
    Dernier message: 14/04/2006, 19h38
  2. Parsing XML gestion DB I/O sur des données de type CLOB
    Par stchitembo dans le forum Oracle
    Réponses: 5
    Dernier message: 22/03/2006, 12h14
  3. Réponses: 12
    Dernier message: 02/01/2006, 23h13
  4. Réponses: 5
    Dernier message: 13/07/2005, 11h03
  5. Travailler sur des données qui doivent être triées
    Par haypo dans le forum XML/XSL et SOAP
    Réponses: 2
    Dernier message: 19/07/2003, 18h13

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