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;
你可能想再多解释一点——为什么会出现这种情况,可能还不太清楚。