- Mark as New
- Bookmark
- Subscribe
- Mute
- RSS Feed
- Permalink
- Report Inappropriate Content
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.
- Mark as New
- Bookmark
- Subscribe
- Mute
- RSS Feed
- Permalink
- Report Inappropriate Content
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.
- Mark as New
- Bookmark
- Subscribe
- Mute
- RSS Feed
- Permalink
- Report Inappropriate Content
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:
- Mark as New
- Bookmark
- Subscribe
- Mute
- RSS Feed
- Permalink
- Report Inappropriate Content
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)
- Mark as New
- Bookmark
- Subscribe
- Mute
- RSS Feed
- Permalink
- Report Inappropriate Content
[ Erroneous post removed by jet-lagged author 🙂 ]