我正在尝试在我的SAS程序中使用行指针控件,该程序根据某些变量的值使用许多INPUT语句。我的许多字段都包含压缩小数,我认为这会导致行指针控件出现问题,似乎程序在解包之前并没有确定压缩十进制数,并且错误地移动了列指针。
我无法知道要读取多少“段”,我只知道可能的最大数量,因此我需要在读取数据之前通过程序检查值并使用相对指针控件在那个'段'上。我将循环并使用行指针控件(INPUT + N)来完成此任务。
当我 知道 我需要读入的确切列时,我的旧程序正常工作,所以我只使用了输入语句。
以下是旧程序的示例,我只包括顶部部分,因为它将说明我的内容:
....some rsubmitting and options statements....
%DO i=0 %TO 2;
filename MyFN "MyFile(-&i.)" disp=shr;
DATA ReadInTemp;
INFILE MyFN MISSOVER PAD;
INPUT
@1 Pro_Ind $1. @;
IF Pro_Ind ="H" or Pro_Ind ="T" THEN DELETE;
IF Pro_Ind ="1" THEN DO;
INPUT
@2 Time_Stamp ? PD8.
@10 MyVar2 ? $1.
@11 MyVar3 ? $20.
@31 MyVar4 ? $2.
这是我正在尝试使用Line Controls的程序:
....some rsubmitting and options statements....
%DO i=0 %TO 2;
filename MyFN "MyFile(-&i.)" disp=shr;
DATA ReadInTemp;
INFILE MyFN missover pad;
INPUT
@1 Pro_Ind $1. @;
IF Pro_Ind ="H" or Pro_Ind ="T" THEN DELETE;
IF Pro_Ind ="1" THEN DO;
INPUT
@2 Time_Stamp ? PD8. +7
MyVar1 ? $1. +1
MyVar2 ? $20. +19
MyVar3 ? $2. +1
请记住,这只是A)程序用于工作的样本,B)现在不工作的样本。我知道没有END和%END语句等,但我相信我的问题是在我读这个包含Packed Decimal的TimeStamp变量之后。
答案 0 :(得分:1)
程序中带有行控件的一个问题是,信息将按行信息宽度推进列指针,然后你明确地推进更多。
确保信息按原样读取数据(保留前导空格@Tom)使用$CHARw.
代替$w.
并删除无关的+n
INPUT
@2 Time_Stamp ? PD8.
MyVar1 ? $CHAR1.
MyVar2 ? $CHAR20.
MyVar3 ? $CHAR2.
...