使用SAS从文本中提取日期和时间

时间:2012-11-30 17:25:42

标签: full-text-search text-files sas

我有类似的东西,它是.txt格式。

  

'随机标题'

     

随机的事情,1月1日凌晨00:00

     

2005,555字,(英文)

     

'随机长标'

     

随机的事情,2005年1月1日00:00 AM,111字,

     

(英文)

需要以yyyymmdd和hhmm格式提取时间和日期。 我试着用逗号作为分隔符。

DATA News;
  INFILE 'C:xxxx/xxxx/xxxx' DLM',';
  INPUT Title $75. Time $10. Date $20. Words $15. Lang $10.;
PROC PRINT DATA=News;
  TITLE 'Time and Date';
  VAR Time Date;
RUN;

但它失败了,这些条目包含多行,而且格式不正确。

有没有解决方案?

1 个答案:

答案 0 :(得分:1)

如果您的日期始终如此格式化: 2005年1月1日凌晨00:00

然后你可以使用perl正则表达式来找到它们。

data test;
input @;
_prx = prxparse('/\d\d:\d\d (?:AM|PM), \d{1,2} (?:January|February|March) \d{4}/');
start = 1;
stop = length(_infile_);
call prxnext(_prx, start, stop, _infile_, position, length);
   do while (position > 0);
      found = substr(_infile_, position, length);
      put found= position= length=;
      call prxnext(_prx, start, stop, _infile_, position, length);
   end;
datalines;
'random title'
random things , 00:00 AM, 1 January
2005, 555 words, (English)
'random long title'
random things , 00:00 AM, 1 January 2005, 111 words,
(English)
;;;;
run;

然后像使用SAS字符变量一样使用FOUND值来获取日期和时间或日期时间信息。显然,将我的短名单延长至包含所有十二个月。

找到第二个例子,但不是第一个例子(在一个例子中使用datalines是不合理的);但是如果您不使用数据,而是使用文本文件,则可以操作记录格式以删除换行符和回车符,从而将两者视为单个记录(从而匹配)。请查看RECFM=N了解更多详情。