循环中的SAS和行指针
我只想读数字在第一行的观察结果。预期结果:循环中的SAS和行指针,sas,Sas,我只想读数字在第一行的观察结果。预期结果: data test; infile datalines; input k1 k2 k3 k4 k5 k6 k7 k8 k9 k10; array a(*) k1-k10; do i=1 to 10; if a(i) eq . then stop; line=a(i); input #line k1 k2 k3 k4 k5 k6 k7 k8 k9 k10; o
data test;
infile datalines;
input k1 k2 k3 k4 k5 k6 k7 k8 k9 k10;
array a(*) k1-k10;
do i=1 to 10;
if a(i) eq . then stop;
line=a(i);
input #line k1 k2 k3 k4 k5 k6 k7 k8 k9 k10;
output;
end;
stop;
datalines;
5 9 2 4 6 3 . . . .
29 57 32 9 2 29 2 0 23 1
83 34 28 1 43 3 24 2 6 2
0 84 62 75 3 52 65 1 5 2
0 2 12 45 92 3 60 24 6 2
47 24 87 2 52 36 1 17 3 1
90 93 2 1 40 20 75 2 5 14
78 27 27 2 4 1 12 21 4 2
21 40 3 21 3 19 3 2 4 2
84 2 5 3 13 6 23 98 1 2
;
run;
运行代码后出现的错误:
0 2 12 45 92 3 60 24 6 2
21 40 3 21 3 19 3 2 4 2
29 57 32 9 2 29 2 0 23 1
0 84 62 75 3 52 65 1 5 2
47 24 87 2 52 36 1 17 3 1
83 34 28 1 43 3 24 2 6 2
“x的适当值”是什么意思?我应该在代码中更改什么?SAS告诉您需要修改您的infle语句,以允许它在前面读取足够的行数。对于编写的代码,
n=10
应该可以,因为用于获取行号的变量的值都不大于10
ERROR: Old line 3387 wanted but SAS is at line 3391.
Use: INFILE N=X; , with a suitable value of x.
RULE: ----+----1----+----2----+----3----+----4----+----5----+----6----+----7----+----8----+----9----+----0
3391 47 24 87 2 52 36 1 17 3 1
k1=0 k2=2 k3=12 k4=45 k5=92 k6=3 k7=60 k8=24 k9=6 k10=2 i=2 line=2 _ERROR_=1 _N_=1
SAS告诉您需要修改您的infle语句,以允许它在前面阅读足够多的行。对于编写的代码,
n=10
应该可以,因为用于获取行号的变量的值都不大于10
ERROR: Old line 3387 wanted but SAS is at line 3391.
Use: INFILE N=X; , with a suitable value of x.
RULE: ----+----1----+----2----+----3----+----4----+----5----+----6----+----7----+----8----+----9----+----0
3391 47 24 87 2 52 36 1 17 3 1
k1=0 k2=2 k3=12 k4=45 k5=92 k6=3 k7=60 k8=24 k9=6 k10=2 i=2 line=2 _ERROR_=1 _N_=1
您正在使用第二条
输入
语句覆盖数组中的值。在这里,它们被读入不同的变量,以便不被覆盖
data test;
/*Add the n= option to the infile statement as suggested by log message*/
infile datalines n= 10;
input k1 k2 k3 k4 k5 k6 k7 k8 k9 k10;
array a(*) k1-k10;
array b(*) b1-b10;
/*Make a copy of the first row
that won't get overwritten by subsequent input statements*/
do i=1 to 10;
b(i) = a(i);
end;
do i=1 to 10;
if b(i) eq . then stop;
line=b(i);
input #line k1 k2 k3 k4 k5 k6 k7 k8 k9 k10;
output;
end;
stop;
datalines;
5 9 2 4 6 3 . . . .
29 57 32 9 2 29 2 0 23 1
83 34 28 1 43 3 24 2 6 2
0 84 62 75 3 52 65 1 5 2
0 2 12 45 92 3 60 24 6 2
47 24 87 2 52 36 1 17 3 1
90 93 2 1 40 20 75 2 5 14
78 27 27 2 4 1 12 21 4 2
21 40 3 21 3 19 3 2 4 2
84 2 5 3 13 6 23 98 1 2
;
run;
您正在使用第二条
输入
语句覆盖数组中的值。在这里,它们被读入不同的变量,以便不被覆盖
data test;
/*Add the n= option to the infile statement as suggested by log message*/
infile datalines n= 10;
input k1 k2 k3 k4 k5 k6 k7 k8 k9 k10;
array a(*) k1-k10;
array b(*) b1-b10;
/*Make a copy of the first row
that won't get overwritten by subsequent input statements*/
do i=1 to 10;
b(i) = a(i);
end;
do i=1 to 10;
if b(i) eq . then stop;
line=b(i);
input #line k1 k2 k3 k4 k5 k6 k7 k8 k9 k10;
output;
end;
stop;
datalines;
5 9 2 4 6 3 . . . .
29 57 32 9 2 29 2 0 23 1
83 34 28 1 43 3 24 2 6 2
0 84 62 75 3 52 65 1 5 2
0 2 12 45 92 3 60 24 6 2
47 24 87 2 52 36 1 17 3 1
90 93 2 1 40 20 75 2 5 14
78 27 27 2 4 1 12 21 4 2
21 40 3 21 3 19 3 2 4 2
84 2 5 3 13 6 23 98 1 2
;
run;
您是否打算将其用作矩阵?如果是这样的话,可以通过
proc iml
直接导入,但需要其他人提供建议。不,我只需要它像描述的那样简单。infle n=x
错误掩盖了另一个问题-当您访问do循环中的每个输入语句时,您正在覆盖试图用作行号的变量k1-k10。请参阅更新的答案。是否打算将其用作矩阵?如果是这样的话,可以通过proc iml
直接导入,但需要其他人提供建议。不,我只需要它像描述的那样简单。infle n=x
错误掩盖了另一个问题-当您访问do循环中的每个输入语句时,您正在覆盖试图用作行号的变量k1-k10。请参阅更新的答案。“这不会给您所需的输出”。将此作为“答案”发布没有任何意义:)不过,它让你越过了眼前的障碍。我想我看到了你现在想要做的事情——再看一眼。“这并没有给你想要的输出”。将此作为“答案”发布没有任何意义:)不过,这会让你克服眼前的障碍。我想我明白你现在想做什么了——再看一眼。