三种方法解决分组排序编号问题(2种SQL+1种DATA STEP)-经管之家官网!

人大经济论坛-经管之家 收藏本站
您当前的位置> 考研考博>>

考研

>>

三种方法解决分组排序编号问题(2种SQL+1种DATA STEP)

三种方法解决分组排序编号问题(2种SQL+1种DATA STEP)

发布:tj0412ymy | 分类:考研

关于本站

人大经济论坛-经管之家:分享大学、考研、论文、会计、留学、数据、经济学、金融学、管理学、统计学、博弈论、统计年鉴、行业分析包括等相关资源。
经管之家是国内活跃的在线教育咨询平台!

经管之家新媒体交易平台

提供"微信号、微博、抖音、快手、头条、小红书、百家号、企鹅号、UC号、一点资讯"等虚拟账号交易,真正实现买卖双方的共赢。【请点击这里访问】

提供微信号、微博、抖音、快手、头条、小红书、百家号、企鹅号、UC号、一点资讯等虚拟账号交易,真正实现买卖双方的共赢。【请点击这里访问】

最近看到很多疑难解惑的帖子(如:https://bbs.pinggu.org/thread-1255645-1-1.html)都在讨论分组排序的问题,包括如何分别在DATA步和SQL中实现这一功能?对此,特做一总结,共同分享!欢迎讨论!Q:原始数据集如下: ...
坛友互助群


扫码加入各岗位、行业、专业交流群


最近看到很多疑难解惑的帖子(如:https://bbs.pinggu.org/thread-1255645-1-1.html)都在讨论分组排序的问题,包括如何分别在DATA步和SQL中实现这一功能?对此,特做一总结,共同分享!欢迎讨论!
Q: 原始数据集如下:

Obs

var1

var2

1

A

z

2

A

y

3

A

x

4

A

t

5

B

s

6

B

d

7

C

f

8

C

g

9

C

h


A:想要得到一个分组排序的编号的变量flag, 期望的数据集如下:

Obs

var1

var2

flag

1

A

t

1

2

A

x

2

3

A

y

3

4

A

z

4

5

B

d

1

6

B

s

2

7

C

f

1

8

C

g

2

9

C

h

3


DATA步实现(简单快捷):
  1. data test;
  2. input var1 $ var2 $;
  3. cards;
  4. A z
  5. A y
  6. A x
  7. A t
  8. B s
  9. B d
  10. C f
  11. C g
  12. C h
  13. ;
  14. run;
  15. proc sort data=test;by var1 var2;run;
  16. data final;
  17. set test;
  18. by var1;
  19. if first.var1 then flag=1;
  20. else flag+1;
  21. run;
  22. proc print;run;
复制代码SQL实现1(借用monotonic() 函数):
  1. proc sql;
  2. create table test as
  3. select * from test order by var1,var2
  4. ;
  5. create table final as
  6. select a.var1,a.var2,(a.num-b.diff) as flag
  7. from
  8. (select var1,var2,monotonic() as num
  9. from test) as a,
  10. (select var1,var2,monotonic() as num,count(*) as obs,(calculated num-calculated obs) as diff
  11. from test
  12. group by var1
  13. having max(num)=num) as b
  14. where a.var1=b.var1
  15. ;
  16. quit;
  17. proc print;run;
复制代码
SQL实现2(增加一个temp变量,借助该变量实现):

  1. data test;
  2. input var1 $ var2 $ temp;
  3. cards;
  4. A z 1
  5. A y 1
  6. A x 1
  7. A t 1
  8. B s 1
  9. B d 1
  10. C f 1
  11. C g 1
  12. C h 1
  13. ;
  14. run;
  15. proc sort data=test;by var1 var2;
  16. run;
  17. proc sql noprint;
  18. create table final as
  19. select A.var1,A.var2,SUM (B.temp) as flag
  20. from test as A inner join test as B ON A.var1 = B.var1
  21. where B.var2 <= A.var2
  22. group by A.var1,A.var2 ;
  23. quit;
复制代码
扫码或添加微信号:坛友素质互助


「经管之家」APP:经管人学习、答疑、交友,就上经管之家!
免流量费下载资料----在经管之家app可以下载论坛上的所有资源,并且不额外收取下载高峰期的论坛币。
涵盖所有经管领域的优秀内容----覆盖经济、管理、金融投资、计量统计、数据分析、国贸、财会等专业的学习宝库,各类资料应有尽有。
来自五湖四海的经管达人----已经有上千万的经管人来到这里,你可以找到任何学科方向、有共同话题的朋友。
经管之家(原人大经济论坛),跨越高校的围墙,带你走进经管知识的新世界。
扫描下方二维码下载并注册APP
本文关键词:

本文论坛网址:https://bbs.pinggu.org/thread-1260188-1-1.html

人气文章

1.凡人大经济论坛-经管之家转载的文章,均出自其它媒体或其他官网介绍,目的在于传递更多的信息,并不代表本站赞同其观点和其真实性负责;
2.转载的文章仅代表原创作者观点,与本站无关。其原创性以及文中陈述文字和内容未经本站证实,本站对该文以及其中全部或者部分内容、文字的真实性、完整性、及时性,不作出任何保证或承若;
3.如本站转载稿涉及版权等问题,请作者及时联系本站,我们会及时处理。
经管之家 人大经济论坛 大学 专业 手机版