That is what PROC TRANSPOSE is for.
Looks like your key variables ID, COMPANY and FISCALYEAR uniquely identify the observations in your original dataset.
So use those in the BY statement. If the data is not sorted by those variables yet you can add the NOTSORTED keyword to the BY statement.
List the other three variables in the VAR statement.
You can use the NAME= option to control the name given for the variable that has the name of the original variable.
You can use the RENAME= dataset option to rename the output variable.
proc tranpose data=HAVE name=ITEM out=WANT(rename=(col1=VALUE)) ;
by ID Company FiscalYear NOTSORTED ;
var Revenue NetIncome Expenses ;
run;
... View more