The header in tables is a complementary element that provides a contextual help to what's in the actual columns - but it's the data itself that interest users. Ideally, only new users will use the header at the first few usage instances (unless the columns are very similar in nature, in which case the header will be used much more often - I don't know what's in the columns in your case, so it's hard to pass judgement).
Visual noise vs. calculated meaning
The argument for the sign being only in the header is that doing so reduces repetition and visual noise. Yet, users can do the 1 + 1 (column value + header) to understand the semantics (but this does mean calculated meaning - users have to work out two elements to infer meaning).
Numbers - magnitude vs. rational
However, in the case of percentages, I suspect that a plain number can be confusing - most numbers represent a magnitude, whereas a percent is rational. I think this is a distinction worth making explicit.
I suspect, that you'd get more complaints if you omit the % sign from the rows than if you wouldn't.
Personally, I feel that in this specific case the visual noise added is worth it, as you gain making something rather distinctive explicit.