It shouldn't be necessary to loop through the table control content to hide the column for each line separately, as the columns definition is central for the table view.
A cleaner and much more efficient solution could look like this:
*********************************
* PBO include
*********************************
PROCESS BEFORE OUTPUT.
MODULE hide_column_0100.
*********************************
MODULE hide_column_0100 OUTPUT.
PERFORM hide_column.
ENDMODULE.
*********************************
* form include
*********************************
FORM hide_column.
FIELD-SYMBOL <col> TYPE cxtab_column.
LOOP AT table_control_0100-cols ASSIGNING <col>.
IF <col>-screen-name = 'HIDE'.
<col>-invisible = 1.
ENDIF.
ENDLOOP.
ENDFORM.
It's better to put the code into an own subroutine (FORM) to avoid unnecessary global variables (like for the work area of the LOOP). It often gets forgotten that MODULE code belongs to the global scope.