"Дублирование" кода - псевдопроблема.
Ведь дублирование возникает там, где некоторое действие (продвижение по последовательности, например) выполняется на один раз больше, чем сопряжённое с ним ("полезная нагрузка" цикла, обработка, например).
Так бывает очень часто.
И хорошо, что это явно видно. Я эту ситуацию называю "случаем забора" (напоминает задачку из первого класса: сколько столбиков надо для забора из стольки-то секций). Сначала вбиваем первый столб забора, потом выполняем цикл DO "поставить часть забора; вкопать столб". Или наоборот бывает - цикл  DO "вкопать столб; поставить часть забора" - и в конце вбиваем заключительный столб.
Вы же хотите затушевать тот факт, что действия выполняются неодинаковое число раз, имеют разный смысл (и добиваетесь этого либо EXIT-ом, либо вложенными в цикл проверками - чтоб заставить один раз недовыполниться другое действие).

Но если мы точно знаем, что действие выполняется один раз (добавочное действие, будет выполнено даже если цикл не выполняется вообще), то ему не место в цикле. Так же, например, как глупо выглядит обработка найденного элемента внутри цикла for ... if ... break endif endfor - ведь это ж, ёлки-палки, никакого отношения к циклу уже не имеет, цикл закончился - значит после должно делаться...