【问题标题】:Using Line Pointer Controls with Packed Decimals SAS使用压缩小数 SAS 的行指针控件
【发布时间】:2018-03-29 00:34:19
【问题描述】:

我正在尝试在我的 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 语句等,但我相信我的问题是在我阅读了这个包含压缩十进制的 TimeStamp 变量之后。

【问题讨论】:

  • 你的文件格式是什么?添加一些示例输入数据?
  • 我认为问题在于信息会将列指针前进信息宽度,然后您会显式地前进更多。为确保信息占用正确数量的字符,请尝试使用 $CHARn。而不是 $n。
  • @Richard 哇,太棒了!这行得通!由于我使用绝对列输入或分隔文件的频率,我什至没有想过 char informer 会传递空格。你想把这个写成答案让我接受吗?

标签: sas


【解决方案1】:

您的带有行控件的程序中的一个问题是信息会将列指针前进信息宽度,然后您会明确地前进更多。

为了确保信息按原样读取数据(保留前导空格@Tom)使用$CHARw. 而不是$w.删除无关的+n

INPUT 
     @2  Time_Stamp          ? PD8.
         MyVar1              ? $CHAR1.
         MyVar2              ? $CHAR20.
         MyVar3              ? $CHAR2.
...

【讨论】:

  • 使用$CHARx. 代替$x. 不会改变列指针的移动方式。它只会影响前导空格的处理方式。使用$CHAR 会保留前导空格。使用$,值将在变量中左对齐。
猜你喜欢
  • 2023-01-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-09
  • 1970-01-01
  • 2015-09-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多