You have a few options.
First off, you could use a KEEP statement in the output.
proc transpose in=have out=want(keep=id col1-col6);
by id;
var myvar;
run;
This would limit what's written to the output dataset, which would limit its size greatly.
You also could use options compress=yes;
which would help with your bigger issue - lots of blank data. That would significantly decrease the amount of size needed to store the observations with much fewer than the maximum number of columns.
Finally, you could limit things with a view:
data v_have/view=v_have;
set have;
by id;
if first.id then counter=0;
counter+1;
if counter<6;
run;
proc transpose data=v_have out=want;
by id;
var yourvar;
run;
That would only pass the first six observations per ID to the transpose procedure.