楼主: clhclhjdz
1546 7

关于删除cell中的值问题 [推广有奖]

  • 1关注
  • 0粉丝

已卖:30份资源

博士生

82%

还不是VIP/贵宾

-

威望
0
论坛币
8 个
通用积分
3.0000
学术水平
1 点
热心指数
1 点
信用等级
1 点
经验
94 点
帖子
243
精华
0
在线时间
297 小时
注册时间
2011-11-4
最后登录
2019-10-20

楼主
clhclhjdz 发表于 2012-11-29 14:23:03 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
我的原有数据集如下
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值都删掉,求各位大侠帮帮忙 !             
二维码

扫码加我 拉你入群

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

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

关键词:cell cel SOSO 分类变量 各位大侠 最大的

沙发
ziyenano 发表于 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;


已有 1 人评分学术水平 热心指数 信用等级 收起 理由
clhclhjdz + 1 + 1 + 1 非常感谢你

总评分: 学术水平 + 1  热心指数 + 1  信用等级 + 1   查看全部评分

藤椅
pobel 在职认证  发表于 2012-11-29 14:45:20
  1. data test;
  2. input X $    Y  ;
  3. cards;
  4. a       3                          
  5. a       2                          
  6. a       0                          
  7. a       0                          
  8. b      2                           
  9. b      0                           
  10. b      0
  11. b      -1
  12. c      1
  13. c      2
  14. c      3
  15. c      2
  16. c      5
  17. d      4
  18. d      2
  19. d      0
  20. e      9
  21. e      0
  22. e      -2
  23. f     0
  24. f     0
  25. f     -2
  26. ;

  27. proc sql;
  28.   create table test1 as
  29.    select x,y,count(*) as num
  30.    from test
  31.    group by x,y
  32.    order by x,y desc;
  33. quit;

  34. data test2;
  35.    set test1;
  36.    by x descending y;
  37.    if first.x then count=0;
  38.    if count<3 and ^(count>0 and num=2 and y=0) then do i=1 to num;
  39.       output;
  40.         end;
  41.    count+num;
  42.    keep x y;
  43. run;
复制代码
已有 1 人评分学术水平 热心指数 信用等级 收起 理由
clhclhjdz + 1 + 1 + 1 太感谢你了

总评分: 学术水平 + 1  热心指数 + 1  信用等级 + 1   查看全部评分

和谐拯救危机

板凳
老师她摸我 发表于 2012-11-29 15:04:15
欢迎加入SAS群:144839730-蜗牛

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


地板
ziyenano 发表于 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;

7
ziyenano 发表于 2012-11-29 21:00:57
pobel 发表于 2012-11-29 14:45
貌似有点小bug;
data test;
input
X $      Y;
cards;
a       3                           
a       0                           
a       0                           
a       0                           
b      2                           
b      0                           
b      0
b      -1
c      1
c      2
c      3
c      5   
;
run;
当有3个0的情况,会有点问题

8
clhclhjdz 发表于 2012-11-29 23:31:33
ziyenano 发表于 2012-11-29 15:06
不好意思,上面的回答,逻辑上有错,看pobel的吧~
没事 一样学到了东西 哈哈

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

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2026-1-1 05:12