the statement in %chgc() executes after the end of the data step's execution. Another word, it executes after Do...End statement in your case. If you do not use %chgc, it can be resolved by using call symput() as below.
[code:f06ef]
data _null;
do i=1 to 3;
call symput('cc', i );
t=2*symget('cc')+1;
put t=;
end;
run;
[/code:f06ef]