Parsing 使用SAS解析文本的时间

Parsing 使用SAS解析文本的时间,parsing,sas,substr,Parsing,Sas,Substr,我有一个最大的200个字符的文本长度为数千条记录,其中有日期和时间。我正在努力分析时间 下面是我所看到的文本的示例 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 yo

我有一个最大的200个字符的文本长度为数千条记录,其中有日期和时间。我正在努力分析时间

下面是我所看到的
文本的示例

 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);
对于第二行,我还得到了额外的字符,因为在
处没有
,时间和PM之间也没有空格

有没有有效的方法来解析时间


感谢您,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;

在最后一行中,
parsed_timestring
为空,因为
6666.30PM
在单词边界上以两位数以上开始,因此与模式不匹配,因此该行没有正确的时间字符串