使用 SAS 从文本中解析时间

Parsing Time from text using SAS

对于其中包含日期和时间的数千条记录,我的文本长度最多为 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是常见的,我使用indexsubstr函数来解析时间。

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

对于第二行,我也得到了额外的字符,因为时间和 PM

之间没有 at 也没有 space

有什么有效的时间解析方法吗?

谢谢

SAS 可以使用具有捕获缓冲区的 Perl 正则表达式定位文本摘录。

data want(keep=parsed_timestring);
length parsed_timestring ;
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;

最后一行 parsed_timestring 是空白的,因为 6666.30PM 两个以上的数字开始 在单词边界上因此不会匹配模式和因此该行将没有适当的时间字符串。