SASのループ文(do)のサンプルです。他言語でのfor文にあたります。
確認環境 ・SAS 9.4 |
目次
do文 | do文 |
byを使用したサンプル | |
leave | ループを途中で終了する(leave) |
入れ子のときにleaveを使用する | |
continue | ループで処理をスキップする(continue) |
入れ子のときにcontinueを使用する |
do文
/* 1つめ */ do 変数 = 開始値 To 終了値 [by 増減値]; 処理 end; |
/* 2つめ */ do 変数 = 値[,値...] 処理 end; |
- 処理を繰り返す時に使用します。
- 1つめは、変数が開始値から終了値の範囲内の間、繰り返します。
- 「by 増減値」を省略した場合は、増減値=1になります。マイナス値の指定も可能です。
- ループで使用する変数をカウンター変数またはループ変数といいます。
- 2つめは、指定された値分繰り返します。値が1つだけのときは1回実行します。
do文のサンプルコードです。
DATA _NULL_;
do i = 0 to 3;
put i; /* 0 1 2 3 が出力される */
end;
do i = 1,4,8;
put i; /* 1 4 8 が出力される */
end;
run;
3行目は、0から3までの処理を繰り返します。
変数のiはカウンター変数またはループ変数と呼ばれます。
7行目の3つの数値分繰り返します。
iの値は、1,4,8になります。
byを使用したサンプル
byを使用したサンプルです。
DATA _NULL_;
do i = 1 to 10 by 2;
put i; /* 1 3 5 7 9が出力される */
end;
do i = 10 to 1 by -2;
put i; /* 10 8 6 4 2が出力される */
end;
run;
3行目は、do文の後にby 2がついています。ループする変数の値が2つ増加します。
7行目のbyの値は-2です。ループする変数の値が2つ減少します。
ループを途中で終了する(leave)
ループを途中で終了するサンプルです。
DATA _NULL_;
do i = 0 to 5;
if i = 3 then
leave;
put i; /* 0 1 2が出力される */
end;
run;
5行目のleaveでfor文を抜けます。
6行目は、0,1,2が出力されます。
入れ子のときにleaveを使用する
入れ子のときにleaveを使用するサンプルです。
DATA _NULL_;
do i = 0 to 2;
do j = 0 to 2;
if j = 0 then
leave;
put j; /* 出力なし */
end;
put i; /* 0 1 2が出力される */
end;
run;
3,4行目にdo文があり入れ子になっています。
6行目のleaveは、内側のdo文のみ抜けます。
ループで処理をスキップする(continue)
ループで処理をスキップするサンプルです。
DATA _NULL_;
do i = 0 to 2;
if i = 1 then
continue;
put i; /* 0 2が出力される */
end;
run;
5行目のcontinueでループ処理の先頭の3行目に戻ります。
6行目は、0と2が出力されます。
入れ子のときにcontinueを使用する
DATA _NULL_;
do i = 0 to 1;
do j = 0 to 1;
if j = 0 then
continue;
put j; /* 1 1が出力される */
end;
put i; /* 0 1が出力される */
end;
run;
3,4行目にdo文があり入れ子になっています。
6行目のcontinueは、内側のdo文の先頭の4行目に戻ります。
関連の記事