我正在处理一些具有固定列宽的原始数据,但将其所有记录写入一行(责怪数据供应商,而不是我:-))。我知道怎么用
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_2
与test_1
的内容相同?也许通过INPUT
语句中的某些符号组合,或者可能使用其他方法(使用文件I / O函数,PROC IMPORT
等)?
答案 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文档:
格式化输入使指针像列输入一样移动 读取变量值。指针移动的长度 在信息中指定并在下一栏停止。