SAS EG LRECL限制?

时间:2015-04-06 16:32:29

标签: sas enterprise-guide

我有平面文件(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;

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

提前致谢!

1 个答案:

答案 0 :(得分:2)

与LRECL相关的企业指南没有什么特别之处,8000-9000不足以达到与OS或类似相关的任何可能的特殊问题。

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

你可以通过以下几种方式解决这个问题。

首先,在INFILE中,您拥有TERMSTR= option

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

其次,如果您的行具有固定长度(每行相同),则使用RECFM=F强制SAS以正好为8764的块读取它。

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

如果有记录分隔符,则可能需要加1。如果有 no 记录分隔符,这就是您需要的解决方案,但是,没有其他任何东西可以轻松使用您当前的代码。