2

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

'随机标题'

随机的事情,00:00 AM,1 月 1 日

2005 年,555 字,(英文)

'随机长标题'

随机的事情,00:00 AM,2005 年 1 月 1 日,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;

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

有什么解决办法吗?

4

1 回答 1

1

如果您的日期总是这样格式化: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更多详细信息。

于 2012-11-30T18:18:30.070 回答