全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SAS专版
1490 7
2012-11-29
我的原有数据集如下
X       Y                               然后我希望得到的数据集为    X     Y
a       3                                                                         a      3
a       2                                                                         a      2
a       0                                                                         b      2
a       0                                                                         c      5
b      2                                                                          c      3
b      0                                                                          c      2
b      0
b      -1
c      1
c      2
c      3
c      5                意思就是 取每个分类变量的前3个最大的值,若其中第2个与第3个重复或第3个与第4个重复都为0,则0值都删掉,求各位大侠帮帮忙 !            
二维码

扫码加我 拉你入群

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

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

全部回复
2012-11-29 14:42:17
data ex;
input
X $      Y;
cards;
a       3                           
a       2                           
a       0                           
a       0                           
b      2                           
b      0                           
b      0
b      -1
c      1
c      2
c      3
c      5   
;
run;

proc sort data=ex out=ex1;
by x descending y;
run;

data ex2(drop=id);
set ex1;
by x;
retain id;
if first.x  then id=1;
else id+1;
if id le 3 and y ne 0 then output;
run;


二维码

扫码加我 拉你入群

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

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

2012-11-29 14:45:20
复制代码
二维码

扫码加我 拉你入群

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

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

2012-11-29 15:04:15
二维码

扫码加我 拉你入群

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

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

2012-11-29 15:06:19
不好意思,上面的回答,逻辑上有错,看pobel的吧~


二维码

扫码加我 拉你入群

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

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

2012-11-29 20:58:20
data ex;
input
X $      Y;
cards;
a       3                           
a       2                           
a       0                           
a       0                           
b      2                           
b      0                           
b      0
b      -1
c      1
c      2
c      3
c      5   
;
run;

proc sort data=ex out=ex1;
by x descending y;
run;

data ex2;
merge ex1 ex1(firstobs=2 drop=x rename=(y=y1));
run;

data ex3(drop=id);
set ex2;
by x;
retain id;
if first.x  then id=1;
else id+1;
if id le 3 and (y ne 0 or (y1 ne 0 and lag(y) ne 0)) then output;
run;
二维码

扫码加我 拉你入群

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

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

点击查看更多内容…
相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群