首页 > 解决方案 > SAS Proc Rank/Proc SQL

问题描述

我有一个类似于

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;`

我使用 proc sql 来查找 Y1 和 Y2 之间的差异,并使用代码删除差异 = 0 的行

proc SQL;
/*create table temp as*/
select *,
Y1 - Y2 as Difference
from NATR332
where (Y1-Y2 ^= 0)
;

我现在想创建一个名为 rank 的新列,在其中对差异的绝对值进行排名。我尝试在 proc sql 中使用 rank () over partition 并且没有任何运气,所以我想我可能不得不使用 proc rank 函数。我将如何创建这个专栏?我对 sql 比对 sas 更熟悉,所以我在使用 sas 时尝试在 proc sql 中完成大部分工作。

先感谢您。

标签: sasproc-sql

解决方案


我会做以下事情:

data diffs;
set NATR332;
difference = abs(Y1-Y2);
if difference ne 0;
run;

proc rank data=diffs descending out=diffs_ranked;
var difference;
ranks ranking;
run;

您有一个名为的数据集diffs_ranked和一个名为的变量ranking,用于保存排名,由于降序选项,排名从大到小。


推荐阅读