SAS DATA步骤/ INPUT语句:读取基于列的原始数据和单行多个观察?

时间:2012-04-13 17:34:15

标签: sas

我正在处理一些具有固定列宽的原始数据,但将其所有记录写入一行(责怪数据供应商,而不是我:-))。我知道怎么用 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个字符,保留该记录,并从头开始重新读取。根据我对@@符号语义的理解,我完全可以理解为什么会发生这种情况。

有什么方法可以从一行读取固定列数据;也就是说,make test_2test_1的内容相同?也许通过INPUT语句中的某些符号组合,或者可能使用其他方法(使用文件I / O函数,PROC IMPORT等)?

1 个答案:

答案 0 :(得分: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文档:

  

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