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 :

Lecture d'une date à partir d'un texte ???


Sujet :

SAS Base

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2012
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2012
    Messages : 5
    Par défaut Lecture d'une date à partir d'un texte ???
    Bonjour,

    Je suis coincé avec ce format de date,
    il y a quatre longueurs possibles de la chaîne de caractère suivant les cas. par exemple;

    Apr 26, 2012 12:56:44 PM /* De longueur (24) */

    May 5, 2012 2:35:57 PM /* De longueur (22) */

    Apr 26, 2012 3:42:25 PM /* De longueur (23) */

    May 6, 2012 12:04:28 PM /* De longueur (23) */

    Comment je peux transformer ça en date sachant que j'ai essayé avec substr mais j'ai un soucis au niveau de la longueur 23 car tantôt le jour contient 1 caractère tantôt c'est l'heure qui contient un caractère???

    - Un autre souci avec PM et AM!!
    Comment faire pour les enlever et garder une date cohérante?

    Merci d'avance.

  2. #2
    Membre confirmé
    Homme Profil pro
    SAS automation
    Inscrit en
    Juin 2011
    Messages
    87
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : SAS automation
    Secteur : Distribution

    Informations forums :
    Inscription : Juin 2011
    Messages : 87
    Par défaut
    Bonjour,

    Voici u code qui devrait t'aider il y a peut être plus simple, mais j'arrive à un affichage de la date et de l'heure au bon format

    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
    19
    20
    21
    22
    23
    24
    25
    26
    27
     
    data table_test;
    	input date_00 $30.;
    	datalines;
    Apr 26, 2012 12:56:44 PM
    May 5, 2012 2:35:57 PM
    Apr 26, 2012 3:42:25 PM
    May 6, 2012 12:04:28 PM
    ;
    run;
     
    data table_test_01;
    	set table_test;
    	format mois $3. jour $2. annee $4. heure_final tim8. jour_ok date9. ;
    	mois=UPCASE(scan(date_00,1,' '));
    	jour=reverse(substr(reverse(scan(date_00,2,' ')),2,2));
    	annee=scan(date_00,3,' ');
    	hhmmss=put(scan(date_00,4,' '),$8.);
    	heure=scan(hhmmss,1,':');
    	minute=scan(hhmmss,2,':');
    	seconde=scan(hhmmss,3,':');
    	indicateur=scan(date_00,5,' ');
    	If indicateur = 'PM' then heure_ok = heure+12; else heure_ok =heure;
    	heure_final=catx(':',heure_ok,minute,seconde);
    	jour_ok=jour||mois||annee;
    	keep jour_ok heure_final;
    run;

  3. #3
    Membre confirmé
    Homme Profil pro
    SAS automation
    Inscrit en
    Juin 2011
    Messages
    87
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : SAS automation
    Secteur : Distribution

    Informations forums :
    Inscription : Juin 2011
    Messages : 87
    Par défaut
    Voici uné étape data un peu modifiée qui permet d'avoir le format d'affichage en time8. et date9.

    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
     
    data table_test_01;
    	set table_test;
    	format mois $3. jour $2. annee $4. heure_final time8. jour_ok date9. ;
    	mois=UPCASE(scan(date_00,1,' '));
    	jour=reverse(substr(reverse(scan(date_00,2,' ')),2,2));
    	annee=scan(date_00,3,' ');
    	hhmmss=put(scan(date_00,4,' '),$8.);
    	heure=scan(hhmmss,1,':');
    	minute=scan(hhmmss,2,':');
    	seconde=scan(hhmmss,3,':');
    	indicateur=scan(date_00,5,' ');
    	If indicateur = 'PM' then heure_ok = heure+12; else heure_ok =heure;
    	heure_final=input(catx(':',heure_ok,minute,seconde),time8.);
    	jour_ok=input(jour||mois||annee,date9.);
    	keep jour_ok heure_final;
    run;

  4. #4
    Modérateur

    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Février 2011
    Messages
    1 625
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Février 2011
    Messages : 1 625
    Par défaut
    Hello,
    personellement , j'aurai fais quelque chose comme:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
     
    data test;
    format date NLDATE. heure tod5.;
    input date ANYDTDTE25. @13 heure  time10. ;
    cards;
    Apr 26, 2012 12:56:44 PM
    May 5, 2012 2:35:57 PM 
    Apr 26, 2012 3:42:25 PM
    May 6, 2012 12:04:28 PM 
    ;
    run;
    N'oubliez pas de consulter les FAQ SAS et les cours et tutoriels SAS
    N'oubliez pas de mettre votre message à si la solution donnée résout votre problème

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2011
    Messages
    97
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2011
    Messages : 97
    Par défaut
    J'ai essayé de comprendre ton code, Elcocco, et en partant du tiens j'ai fait ça :

    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
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    data table_test1;
    	set table_test;
    	d=scan(scan(date_00, 2, " "), 1, ",");
    	m=upcase(scan(date_00, 1, " "));
    	y=scan(date_00, 3, " ");
    	demi_journee=scan(date_00, 5, " ");
     
    	h=scan(scan(date_00, 4, " "), 1, ":");
    	if demi_journee="AM" then h=scan(scan(date_00, 4, " "), 1, ":");
    	if demi_journee="PM" then h=h+12;
    	min=scan(scan(date_00, 4, " "), 2, ":");
    	s=scan(scan(date_00, 4, " "), 3, ":");
     
    	if m="JAN" then m="01";
    	if m="FEB" then m="02";
    	if m="MAR" then m="03";
    	if m="APR" then m="04";
    	if m="MAY" then m="05";
    	if m="JUN" then m="06";
    	if m="JUL" then m="07";
    	if m="AUG" then m="08";
    	if m="SEP" then m="09";
    	if m="OCT" then m="10";
    	if m="NOV" then m="11";
    	if m="DEC" then m="12";
    	date1=put(dhms(mdy(m, d, y),h,min,s), datetime.);
    	date2=put(mdy(m, d, y), ddmmyy10.);
    	drop d m y h min s demi_journee;
    run;
    Ce code me convient mieux pour fixer plus facilement le format date et/ou heure de mon choix mais je pense que c'est parce que je n'ai pas l'habitude de jongler avec différents formats de dates (dans l'exemple là j'ai fixé datetime. et ddmmyy10. à la fin). Du coup j'avais deux questions :

    1) Existe-t-il une fonction quelconque qui permet de lier le mois en anglais sur trois lettres au numéro du mois dans l'année (et donc de passer de l'un à l'autre sans faire une série de "if") ?

    2) Comment se fait-il qu'il y ait des dates en AM/PM avec "12" en heure ???? Si je suis un jour confronté au problème, j'aurais aimé savoir ce qu'il fallait considérer... dans mon programme deux des enregistrements sont transformés en la date du lendemain ! Honnêtement je ne comprends pas la donnée donc je ne sais pas comment la traiter au niveau de la récupération du format date/heure

  6. #6
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2012
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2012
    Messages : 5
    Par défaut
    Salut,

    Merci d'avoir répondu si vite!.

    La solution de Samir me convient plus que les autres, sauf que j'ai un peu de mal à l'appliquer à ma table "date-time" qui existe déjà dans ma base. cela dit, pour des donnée introduites dans "l'input cards" ça marche parfaitement.

    Salut!!

  7. #7
    Modérateur

    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Février 2011
    Messages
    1 625
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Février 2011
    Messages : 1 625
    Par défaut
    Hello Picsouli,
    tes données en entrée previennent t-elles d'un fichier plat?
    tu pourra toujours guider le pointeur de SAS pour se positionner au bon endroit avec le @.
    t'as aussi:
    1- les deux point ( pour les longueurs variables.
    2- $varying.
    Je te laisses découvrir tout sa en cliquant sur F1 dans une session SAS et entrer
    INPUT statement, column.
    Bon courage.
    N'oubliez pas de consulter les FAQ SAS et les cours et tutoriels SAS
    N'oubliez pas de mettre votre message à si la solution donnée résout votre problème

  8. #8
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2012
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2012
    Messages : 5
    Par défaut
    Merci !!!

    Qu'entends-tu par fichier plat?
    c'est une Table sas importé d'excel!

    Aussi, j'essaie d'automatiser tout ça pour gagner du temps, je suis tjrs coincé!

  9. #9
    Modérateur

    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Février 2011
    Messages
    1 625
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Février 2011
    Messages : 1 625
    Par défaut
    sa ?
    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 var $40.;
    cards;
    Apr 26, 2012 12:56:44 PM
    May 5, 2012 2:35:57 PM 
    Apr 26, 2012 3:42:25 PM
    May 6, 2012 12:04:28 PM 
    ;
    run;
     
    data test1 (drop=var);
    format date_heure datetime25. date nldate. heure tod6.;
    set test ;
    	date_heure= input (var, anydtdtm25.);
    	date=datepart(date_heure);
    	heure=timepart(date_heure);
    run;
    N'oubliez pas de consulter les FAQ SAS et les cours et tutoriels SAS
    N'oubliez pas de mettre votre message à si la solution donnée résout votre problème

Discussions similaires

  1. Réponses: 8
    Dernier message: 12/02/2009, 16h20
  2. [VB.Net] Obtenir une date à partir d'un numero de semaine
    Par tonysky dans le forum Windows Forms
    Réponses: 4
    Dernier message: 03/01/2007, 08h57
  3. Réponses: 6
    Dernier message: 25/09/2006, 14h51
  4. trouver une date à partir d'un nombre de jours
    Par charlene44 dans le forum Delphi
    Réponses: 4
    Dernier message: 21/08/2006, 14h27
  5. [VB6]récupération d'une date à partir d'une calendrier
    Par fahmichebaane dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 03/04/2006, 16h40

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