簡體   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