R5RS includes the versatile do-macro which can do most of the things you need from a looping construct. But it's syntax is extremely hard to remember to many people and so DO isn't used too often.
Usually one just uses the named-let idiom, but for some common cases it's more concise to use dedicated forms.
(define-syntax dotimes
(syntax-rules ()
((_ (var n res) . body)
(do ((limit n)
(var 0 (+ var 1)))
((>= var limit) res)
. body))
((_ (var n) . body)
(do ((limit n)
(var 0 (+ var 1)))
((>= var limit))
. body))))