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))))