楼主: jiaqitang11
1340 4

[问答] SQL中ROW——NUMBER() OVER PARTITION函数怎么用在SAS? [推广有奖]

  • 0关注
  • 0粉丝

高中生

57%

还不是VIP/贵宾

-

威望
0
论坛币
5 个
通用积分
0.0057
学术水平
2 点
热心指数
0 点
信用等级
0 点
经验
176 点
帖子
18
精华
0
在线时间
33 小时
注册时间
2021-5-23
最后登录
2023-9-12

相似文件 换一批

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
请看附件这段SQL代码? 用在SAS PROC SQL,不支持ROW_NUMBER() OVER PARTITION函数

怎么转为DATA STEP?
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

关键词:partition Number PARTI Over PART

图片2.png (22.23 KB)

图片2.png

已有 1 人评分论坛币 学术水平 收起 理由
whymath + 5 + 2 观点有启发

总评分: 论坛币 + 5  学术水平 + 2   查看全部评分

这个函数不熟悉,查了一下是分区编号的功能。不知道理解的对不对。
/*row_number() over(partition by sex)*/

proc sort data=sashelp.class;
    by sex;
run;

data test;
    set sashelp.class;
    by sex;
    retain id;
    id+1;
    if first.sex then id=1;
run;

使用道具

藤椅
whymath 发表于 2022-6-9 22:31:07 |只看作者 |坛友微信交流群
使用SAS下的SQL,仍然有几种可选的做法来生成行号。
1. 连接到Oracle,然后将SQL交给Oracle执行,Oracle的SQL标准不同于SAS的ANSI 1992,row_number()函数受到支持;
2. 使用内置monotonic()函数;
  1. proc sql noprint;
  2.   create table class as
  3.   select *, monotonic() as monotonic from sashelp.class
  4.   order by sex, name
  5.   ;
  6. quit;
复制代码

3. 使用SAS函数resolve(),并利用SAS逐行处理数据的特点;
  1.   %let i=1;
  2.   create table class2 as
  3.   select *, resolve('&i %let i=%eval(&i+1)') as rownum from sashelp.class
  4.   order by sex, name
  5.   ;
复制代码

4. 利用SQL的子查询;
  1.   create table class3 as
  2.   select *, (select sum(catx('',b.sex,b.name)<=catx('',a.sex,a.name)) from sashelp.class b) as rownum
  3.   from sashelp.class as a
  4.   order by sex, name
  5.   ;
复制代码


应当说明,方法2与3是在读入原数据时生成行号,方法4则是在生成新数据时生成行号,因此结果有所不同。
对方法4略加变化,可以得到符合题意的示例程序:
  1.   create table class4 as
  2.   select *, (select sum(b.name<=a.name) from sashelp.class b where a.sex=b.sex) as rownum
  3.   from sashelp.class as a
  4.   order by sex, name
  5.   ;
复制代码

使用道具

板凳
jiaqitang11 发表于 2022-6-10 11:25:49 |只看作者 |坛友微信交流群
SQL中有PARTITION BY 分组生序号。

你的这几个例子就是重头排序号,没分组吧

使用道具

报纸
whymath 发表于 2022-6-10 16:10:00 |只看作者 |坛友微信交流群
jiaqitang11 发表于 2022-6-10 11:25
SQL中有PARTITION BY 分组生序号。

你的这几个例子就是重头排序号,没分组吧
SQL和SAS中的proc sql不可混为一谈。
我的例子中最后一例即分组排序,谈何“没分组吧”?

使用道具

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群

京ICP备16021002-2号 京B2-20170662号 京公网安备 11010802022788号 论坛法律顾问:王进律师 知识产权保护声明   免责及隐私声明

GMT+8, 2024-4-28 05:56