繁体   English   中英

第29行第18列的数组下标超出范围

[英]Array subscript out of range at line 29 column 18

我试图使用ARRAY函数对样本数据集进行一些计算。 以下是我的代码:

DATA INCHES;
SET SASHELP.FISH;
ARRAY CONVERT[5] HEIGHT WIDTH LENGTH1 LENGTH2 LENGTH3;
DO I = 1 TO 159;
CONVERT[I]=ROUND(CONVERT[I]/2.54);
DROP I;
END;
RUN;

日志中有一个错误:

错误:第29行第18列的数组下标超出范围。

感谢您的时间和帮助。

上面的汤姆是正确的。 数组允许您使用索引执行计算,但是它们具有长度。 命令

ARRAY CONVERT[5] HEIGHT WIDTH LENGTH1 LENGTH2 LENGTH3; 

表示convert [1]表示高度... [2] 到宽度等等。 由于仅提及5个变量,因此无法引用[6],因为它不存在。

为什么要使用数组? 好吧,您可以使用sigma = sum之类的速记符号(属于convert [*])

DATA INCHES;
    SET SASHELP.FISH;
       ARRAY CONVERT[5] HEIGHT WIDTH LENGTH1 LENGTH2 LENGTH3;
        DO I = 1 TO 5;
            Converted[I]=ROUND(CONVERT[I]/2.54);
            DROP I;
        END;
RUN;

有关数组的更多信息,请参见: https : //support.sas.com/resources/papers/97529_Using_Arrays_in_SAS_Programming.pdf

仅添加到前面的评论中,我注意到数据集SASHELP.FISH具有159条记录,因此您似乎将列与行混淆了。

除非另有明确说明,否则一个数据步骤将自动遍历每条记录,因此您无需设置这种循环。

您创建的数组将为数据步骤当前正在处理的行存储指定的列值,因此设置为读取这些值的循环不能超过数组元素的数量(如@Tom和@Pinegulf所述)。

如果要确保遍历数组中的所有值,则可以使用do i = 1 to dim(convert)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM