我正在使用以下格式的数据集:
Column 1 (What I Have), Column 2 (What I need to see)
8 1
8 1
8 1
9 2
9 2
9 2
10 3
10 3
10 3
11 4
11 4
12 5
13 6
14 7
14 7
14 7
尝试使用Proc Rank生成第二列 代码:
Proc Rank data=Have
out=Want
ties=low;
Var Column1;
ranks Column2;
run;
我得到的输出如下:
Column1 (What I Have) Column2 (What I get)
8 1
8 1
8 1
9 199
9 199
9 199
10 415
10 415
10 415
11 613
11 613
12 823
13 1015
14 1222
14 1222
14 1222
基于我所阅读和听到的内容,第一个数据集是我期望的结果。
代码或期望是否存在导致输出的错误,例如我所看到的输出? 另外还有一种更好的方法来生成一列连续数字数据的排序等级吗?
答案 0 :(得分:4)
您可以在数据步骤中执行此操作,假设可以按Column1排序。
proc sort data=have;
by column1;
run;
data want;
set have;
by column1;
retain column2 ;
if _n_ = 0 then
column2 = 0;
if first.column1 then
column2 = column2 + 1;
run;
答案 1 :(得分:1)
想要让我知道我弄清楚如何使用它。
密钥位于Ties =(低或高或平均或密集)语句中。
这是适用的新代码。
Proc Rank data=Have
out=Want
ties=dense;
Var Column1;
ranks Column2;
run;
现在,我的数据集组都像值一样,并为它们提供相同的计数。使用适当的值生成第2列。文档在这里:
滚动到底部以获取领带的功能
答案 2 :(得分:0)
或者暗示保留。
DATA WANT;
SET HAVE;
BY COLUMN1;
IF _N_ = 0 THEN
COLUMN2 = 0;
IF FIRST.COLUMN1 THEN
COLUMN2 + 1;
RUN;