如果您的日期总是这样格式化:00:00 AM,2005 年 1 月 1 日
然后您可以使用 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 值来获取日期和时间或日期时间信息。显然,将我的简短月份列表扩展为包含所有十二个月。
这找到了第二个示例,但不是第一个(在示例中使用数据线无法合理找到);但是,如果您不使用数据线,而是使用文本文件,则可以操纵记录格式以删除换行和回车,从而将两者视为单个记录(因此匹配)。查看RECFM=N
更多详细信息。