我有类似的东西,它是.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;
但它失败了,这些条目包含多行,而且格式不正确。
有没有解决方案?
答案 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
了解更多详情。