2017-06-16 101 views
-1

我得到的数组下标超出范围的错误:SAS数组下标越界

ERROR: Array subscript out of range at line 408 column 169. 
SYM_ROOT=FSV DATE=. TIME_M=. BID=. BIDSIZ=. ASK=. ASKSIZ=. EXN=. 
FIRST.SYM_ROOT=1 LAST.SYM_ROOT=1 FIRST.DATE=1 LAST.DATE=1 FIRST.TIME_M=1 
LAST.TIME_M=1 nexb1=. nexb2=. nexb3=. nexb4=. nexb5=. nexb6=. nexb7=. nexb8=. 
nexb9=. nexb10=. nexb11=. nexb12=. nexb13=. nexb14=. nexb15=. nexb16=. nexb17=. 
nexo1=. nexo2=. nexo3=. nexo4=. nexo5=. nexo6=. nexo7=. nexo8=. nexo9=. nexo10=. 
nexo11=. nexo12=. nexo13=. nexo14=. nexo15=. nexo16=. nexo17=. sexb1=. sexb2=. 
sexb3=. sexb4=. sexb5=. sexb6=. sexb7=. sexb8=. sexb9=. sexb10=. sexb11=. 
sexb12=. sexb13=. sexb14=. sexb15=. sexb16=. sexb17=. sexo1=. sexo2=. sexo3=. 
sexo4=. sexo5=. sexo6=. sexo7=. sexo8=. sexo9=. sexo10=. sexo11=. sexo12=. 
sexo13=. sexo14=. sexo15=. sexo16=. sexo17=. _I_=. i=18 BB=. BO=. MIDPRICE=. 
BBSize=. BOSize=. NUMEX=. _ERROR_=1 _N_=6417740 

但是,我不知道发生了什么,因为代码先前已经在不同的数据集工作。

我能想到的唯一的事情是,因为我有问题的数据集是原始数据集(工作)的子集,它可能没有完整范围的EXN(我正在使用变量命名为exn作为数组的索引)。

予定义的阵列为:

array nexb nexb:; array nexo nexo:; array sexb sexb:; array sexo sexo:; 

我说的是被称为EXN的变量,它是用来引用数组:

nexb(exn)=bid;nexo(exn)=ofr;sexb(exn)=bidsiz;sexo(exn)=ofrsiz; 

这些阵列是在下面的初始化方式:

do i=1 to 17; 
    nexb(i)=.; nexo(i)=.; sexb(i)=.; sexo(i)=.; 
end; 

本来exn涵盖从1到17.现在我认为一些数字在b有可能在数据集中缺失。但为什么这是一个问题?无论如何它们都被初始化。

+0

如果您使用EXN作为索引,我会假定它也会出现在错误消息中。不是。您应该在日志中发布引用的代码行,第408行 - 它会准确告诉您索引出现问题的位置。 – Reeza

+0

我的代码中甚至没有408行... –

+0

它运行在集群上我想这就是为什么 –

回答

1

您不能使用缺少的值作为数组的索引。您的日志显示EXN缺失。