SAS 程序:变量 ID 处的附加列指针 @1 有什么问题?

问题描述 投票:0回答:1

在输入ID和ANS(错误程序)中添加@1:

DATA SCORE;

ARRAY KEY[10] $ 1 _TEMPORARY_;
ARRAY ANS[10] $ 1;
IF _N_ = 1 THEN
    DO I=1 TO 10;
        INPUT KEY[I] @;
    END;
INPUT  @1 ID $ @5 (ANS1-ANS10) ($1.);
RAWSCORE = 0;
DO I=1 TO 10;
    RAWSCORE = RAWSCORE + (ANS[I] EQ KEY[I]);
END;
PERCENT = 100*RAWSCORE/10;
DROP I;
DATALINES;
A B C D E E D C B A
001 ABCDEABCDE
002 AAAAABBBBB
;
PROC PRINT DATA=SCORE;
   TITLE "SCORE Data Set";
   ID ID;
   VAR RAWSCORE PERCENT;
RUN;

这是本书第15章中的程序。

课本上的原始程序,ID的INPUT语句中没有@1,它会给出所需的输出;如果我在 ID 处添加列指针,如下所示,它将再次读取键,即第一个数据线,即使存在 IF THEN 语句并使用 N 来测试它是否是第一个数据线。

谁能解释一下这个专栏@1有什么问题,为什么@5这个程序没问题?

sas
1个回答
0
投票

您缺少另一个 INPUT 语句。

在数据步骤的第一次迭代中,您首先运行 10 个带有 @ 的 INPUT 语句。所以你还在第一线。

如果您添加指针运动以移回到第一列,那么您第一次尝试读取 ID 将改为读取第一个 KEY 值。

由于程序不使用 TRUNCOVER (甚至不使用古老的 MISSOVER)选项,因此将应用 FLOW OVER 的默认操作。在这种情况下,只要第一行没有第十一个 KEY 值,没有指针运动控制的 INPUT 语句在第一行末尾没有找到任何满足 ID 输入的内容时就会跳到第二行.

当你完成第一行时,可能值得更明确地说明。

IF _N_ = 1 THEN DO:
    DO I=1 TO 10;
        INPUT KEY[I] @;
    END;
    INPUT;
END;
INPUT ID $ @5 (ANS1-ANS10) ($1.);
© www.soinside.com 2019 - 2024. All rights reserved.