首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SAS how to Dense_rank

SAS how to Dense_rank
EN

Stack Overflow用户
提问于 2020-02-03 23:17:17
回答 2查看 493关注 0票数 0

我是sas的新手,以前做过oracle SQL

我以前也做过类似的问题

How to tricky rank SAS?

我认为这个问题可以解决这个问题。

我被卡住了。

我的代码是这样的

代码语言:javascript
复制
data stepstep;
   input emplid KEY:$3. count;
   cards;
11 11Y    1
11 11Y    2
11 11N    3
11 11N    4
11 11Y    5
11 11N    6
12 12Y    1
12 12Y    2
12 12N    3
;
run;

然后我试着

代码语言:javascript
复制
data stepstep2;
   set stepstep;
   by key  emplid NOTSORTED;
   if first.key AND first.emplidthen rank=1;
     ELSE rank+1;
   run;

输出是这样的

我想展示一下

代码语言:javascript
复制
emplid  key   count  rank
11      11Y    1      1
11      11Y    2      1
11      11N    3      2 
11      11N    4      2
11      11Y    5      3
11      11N    6      4
12      12Y    1      1
12      12Y    2      1
12      12N    3      2

所以新的emplid出现了,我希望"Rank“回到从1开始计数。

所以在这个例子中,当第一个emplid "12“出现时,排名返回到1

我该怎么做呢?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-02-03 23:46:53

你需要适当地利用你的BY组,我认为对于初学者来说,你把它们的顺序搞错了。试着这样做:

代码语言:javascript
复制
    data stepstep2;
       set stepstep;
       by emplid KEY NOTSORTED;

       if first.emplid then rank=1; *start of each emplid group;
       ELSE if first.key rank+1; *start of each new key;

    run;
票数 1
EN

Stack Overflow用户

发布于 2020-02-03 23:53:01

您还可以使用sum语句:

代码语言:javascript
复制
data stepstep2;
  set stepstep;
  by emplid key NOTSORTED;
  if first.emplid then rank=0;
  rank + first.key;
run;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60042097

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档