2017-05-10 2 views
0

J'ai quelques datetime dans le jeu de données sous forme de chaînes laides.Convertir une chaîne laide en une date

Exemple: "Samedi 14 janvier 2017 00:00:00"

Je voudrais convertir en une date, par exemple 2017JAN14

Une solution plus simple puis descendant la route d'expression régulière?

Répondre

2

Si vous voulez exactement yyyymmmdd alors vous devrez créer votre propre format pour le faire, mais vous êtes heureux avec un builtin alors que ce qui suit devrait faire. Il suffit de passer le jour de la semaine et de convertir le reste en utilisant un informat:

data _null_; 
mytxtdate = "Saturday 14 Jan 2017 00:00:00"; 
mydate = input(compress(substr(mytxtdate,index(mytxtdate,' '))),date9.); 
format mydate yymmdd10.; 
put _all_; 
run; 

Ceci est certainement gênant. Je serais intéressé de savoir s'il existe un moyen de faire cela en un seul interlocuteur en utilisant moins de 4 fonctions de pas de données. La logique est ici:

  • Passez au premier espace en utilisant index.
  • Retirez tous les espaces de la chaîne à partir de ce moment-là à l'aide substr et compress
  • entrée comme date SAS en utilisant la date9. informat, qui se penchera sur seulement les 9 premiers caractères de la chaîne résultante et ignorer le reste.
+0

Votre code génère la date en tant que "2002-01-14", ce qui correspond à la mauvaise année. Le mois et la date vont bien? http://imgur.com/kjDaQ4z – AngryWhopper

+0

Correction! Je me demande s'il y a un moyen plus court? – user667489

+0

Cela a bien fonctionné. Je vous remercie! Je vais modifier avec et mettre à jour si je trouve quelque chose de plus court. – AngryWhopper