0

我正在处理一些具有固定列宽的原始数据,但它的所有记录都写入了一行(归咎于数据供应商,而不是我:-))。我知道如何在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等)?

4

1 回答 1

2

您是否尝试过使用信息指定可变长度?

例如:

DATA test_2;
    INPUT alpha  $5.    beta $5.    gamma 5.0 @@;

    DATALINES;
a    f    1    ab   fg   12   abc  fgh  123  abcd fghi 1234 abcdefghij12345
;
RUN;

从 SAS 文档:

格式化输入使指针像列输入一样移动以读取变量值。指针移动信息中指定的长度并停在下一列。

于 2012-04-13T18:55:59.460 回答