You probably need another variable to make it easy.
So add a ROW counter and then sort the data.
data fix ;
set have ;
by firm ;
row+1;
if first.firm then row=1;
run;
proc sort ;
by row firm ;
run;
And now you can use PROC TRANSPOSE to flip it around.
proc transpose data=fix out=want ;
by row ;
id firm ;
var value ;
run;
Firm_
Obs row _NAME_ Firm_1 4058
1 1 value 0.001 .000
2 2 value 0.023 .001
3 3 value 0.002 .000
4 4 value . .001
... View more