次の例では DO グループを 5 回実行すると、ループの終わりに達して i の値が 5 になります。
do i = 1 upthru 5;
·
·
·
end;
UPTHRU オプションを使用すると、参照は、更新前に終了値と比較されます。 これは、終了値以降に何も値がない場合に非常に役立ちます。 例えば、FIXEDOVERFLOW 条件は、次に示すようなループでは発生しません。
do i = 2147483641 upthru 2147483647;
·
·
·
end;
同様に、次のループは、符号なしの値をゼロまで減分していく際に 生じる可能性がある問題を予防します。
dcl U unsigned fixed bin; do U = 17 downthru 0;
·
·
·
end;
UPTHRU と DOWNTHRU は、序数とともに使用すると特に有効です。 次の例を考えてみてください。
define ordinal Color ( Red value (1), Orange, Yellow, Green, Blue, Indigo, Violet); dcl C ordinal Color; do C = Red upthru Violet;
·
·
·
end; do C = Violet downthru Red;
·
·
·
end;
最初のループでは、c は、red から violet まで 昇順で連続する各色を想定しています。 2 番目のループでは、c は、violet から red まで降順で 連続する各色を想定しています。