The trouble is that every time the function sgtitle is called, it creates a new matlab.graphics.illustration.subplot.Text object, which then gets placed on your figure. To simply update the title at every step in your loop, call sgtitle before your loop and reassign its String property at every step. That looks like this:
figtitle = sgtitle('some initial title');
newfigtitle = ['new title #',num2str(i)];
figtitle.String = newfigtitle;
This way you can still leave your figure open throughout the loop and update only your subplots, which is what I'm guessing you're doing, rather than having to open and close a brand new figure with a brand new title at every step.