For some reason my full post didn't appear.
The documentation states:
Explanation: When both start and stop are present, execution continues (based on
the value of increment) until the value of index-variable passes the value of stop.
When only start and increment are present, execution continues (based on the
value of increment) until a statement directs execution out of the loop, or until a
WHILE or UNTIL expression that is specified in the DO statement is satisfied.
If neither stop nor increment is specified, the group executes according to the
value of start. The value of stop is evaluated before the first execution of the
loop.
Thus, if you use do i=20 to 1 by -1, it will work as expected.
HTH,
Art