SAS ループ文のサンプル(do)

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行目に戻ります。

関連の記事

SAS if文のサンプル

△上に戻る