SAS中文论坛

标题: 求助如何在sas中实现row_number功能 [打印本页]

作者: shiyiming    时间: 2011-5-26 13:18
标题: 求助如何在sas中实现row_number功能
数据库中的row_number语句不能再sas中应用。
例如:
proc sql;
select
id
,row_number() over(partition by id order by x desc)
from maps.world
;
quit;
作者: shiyiming    时间: 2011-5-26 17:17
标题: Re: 求助如何在sas中实现row_number功能
功能是什么啊?
作者: shiyiming    时间: 2011-5-26 21:07
标题: Re: 求助如何在sas中实现row_number功能
Ahuige mentioned a SAS SQL function of [b:2pnmzhpm]MONOTONIC( )[/b:2pnmzhpm], giving the row number of the table. I find this function is sort of bizarre. Honestly, i have never come with a good example on my own.
Jingju
作者: shiyiming    时间: 2011-5-27 13:07
标题: Re: 求助如何在sas中实现row_number功能
例如:
proc sql;
create table test.tmp_test
(
user_id char(10)
,update_time char(15)
);
insert into test.tmp_test values('asia2011','20110529');
insert into test.tmp_test values('asia2011','20110528');
insert into test.tmp_test values('asia2011','20110527');
insert into test.tmp_test values('link2011','20110529');
insert into test.tmp_test values('link2011','20110528');
insert into test.tmp_test values('link2011','20110527');
run;
proc sql;
select
user_id
,update_time
,row_number() over(partition by user_id ,ordre by update_time)
from test.tmp_test
;
quit;

返回的结果应该是:
'asia2011'    '20110529'  1
'asia2011'    '20110529'  2
'asia2011'    '20110529'  3
'link2011'    '20110529'  1
'link2011'    '20110529'  2
'link2011'    '20110529'  3

但是系统中没有这个函数,不知道sas里面有没有类似的函数可以直接实现或者间接实现也行。
作者: shiyiming    时间: 2011-5-30 16:45
标题: Re: 求助如何在sas中实现row_number功能
经过几天的研究,已经解决。如下:
/*在进行rank排序之前,必须对表进行排序,除非此表已经做过排序*/
proc sort data=test.dw_user_20110422;
by user_id;
run;

/*虽然已经排序,但是一模一样的两条数据排序一样。如果想唯一,就只有max一下字段了。*/
proc rank data=test.dw_user_20110422 out=test.dw_user_20110421 ties=low;
        by user_id;
    var long;
    ranks user_id_m;
run;




欢迎光临 SAS中文论坛 (http://mysas.net/forum/) Powered by Discuz! X3.2