0

我有一个平面文件(ACC 格式),每个观测值的 LrecL 为 8000,该文件有大约 30k 个观测值。当我使用 @ 和 Length 语句读取数据时,我能够正确读取第一条记录,但不能正确读取其余记录。这是我的代码:

Data InterA;
infile "\\server\Data\ABC.acc" lrecl =8764;

input
@   1   a 12.
@   548 b   4.
@   552 c   4.
@   556 d   4.
@   560 e   4.
@   585 f   3.
@   588 g   3.
.
.
.
.
.;
run;

我的问题是,如何读取整个文件?

提前致谢!

4

1 回答 1

2

与 LRECL 相关的企业指南没有什么特别之处,而 8000-9000 不足以解决与操作系统或类似问题相关的任何可能的特殊问题。

我怀疑您的问题与记录分隔符有关。最有可能的是,您期望 CR+LF(例如在 Windows 机器上),并且数据具有 LF(Unix)或类似的东西。或者,它没有记录分隔符。正在发生的事情是 SAS 认为您有一条非常非常长的线路,并且不知道您还有另一条线路;所以它在一次迭代后停止读取。

你可以通过几种方式来处理这个问题。

首先,在 INFILE 中,您有TERMSTR= 选项

infile "//whatever/whatever.dat" termstr=LF lrecl=8764;

其次,如果您的行是固定长度的(每一行都是相同的),那么使用RECFM=F强制 SAS 以正好 8764 的块读取它。

infile "//whatever/whatever.dat" recfm=f lrecl=8764;

如果有记录分隔符,则可能需要增加一个。如果没有记录分隔符,这是您需要的解决方案,但是,没有其他东西可以轻松地与您当前的代码一起使用。

于 2015-04-06T17:17:39.443 回答