【发布时间】:2022-01-13 00:00:44
【问题描述】:
我有一个没有分隔符和固定长度记录的二进制数据集。我知道每条记录包含 22 字节的数据,然后是未知数量的 23 字节块,最多 50 个块。问题是它只读取 1 行 32767 字节,总共 728 obs。我期待 2.7MM 输出 obs。我怎样才能让它读到最后的输入文件?我已经尝试将“OBS=”选项和“lrecl=”选项添加到 infile 行。添加“end=”选项对结果没有影响。
DATA INFILE.MYDATA (drop= i);
INFILE "&Path./UGLYDATA" end=eof;
INPUT
MY_KEY s370fPD9.
...
OCCURS s370fPD2.
@
;
ARRAY MyData{50} MyData1-MyData50;
...
ARRAY Filler{50} $ Filler1-Filler50;
DO I = 1 TO min(50,OCCURS);
INPUT
MyData{I} s370fPD4.
...
Filler{I} $ebcdic10.
@@
;
End;
RUN;
相关日志:
NOTE: 1 record was read from the infile "UGLYDATA".
The minimum record length was 32767.
The maximum record length was 32767.
One or more lines were truncated.
NOTE: SAS went to a new line when INPUT statement reached past the end of a line.
NOTE: The data set INFILE.MYDATA has 728 observations and 356 variables.
NOTE: Compressing data set INFILE.MYDATA decreased size by 47.06 percent.
Compressed is 9 pages; un-compressed would require 17 pages.
NOTE: DATA statement used (Total process time):
real time 2.69 seconds
user cpu time 0.02 seconds
system cpu time 0.11 seconds
memory 1890.40k
OS Memory 10408.00k
Timestamp 12/07/2021 05:17:34 PM
Step Count 1 Switch Count 0
Page Faults 3
Page Reclaims 1028
Page Swaps 0
Voluntary Context Switches 272
Involuntary Context Switches 1226
Block Input Operations 309648
Block Output Operations 2312
【问题讨论】:
-
看起来您正试图在 Unix 机器上读取 IBM 大型机数据文件。你是怎么把文件送到 Unix 机器上的?它只是一个纯二进制字节流吗?它在大型机上是什么类型的文件?
-
整个文件有多少字节? OCCURS 是否有可能实际具有大于 50 的值?如果它确实是什么意思?只有前 50 个 OCCURS 值被写入文件?