2017-08-10 15 views
0

ARRAY関数を使用してサンプルデータセットの計算を試みていました。配列の添え字が29行目の列18の範囲外にある

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; 

とログにエラーが発生した:次は私のコードです

ERROR: Array subscript out of range at line 29 column 18.

はあなたの時間と助けをいただき、ありがとうございます。

+1

エラーを使用することができます159'が5' 'よりもはるかに大きい'としてかなり明確ようです。 – Tom

答えて

1

上記のTomは正しいです。配列を使用すると、インデックスを使用して計算を実行できますが、長さはあります。コマンド

ARRAY CONVERT[5] HEIGHT WIDTH LENGTH1 LENGTH2 LENGTH3; 

平均は高さ[2]を参照してください... [2]幅など。 5つの変数しか言及していないので、存在しないので[6]を参照することはできません。

なぜアレイを使用しますか?さて、あなたは配列の詳細については、シグマのような簡単な表記法= SUM(変換の[*])

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

1

ただ、以前のコメントに追加するには、私がいることをデータセットSASHELPに気づきます.FISHには159件のレコードがあるので、列と混乱しているようです。

明示的に指示されていない限り、datastepはすべてのレコードを自動的にループします。したがって、このようなループを設定する必要はありません。

作成した配列には、データストアが現在処理している行の指定された列の値が格納されています。したがって、これらの値を読み取るように設定されたループは配列要素の数を超えることはできません(@Tomおよび@Pinegulfで説明)。

あなたは、アレイ内のすべての値をループのことを確認したい場合は、あなたがdo i = 1 to dim(convert)

関連する問題