我正在处理一些具有固定列宽的原始数据,但它的所有记录都写入了一行(归咎于数据供应商,而不是我:-))。我知道如何在INPUT
语句中使用固定的列宽,以及如何使用@@
每行读取多个观察值,但是当我尝试同时执行这两种操作时遇到了麻烦。
例如,这里有一些代码,其中数据具有固定的列宽,但每条记录只有一行。此代码工作正常:
DATA test_1;
INPUT alpha $ 1-5 beta $ 6-10 gamma 11-15 ;
DATALINES;
a f 1
ab fg 12
abc fgh 123
abcd fghi 1234
abcdefghij12345
;
RUN;
现在这是我真正想要做的代码 - 所有数据都在一行中,我尝试使用@@
符号:
DATA test_2;
INPUT alpha $ 1-5 beta $ 6-10 gamma 11-15 @@;
DATALINES;
a f 1 ab fg 12 abc fgh 123 abcd fghi 1234 abcdefghij12345
;
RUN;
这失败了,因为它只是继续读取开始的 15 个字符,保持该记录,然后从头开始重新读取。根据我对@@
符号语义的理解,我完全可以理解为什么会发生这种情况。
有什么方法可以完成从单行读取固定列数据;也就是说, maketest_2
的内容与test_1
? 也许通过INPUT
语句中的符号组合,或者可能诉诸另一种方法(使用文件 I/O 函数PROC IMPORT
等)?