PROC RANK would allow you to do ranking using "dense". I've never used "decode()" and just looked it up in the Oracle documentation. From what I understand this would require some post processing of the result returned by PROC RANK (so an additional PROC SQL/Data Step on the output of the PROC RANK procedure via an additional pass through the data).