The location of your OUTPUT statement inside the Do j= / end; loop means that the output executes for every value of J. Moving it after the end of the J= loop means that it only executes one time.
If you don't really need the variable i for some purpose you might also consider changing this
do i = 1 to 20;
student=i;
to
do student = 1 to 20;
... View more