Sas 使用带压缩小数的行指针控件

Sas 使用带压缩小数的行指针控件,sas,Sas,我试图在我的SAS程序中使用行指针控件,该程序根据某些变量的值使用许多输入语句。我的许多字段都包含压缩小数,我认为这会导致行指针控件出现问题,似乎程序在解包之前没有确定压缩小数,并且错误地移动了列指针 我无法知道要读取多少“段”,我只知道可能的最大数量,因此我需要在读取数据之前通过程序检查值,并使用基于该“段”的相对指针控件。我将循环并使用行指针控件INPUT+N来实现这一点 当我知道需要读入的确切列时,我的旧程序工作正常,所以我只使用了一个输入语句 这是一个旧程序的示例,我只包括上面的部分,因

我试图在我的SAS程序中使用行指针控件,该程序根据某些变量的值使用许多输入语句。我的许多字段都包含压缩小数,我认为这会导致行指针控件出现问题,似乎程序在解包之前没有确定压缩小数,并且错误地移动了列指针

我无法知道要读取多少“段”,我只知道可能的最大数量,因此我需要在读取数据之前通过程序检查值,并使用基于该“段”的相对指针控件。我将循环并使用行指针控件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.
下面是我正在尝试的线条控制程序:

....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语句等,但我相信我的问题是在读取包含压缩小数的时间戳变量之后。

使用行控件的程序中的一个问题是,informat将按informat宽度推进列指针,然后显式推进更多

为了确保信息按原样读取数据,请在Tom use$CHARw处保留前导空格。而不是w美元。并移除无关的+n


你的文件格式是什么?添加一些示例输入数据?我认为问题在于,informat将使列指针前进informat宽度,然后显式前进更多。为了确保informat使用的字符数正确,请尝试使用$CHARn。而不是$n。@Richard哇,太棒了!这成功了!我甚至没有想过char informer传递空格,因为我经常使用绝对列输入或分隔文件。你想写下这个作为答案,这样我就可以接受它吗?使用$CHARx。而不是x美元。不会更改列指针的移动方式。它只会影响前导空格的处理方式。使用$CHAR时,前导空格将被保留。使用$时,该值将在变量中左对齐。
INPUT 
     @2  Time_Stamp          ? PD8.
         MyVar1              ? $CHAR1.
         MyVar2              ? $CHAR20.
         MyVar3              ? $CHAR2.
...