I have a dataset similar to
data NATR332;
input Y1 Y2;
datalines;
146 141
141 143
135 139
142 139
140 140
143 141
138 138
137 140
142 142
136 138
run;
I used proc sql to find the difference between Y1 and Y2 and removed the rows where the difference is = 0 by using the code
proc SQL;
/*create table temp as*/
select *,
Y1 - Y2 as Difference,
from NATR332
where (Y1-Y2 ^= 0)
;
I now want to create a new column called rank where I rank the absolute value of the differences. I tried to use the rank () over partition in proc sql and didn't have any luck so I was thinking I would maybe have to use the proc rank function. How would I go about creating this column?
Thank you in advance.
but you seem to know the answer ie use proc rank on the abs value of the difference ie abs(difference). And use "out=" on the proc rank statement to get the dataset. Incidentally, I wouldn't see any reason to exclude the 0's.
I tried to use the rank () over partition in proc sql
PROC SQL doesn't support partition. PROC RANK will work, and the documentation has examples which is always the place to start.
A fully worked example is here:
It's a good habit to always think about numerical precision (and missing values).
Something like
where abs(Y1-Y2) > 1e-9
is better than
where (Y1-Y2 ^= 0)
[ Erroneous post removed by jet-lagged author 🙂 ]
Are you ready for the spotlight? We're accepting content ideas for SAS Innovate 2025 to be held May 6-9 in Orlando, FL. The call is open until September 25. Read more here about why you should contribute and what is in it for you!
Learn how use the CAT functions in SAS to join values from multiple variables into a single value.
Find more tutorials on the SAS Users YouTube channel.