SAS EG LRECL 限制?
SAS EG LRECL Limit?
我有一个平面文件(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;
我的问题是,如何读取整个文件?
提前致谢!
与 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;
如果有记录分隔符,可能需要加一。如果没有 没有 记录分隔符,这就是您需要的解决方案,但是,没有其他任何东西可以轻松地使用您当前的代码。
我有一个平面文件(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;
我的问题是,如何读取整个文件?
提前致谢!
与 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;
如果有记录分隔符,可能需要加一。如果没有 没有 记录分隔符,这就是您需要的解决方案,但是,没有其他任何东西可以轻松地使用您当前的代码。