Время разбора текста с использованием SAS - PullRequest
1 голос
/ 20 февраля 2020

У меня есть максимум 200 символов текста для тысяч записей, в которых есть дата и время. Я пытаюсь разобрать время

Вот пример text, который у меня есть

 Your account your account your account on  Jan 10, 2020 at 8.30 AM ET your account
 Your account your account your account on  Jan 3, 2020 6.30PM ET your account
 Your account your account your account on  Jan 11, 2020 at 6.30PM ET your account

Желаемый вывод

   8.30 AM
   6.30PM
   6.30PM  

Во всем контенте ET встречается часто, и я использую функции index и substr для анализа времени.

   Time=substr(Text,index(Text,' on ')+19,6);

Во второй строке я также получаю дополнительные символы, поскольку at нет и нет времени между временем и часами

Есть ли эффективный способ для анализа времени?

Спасибо

1 Ответ

1 голос
/ 20 февраля 2020

SAS может найти фрагмент текста, используя регулярное выражение Perl с буфером захвата.

data want(keep=parsed_timestring);
length parsed_timestring $8;
input;

  /* Pattern:
   *   On a word boundary     \b
   *   Capture start          (
   *     1 or 2 digits        \d{1,2}
   *     A period             \.
   *     1 or 2 digits        \d{1,2}
   *     0 or 1 spaces        \s?
   *     letter A or P        (A|P)
   *     letter M             M
   *   Capture end            )
   */

  prx = prxparse('/\b(\d{1,2}\.\d{1,2}\s?(A|P)M)/x');

  if prxmatch (prx, _infile_) then 
    parsed_timestring = prxposn(prx,1,_infile_);

datalines;
Your account your account your account on  Jan 10, 2020 at 8.30 AM ET your account
 Your account your account your account on  Jan 3, 2020 6.30PM ET your account
 Your account your account your account on  Jan 11, 2020 at 6.30PM ET your account
 Your account your account your account on  Jan 11, 2020 at 6666.30PM ET your account
;

proc print;
run;

enter image description here

В последней строке parsed_timestring пусто, потому что 6666.30PM начинается с более двух цифр на границе слова и, следовательно, не соответствует шаблону и, следовательно, строка не будет иметь правильную строку времени.

...