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 01/06/2011, 14h43   #1
Invité de passage
 
Femme
Étudiant
Inscription : mai 2011
Messages : 17
Détails du profil
Informations personnelles :
Sexe : Femme

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : mai 2011
Messages : 17
Points : 1
Points : 1
Par défaut Comment récuperer la valeur suivante?

* Bonjour, *

Je m'explique. Je dispose de trois types dates : datedebut de traitement, datefin du traitement et d_sf12 (dalte à laquelle la patiente répond au questionnaire). Il s'agit de classe la date d_sf12 en fonction des deux autres.

Je ne suis pas une pro de sas mais j'aimerai écrire un code qui me les classent.

Voici ce que j'ai écris

Code :
1
2
3
4
5
DATA famille2 ;
SET sf12.famille2  ;
format date_sf12 ddmmyy10. ;
IF d_sf12 >= ddebut AND d_sf12=<ddfin then date_sf12 = d_sf12 ;
run ;
seulement je n'arrive pas écrire que cette condition n'est pas receptée, date_sf12 prenne la date suivante.
Exemple :

ddebut ddfin d_sf12 date_sf12
27/01/2001 09/12/2001 12/11/2001 --> 12/11/2001
05/12/2001 30/12/2001 26/12/2001 --> 26/12/2001
21/01/2002 07/12/2002 19/07/2002 --> 19/07/2002
03/02/2003 25/03/2003 13/01/2003 07/04/2003
03/02/2003 25/03/2003 07/04/2003

Je ne sais pas lui dire de prendre la valeur suivante.

* Merci *
Lilouche52 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/06/2011, 14h55   #2
Rédacteur
 
Homme Stéphane
Consultant et formateur SAS et Cognos
Inscription : avril 2009
Messages : 1 791
Détails du profil
Informations personnelles :
Nom : Homme Stéphane
Localisation : France, Yvelines (Île de France)

Informations professionnelles :
Activité : Consultant et formateur SAS et Cognos
Secteur : Conseil

Informations forums :
Inscription : avril 2009
Messages : 1 791
Points : 4 012
Points : 4 012
il ne sait pas prendre la valeur suivante mais précédente (fonction LAG). Donc c'est normal que tu n'y arrives pas par ce biais.
__________________
N'oubliez pas de cliquer sur lorsque votre problème est réglé !

Moteur de recherche dans les papiers SAS
datametric est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/06/2011, 15h02   #3
Modérateur
 
Homme Samir SELMANE
Consultant en Business Intelligence
Inscription : février 2011
Messages : 1 006
Détails du profil
Informations personnelles :
Nom : Homme Samir SELMANE
Localisation : France

Informations professionnelles :
Activité : Consultant en Business Intelligence
Secteur : Conseil

Informations forums :
Inscription : février 2011
Messages : 1 006
Points : 1 703
Points : 1 703
si c'est l'inverse de la fonction lag que tu cherches, regardes ce poste:

http://www.developpez.net/forums/d10...-sens-inverse/
s_a_m est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 06/06/2011, 15h53   #4
Invité de passage
 
Femme
Étudiant
Inscription : mai 2011
Messages : 17
Détails du profil
Informations personnelles :
Sexe : Femme

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : mai 2011
Messages : 17
Points : 1
Points : 1
J'ai regardé le lien mais je ne parviens pas à obtenir le résultat que je veux... Ca fait un moment que je suis dessus mais je ne vois pas comment faire
Lilouche52 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/06/2011, 16h34   #5
Candidat au titre de Membre du Club
 
Inscription : mars 2009
Messages : 34
Détails du profil
Informations personnelles :
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : mars 2009
Messages : 34
Points : 13
Points : 13
Si l'on regarde bien le code, on voit que le format de dat_sf12 est affecté DDMMYY10. ce qui est une bonne chose.

Mais vous êtes vous bien assuré du format des variables ddebut et ddfin ? Sont elles bien dans un format de date ?
Si tel est le cas, je ne vois aucune raison qui ferait qu'un test purement arithmétique (En sas, les dates sont des nombres...) ne donne pas le bon résultat.

Vous confirmez que les deux dates sont bien dans un format date ?
Bunzy est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/06/2011, 16h36   #6
Nouveau Membre du Club
 
Homme Gaëtan
Inscription : avril 2011
Messages : 29
Détails du profil
Informations personnelles :
Nom : Homme Gaëtan
Localisation : France

Informations forums :
Inscription : avril 2011
Messages : 29
Points : 26
Points : 26
Si tu as une clé pour trier ta table tu peux toujours tester le code suivant
(ici j'ai pris comme clé de tri ddebut ddfin d_sf12) :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
DATA test;
informat ddebut ddmmyy10. ddfin ddmmyy10. d_sf12 ddmmyy10.;
format ddebut ddmmyy10. ddfin ddmmyy10. d_sf12 ddmmyy10.;
input ddebut ddfin d_sf12 ;
datalines;
27/01/2001 09/12/2001 12/11/2001
05/12/2001 30/12/2001 26/12/2001
21/01/2002 07/12/2002 19/07/2002
03/02/2003 25/03/2003 13/01/2003
03/02/2003 25/03/2003 07/04/2003
;
run;
 
proc sort DATA=test out=test_inv;
BY descending ddebut descending ddfin descending d_sf12;
run;
 
DATA test_inv;
SET test_inv;
IF d_sf12 >= ddebut AND d_sf12=<ddfin then date_sf12 = d_sf12;
else date_sf12=lag(d_sf12); 
format date_sf12 ddmmyy10.;
run ; 
 
proc sort DATA=test_inv out=test_fin;
BY ddebut ddfin d_sf12;
run;
 
proc print DATA=test_fin;
run;
j'obtient le resultat suivant :

Code :
1
2
3
4
5
6
7
 
ddebut        ddfin         d_sf12        date_sf12
27/01/2001    09/12/2001    12/11/2001    12/11/2001
05/12/2001    30/12/2001    26/12/2001    26/12/2001
21/01/2002    07/12/2002    19/07/2002    19/07/2002
03/02/2003    25/03/2003    13/01/2003    07/04/2003
03/02/2003    25/03/2003    07/04/2003             .
boutchiwah est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



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


 
 
 
 
Partenaires

Hébergement Web