|
Publicité ' | ||||||||||||||||||||||||
|
|
#1 | ||
|
Invité de passage
![]() Inscription : juin 2011 Messages : 3 ![]() |
Bonjour
je débute sous sas et je voudrais réaliser une petite procédure qui me paraissait simple à réaliser mais qui est en train de me rendre dingue... Voici mon problème : j'ai une table de donnée avec des doublons, une ligne = 1 patient, toutes les valeurs des variables sont identiques sauf une variable date. J'aimerais ne garder qu'une seule ligne par patient , celle avec la date la plus récente. de plus mes dates s'affichent dans la table 19270215 (format best12.), la procedure que j'utilise habituellement pour afficher 15/02/1927 ne marche pas Code :
Quelqu’un aurait-il la formule magique pour tous ces problemes ? merci infiniment. |
||
|
|
00
|
|
|
#2 |
![]() ![]() Samir SELMANEConsultant en Business Intelligence Inscription : février 2011 Messages : 1 006 ![]() |
Hello,
Pas de formule magique mais du code SAS, Ton problème tu peux le scinder en deux problèmes. 1 celui des transformation des dates. 2 celui de select , retain, by de l'étape data. Donnes un exemple de donnée. On essaiera de t'aider. |
|
|
00
|
|
|
#3 | ||
|
Membre Expert
![]() ![]() Brice BeareParis Inscription : janvier 2011 Messages : 956 ![]() |
Pour garder le dernier enrégistrement par patient, faut proceder comme ceci:
Code :
|
||
|
|
00
|
|
|
#4 |
![]() ![]() Samir SELMANEConsultant en Business Intelligence Inscription : février 2011 Messages : 1 006 ![]() |
pour les dates in faut qu'il combine, put , substr, et la fonction MDY.
|
|
|
00
|
|
|
#5 |
|
Membre Expert
![]() ![]() Brice BeareParis Inscription : janvier 2011 Messages : 956 ![]() |
Visiblement la variable date est déjà en numérique donc pas besoin de faire un substr, mdy et autres, il suffit juste d'appliquer un de ces formats:
ddmmyy10. ou date9. |
|
|
00
|
|
|
#6 |
![]() ![]() Samir SELMANEConsultant en Business Intelligence Inscription : février 2011 Messages : 1 006 ![]() |
je crois que sa correspond au 15 février 1927
![]() qu'il nous donne un exemple de données. puis la proc sort il faut trier par le patient et la date je crois non ?
|
|
|
00
|
|
|
#7 |
|
Membre Expert
![]() ![]() Brice BeareParis Inscription : janvier 2011 Messages : 956 ![]() |
Oui c'est ça, merci!
|
|
|
00
|
|
|
#8 | ||
![]() ![]() Samir SELMANEConsultant en Business Intelligence Inscription : février 2011 Messages : 1 006 ![]() |
Code :
tu peux appliquer la méthode à brice . sinon la proc sort et une proc rank. |
||
|
|
00
|
|
|
#9 | ||
|
Invité de passage
![]() Inscription : juin 2011 Messages : 3 ![]() |
Merci de vos reponses.
je vais essayer d'etre plus clair. On va dire que mon fichier contient les données suivantes : id_patient : numero d'identifiant dtnaiss : date de naissance dtsuiv : date de dernier suivi. Dans la table de données que j'ai sous SAS les dates ont cette "aspect" dtnaiss : 19540822 (soit 22/08/1957) en allant dans attribut de colonne voila les informations que j'ai : name : dtnaiss label : dtnaiss length : 8 format : BEST12 informat : 12. si j’utilise la procédure suivante Code :
name : dtnaiss label : dtnaiss length : 8 format : DDMMYY informat : 10. mais dans la table , cela s'affiche toujours comme cela 19540822. Et je ne pense pas qu'il le considère comme une date car si je calcul le délai entre dtnaiss et dtsuiv j'obtiens 140 ans... Ensuite pour mon autre problème. Dans mon fichier j'ai des doublons. Je peux avoir plusieurs lignes pour un même id_patient. la seul variable qui diffère est dtsuiv id_patient = 01 ; dtnaiss=19250213 ; dtsuivi=20050415 id_patient = 01 ; dtnaiss=19250213 ; dtsuivi=20070812 je souhaiterais éliminer du fichier les lignes avec la date la plus ancienne, et conserver les lignes avec les dates les plus recentes. une des solutions que j'envisageait était de dire que pour chaque ligne ou id_patient avait la même valeur dtsuivi prenait la valeur maximal. si je reprend mon exemple : id_patient = 01 ; dtnaiss=19250213 ; dtsuivi=20050415 id_patient = 01 ; dtnaiss=19250213 ; dtsuivi=20070812 devenait: id_patient = 01 ; dtnaiss=19250213 ; dtsuivi=20070812 id_patient = 01 ; dtnaiss=19250213 ; dtsuivi=20070812 et je supprime une des lignes avec une procedure de gestion des doublons que l'on peut trouver facilement sur internet... mais je ne trouve pas comme rédiger la procedure de modification de valeur des dates. J'espere que j'ai ete plus comprehensible... |
||
|
|
00
|
|
|
#10 |
![]() ![]() Samir SELMANEConsultant en Business Intelligence Inscription : février 2011 Messages : 1 006 ![]() |
Pour commencer , tes problèmes de dates.
As tu essayé d'appliquer le code que je t'ai donné ? car c'est exactement ce que tu dois faire. Pour ton deuxième problème. Le mieux pour nous les utilisateurs et autres , c'est que t'ouvres un autre topic ( poste). |
|
|
00
|
|
|
#11 | ||||
|
Membre Expert
![]() ![]() Brice BeareParis Inscription : janvier 2011 Messages : 956 ![]() |
Je pense que 19540822 est trop grand pour une date, tu constateras que pour 19540, il attribue bien le format.
Code :
Pour le deuxième point, je t'avais proposé ça: Code :
|
||||
|
|
00
|
|
|
#12 |
![]() ![]() Samir SELMANEConsultant en Business Intelligence Inscription : février 2011 Messages : 1 006 ![]() |
je voie
|
|
|
00
|
|
|
#13 | ||
|
Membre Expert
![]() Biostatisticien Inscription : juin 2009 Messages : 1 143 ![]() |
les dates sous sas sont des nombres, auquel on applique un format. Suivant le parmetrage, si ta variable a pour valeur 1 et un format de date (comme ddmmyy10.), ta table affichera premier janvier, si elle a pour valeur 2, elle affichera 2 janvier, etc.
Comme le disait sam, il faut utiliser la fonction mdy, mais comme ta variable est de TYPE numerique, il faut modifier un peu l'approche.. par exemple: Code :
|
||
|
|
00
|
|
|
#14 |
|
Membre Expert
![]() ![]() Brice BeareParis Inscription : janvier 2011 Messages : 956 ![]() |
Salut Manoutz,
Comment isoler le jour, mois et l'année à partir de 19540822 ? |
|
|
00
|
|
|
#15 | ||||
|
Nouveau Membre du Club
![]() Gaëtan Inscription : avril 2011 Messages : 29 ![]() |
Pour ton problème de date le problème c que tu modifies le FORMAT et pas le INFORMAT, essaye ça pour voir :
Code :
Code :
|
||||
|
|
00
|
|
|
#16 |
|
Membre Expert
![]() Biostatisticien Inscription : juin 2009 Messages : 1 143 ![]() |
@MGMD: tout est dans mon code. C'est une question d'unites. Pour les annees les unites sont d'unite 10000, les mois 100, et les jours 1
Le reste c'est juste du jonglage. on egalement recuperer le "reste" avec la fonction mod. |
|
|
00
|
|
|
#17 | ||
|
Membre Expert
![]() ![]() Brice BeareParis Inscription : janvier 2011 Messages : 956 ![]() |
Moi je dirais que ce chiffre est trop grand pour être considéré comme une date par SAS.
regarde sur cet exemple Code :
|
||
|
|
00
|
|
|
#18 |
|
Membre Expert
![]() Biostatisticien Inscription : juin 2009 Messages : 1 143 ![]() |
lance mon code pour te prouver du contraire
|
|
|
00
|
|
|
#19 | ||
|
Invité de passage
![]() Inscription : juin 2011 Messages : 3 ![]() |
@sam
Desole mais je n'arrive pas a comprendre ta procedure... dans ton code à quoi correspond ma variable dtnaiss ? Code :
|
||
|
|
00
|
|
|
#20 |
|
Membre Expert
![]() ![]() Brice BeareParis Inscription : janvier 2011 Messages : 956 ![]() |
Désolé Manoutz et Sam, je viens de comprendre (j'ai considéré cette variable comme un nombre et non une suite de date).
La solution proposée par Sam est pas mal! @Guiom5210 var=dtnaiss dans le programme de Sam! |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com