Précédent   Forum des professionnels en informatique > Logiciels > Solutions d'entreprise > Business Intelligence > SAS > SAS Base
SAS Base Forum d'entraide sur SAS base : étape data, procédures non statistiques, procédures non graphiques, SQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 15/03/2011, 16h51   #1
Invité de passage
 
Homme
Étudiant
Inscription : 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 : 0
Points : 0
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
rimad est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/03/2011, 17h00   #2
Membre Expert
 
Avatar de MEGAMIND2
 
Homme Brice Beare
Paris
Inscription : janvier 2011
Messages : 956
Détails du profil
Informations personnelles :
Nom : Homme Brice Beare
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Paris

Informations forums :
Inscription : janvier 2011
Messages : 956
Points : 1 366
Points : 1 366
Tu peux utiliser la fonction lag

Code :
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
MEGAMIND2 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/03/2011, 18h03   #3
Membre Expert
 
Homme
Biostatisticien
Inscription : juin 2009
Messages : 1 143
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Irlande

Informations professionnelles :
Activité : Biostatisticien
Secteur : Industrie Pharmaceutique

Informations forums :
Inscription : juin 2009
Messages : 1 143
Points : 1 760
Points : 1 760
Code :
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 :
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 :
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;
Manoutz est déconnecté   Envoyer un message privé Réponse avec citation 20
Vieux 15/03/2011, 19h52   #4
Membre Expert
 
Avatar de MEGAMIND2
 
Homme Brice Beare
Paris
Inscription : janvier 2011
Messages : 956
Détails du profil
Informations personnelles :
Nom : Homme Brice Beare
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Paris

Informations forums :
Inscription : janvier 2011
Messages : 956
Points : 1 366
Points : 1 366
+1 Manoutz
MEGAMIND2 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/03/2011, 09h15   #5
Membre Expert
 
Avatar de MEGAMIND2
 
Homme Brice Beare
Paris
Inscription : janvier 2011
Messages : 956
Détails du profil
Informations personnelles :
Nom : Homme Brice Beare
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Paris

Informations forums :
Inscription : janvier 2011
Messages : 956
Points : 1 366
Points : 1 366
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
MEGAMIND2 est déconnecté   Envoyer un message privé Réponse avec citation 01
Vieux 06/04/2011, 17h24   #6
Invité de passage
 
Homme
Étudiant
Inscription : 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 : 0
Points : 0
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é !!
rimad est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 18h49.


 
 
 
 
Partenaires

Hébergement Web