|
Publicité ' | ||||||||||||||||||||||||
|
|
#1 |
|
Invité régulier
![]() Inscription : avril 2011 Messages : 53 ![]() |
Bonjour,
Voici mon problème : J'ai une colonne avec des numéros de patients et leurs dates d'admission. Je voudrais créer une colonne qui dise si le patient était déjà venu auparavant. Dans ce cas, si oui alors la dernière colonne associée à la ligne aurait un 1 sinon un 0. Par ex (en supposant que le tableau a préalablement été trié en fonction du numpat grâce à une proc sort) : numpat Date_Admission Deja_Existant 1 20/03/2004 0 2 20/03/2004 0 384 20/03/2004 0 1 21/04/2004 1 Voilà en gros ce que je voudrais obtenir. Mais comment y parvenir? On m'a dit de procéder de la façon suivante : - proc sort by numpat - retain (je ne sais pas comment l'utiliser ici) - boucle. Merci d'avance. |
|
|
00
|
|
|
#2 | ||
|
Membre Expert
![]() Biostatisticien Inscription : juin 2009 Messages : 1 143 ![]() |
Et cette méthode ne te convient pas?
Je propose une autre piste via la proc sql, ou je pense tout peut être géré en une seule étape: dans le select, comparer le si min(date)<= date et renvoyer 1 si C'est le cas, 0 sinon (faire la comparaison par patient). Attention aux valeurs manquantes. solution (non testée): Code :
|
||
|
|
00
|
|
|
#3 |
|
Invité régulier
![]() Inscription : avril 2011 Messages : 53 ![]() |
Oui cela a fonctionné! Mais bon sql n'a jamais été mon fort!
Merci beaucoup! Tant que j'y suis : si je veux faire la même chose mais voir si le patient a été admis 8 jours avant, comment faire pour modifier le programme? En gros (retranscription d'excel) Code :
Si (numpat i +1 = numpat alors si date_adm i +1 <= date_adm alors 1 sinon 0) sinon 0) |
|
|
00
|
|
|
#4 |
|
Invité régulier
![]() Inscription : avril 2011 Messages : 53 ![]() |
Ps : j'ai oublié les i après les numpat et date_decision
|
|
|
00
|
|
|
#5 | ||
|
Membre Expert
![]() Biostatisticien Inscription : juin 2009 Messages : 1 143 ![]() |
si je comprends bien tu veux tester si le patient à été admis il y a au moins 8 jours (?)
Code :
|
||
|
|
00
|
|
|
#6 |
|
Invité régulier
![]() Inscription : avril 2011 Messages : 53 ![]() |
Pardon, j'ai écrit n'importe quoi dans le message précédent!
Voici la formule Excel : Avec C = Numéro du patient et D = Date d'admission Oui c'est savoir si le patient a déjà été admis dans les 8 jours qui ont précédé la nouvelle admission. |
|
|
00
|
|
|
#7 |
|
Membre Expert
![]() Biostatisticien Inscription : juin 2009 Messages : 1 143 ![]() |
Evite les formules excel, c'est plus simple de formaliser ton problème par écrit.
Mon code te renvoie 1 pour la nouvelle variable s'il à été admis il y a 8 jours ou plus. Quand à sql, je ne peux que te le conseiller, la syntaxe est simple pour qui s'y penche. Tu devrais t'en sortir facilement. |
|
|
00
|
|
|
#8 |
|
Invité régulier
![]() Inscription : avril 2011 Messages : 53 ![]() |
Le code devrait renvoyé 0 dans ce cas là, et si l'ancienne admission est inf ou égale à 8jours alors 1.
|
|
|
00
|
|
|
#9 |
|
Membre Expert
![]() Biostatisticien Inscription : juin 2009 Messages : 1 143 ![]() |
Donc tu ferais comment? En connectant tes neurones tu vas y arriver
|
|
|
00
|
|
|
#10 |
|
Invité régulier
![]() Inscription : avril 2011 Messages : 53 ![]() |
Oui je crois ^^ Mais mon cerveau est fatigué xd
|
|
|
00
|
|
|
#11 |
|
Invité régulier
![]() Inscription : avril 2011 Messages : 53 ![]() |
Voilà, j'ai modifié le programme lequel fonctionne à l'exception de quelque chose : si c'est la première admission alors il devrait y avoir un 0 et non pas un 1 ... Sas considère le contraire.
Je peux ajouter une clause d'exception? Et si oui, par quel moyen?? |
|
|
00
|
|
|
#12 | |||
|
Membre Expert
![]() Biostatisticien Inscription : juin 2009 Messages : 1 143 ![]() |
C'est normal.
tu me dis: Citation:
Je suppose que tu veux les dates comprises entre 1 et 7 jours de la première admission. essaye ca: Code :
|
|||
|
|
00
|
|
|
#13 |
|
Invité régulier
![]() Inscription : avril 2011 Messages : 53 ![]() |
Voilà c'est ça, il faut exclure la première admission.
Je teste et je te dis |
|
|
00
|
|
|
#14 |
|
Invité régulier
![]() Inscription : avril 2011 Messages : 53 ![]() |
Non il y a un souci. Certaines obs où je devrais avoir un 1 marquent 0...
|
|
|
00
|
|
|
#15 |
|
Membre Expert
![]() Biostatisticien Inscription : juin 2009 Messages : 1 143 ![]() |
|
|
|
00
|
|
|
#16 |
|
Invité régulier
![]() Inscription : avril 2011 Messages : 53 ![]() |
Et bien là j'ai changé le LT en LE, ca arrange vite fait les choses mais bon c'est pas normal. Voilà une ébauche de ce que je cherche à obtenir :
numpat Date_Adm 8j 1 28FEB2009 0 2 05JUN2005 0 3 22JAN2008 0 4 09APR2004 0 4 09JUL2006 0 4 10JUL2006 1 4 04DEC2006 0 4 07DEC2006 1 4 28FEB2008 0 4 28MAY2009 0 5 01JUL2008 0 5 04JUL2008 1 |
|
|
00
|
|
|
#17 | ||
|
Invité régulier
![]() Inscription : avril 2011 Messages : 53 ![]() |
Voilà ce que j'obtiens à la dernière colonne avec la formule :
Code :
Deja_Existant8j 0 0 0 0 0 0 0 0 0 0 0 1 |
||
|
|
00
|
|
|
#18 | ||
|
Membre Expert
![]() Biostatisticien Inscription : juin 2009 Messages : 1 143 ![]() |
on va récuperer la date d'entrée par patient. C'est peut être le codage (min(date)<date<(min(date)+8)) qui marche pas.
Code :
|
||
|
|
00
|
|
|
#19 | ||
|
Membre Expert
![]() Biostatisticien Inscription : juin 2009 Messages : 1 143 ![]() |
C'est peut être un soucis de parenthèses:
Code :
|
||
|
|
00
|
|
|
#20 |
|
Invité régulier
![]() Inscription : avril 2011 Messages : 53 ![]() |
Alors cela n'a rien changé à la variable test8j qui est exactement = à test8j_2
Et une variable mindate s'est créée avec les valeurs numériques correspondant à la date du jour je suppose? C'est le M.... |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com