Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/delphi/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Input 从双尾随输入读取@@_Input_Sas_Datastep - Fatal编程技术网

Input 从双尾随输入读取@@

Input 从双尾随输入读取@@,input,sas,datastep,Input,Sas,Datastep,输入: G0894 x 1 x 3 x 1 k 1 C4458 x 1 k 5 C9057 x 7 x 4 x 4 x 3 x 5 G0894 x 1 G0894 x 3 G0894 x 1 G0894 k 1 C4458 x 1 C4458 k 5 C9057 x 7 C9057 x 4 C9057 x 4 C9057 x 3 C9057 x 5 所需输出: G0894 x 1 x 3 x 1 k 1 C4458 x 1 k 5 C9057 x 7 x 4 x 4 x 3 x 5 G08

输入:

G0894 x 1 x 3 x 1 k 1
C4458 x 1 k 5
C9057 x 7 x 4 x 4 x 3 x 5
G0894 x 1
G0894 x 3
G0894 x 1
G0894 k 1
C4458 x 1
C4458 k 5
C9057 x 7
C9057 x 4
C9057 x 4
C9057 x 3
C9057 x 5
所需输出:

G0894 x 1 x 3 x 1 k 1
C4458 x 1 k 5
C9057 x 7 x 4 x 4 x 3 x 5
G0894 x 1
G0894 x 3
G0894 x 1
G0894 k 1
C4458 x 1
C4458 k 5
C9057 x 7
C9057 x 4
C9057 x 4
C9057 x 3
C9057 x 5
这就是我想到的:

data want;
    infile cards missover;
    input id $ @;
    do while (1);   
        input letter $ number @;
        if letter EQ ' ' then leave;
    output;
end;
cards;
G0894 x 1 x 3 x 1 k 1
C4458 x 1 k 5
C9057 x 7 x 4 x 4 x 3 x 5
;
run;
它确实管用,但既然我们在课堂上一直在讨论双尾随@,我想我应该用它。这是我的另一种方法:

data want;
    infile cards missover;
    input id $ @;
    input letter $ number @@;
cards;
G0894 x 1 x 3 x 1 k 1
C4458 x 1 k 5
C9057 x 7 x 4 x 4 x 3 x 5
;
run;

它会生成一个错误,说明以不一致的方式使用
misshover
@
。我做错了什么?

在您的程序中,数据步骤无法前进到第二行输入数据。这就是错误消息告诉您的


@@告诉SAS在开始下一个数据步骤迭代时,应该保持行指针和列指针相同。MISSOVER选项告诉SAS在找不到满足当前输入请求的数据时不要转到新行。因此,行指针无法前进到第二行。

双尾随at符号(@@)在数据步骤的多次迭代中保存一条记录,直到到达记录的末尾。但是,当控件返回到数据步骤的顶部时,单个尾随at符号(@)将释放一条记录

试试这个:

data want;
    infile cards missover;
    input id $ letter $ number @;
    do while (letter ne '' or number ne .);
        output;
        input letter $ number @;
    end;
cards;
G0894 x 1 x 3 x 1 k 1
C4458 x 1 k 5
C9057 x 7 x 4 x 4 x 3 x 5
;
run;

你可能想再多解释一点——为什么会出现这种情况,可能还不太清楚。