do i=1 to dim(配列名);処理;end;といった書き方をして、要素数分処理をループさせたりして利用することが多いと思います。
さて、話は変わって、今以下のようなデータセットがあったとします。
data Q1;
_95=1;_96=5;_97=8;_98=12;output;
run;
適当なデータですが、これは1995年から98年までのある商品の売り上げだとします。
_95は1995年の売上といったように、数字が意味を持っています。
そういった場合で、配列を定義する際、処理の内容によっては要素番号を1からの連番にして
意味を失わせるよりも、任意の数字を定義して、リンクさせた方が処理がわかりやすい場合もあります。
先にコードから
data A1;
set Q1;
array SALES{95:98} _:;
X=SALES(97);
run;
ここでSALESという配列を定義していますが{95:98}とすることで、この配列は
要素番号95から98までを持つ配列となります。
たとえば X=SALES(97);とするとxには_97の値、すなわち1997年の売上を取得できます。
X=SALES(1)などと書くと、当然エラーになります。
なるほど、要素番号に任意の数字を設定できるのはわかったとして、じゃあi=1 to dim(配列名)みたいな処理が書けなくなってるんじゃないかと思いますが、
そこはlbound関数やhbound関数を使用できます。こいつらは配列名を引数にとり、その配列の要素番号の最小値または最大値を返します。
つまり
data A2;
set Q1;
array SALES{95:98} _:;
do YEAR=lbound(SALES) to hbound(SALES);
X=SALES(YEAR);
output;
end;
run;
とすると95から98でループがかかります。
面白いです。
0 件のコメント:
コメントを投稿