楼主: rdsc2006
2355 11

[原创博文] 求高手解答,sas中sql模块的应用小问题 [推广有奖]

  • 1关注
  • 0粉丝

初中生

33%

还不是VIP/贵宾

-

威望
0
论坛币
0 个
通用积分
0
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
102 点
帖子
15
精华
0
在线时间
13 小时
注册时间
2010-9-5
最后登录
2015-8-4

楼主
rdsc2006 发表于 2012-8-28 22:31:05 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
data a;
input a b ;
cards;
1 12
1 18
2 12
2 19
3 18
3 49
4 91
4 80
4 11
5 120
5 14
5 68
;
run;

以a列对b列去重,去重要求:1、b值为12 或 18 时,取12 或 18,若同时出现,则取两者最小值
2、若 b值均不为12 或 18,且b值均小于100,则取最小值
3、若 b值均不为12 或 18,且b值有大于100,则取100以上最小值

求高手用sas中的sql帮忙解决一下这个难题,谢谢啦!

就是想达到
输出结果为:
1 12
2 12
3 18
4 11
5 120
的目的
二维码

扫码加我 拉你入群

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

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

关键词:求高手解答 求高手 sql 小问题 cards

回帖推荐

ntsean 发表于8楼  查看完整内容

proc sql; select a, case when sum(b=12) then 12 when sum(b=18) then 18 when sum(b>100)=0 then min(b) else (select min(b) from a where a=a.a and b>100) end as value from a group by a; quit;

本帖被以下文库推荐

沙发
390814002 在职认证  发表于 2012-8-28 22:49:36
牛逼!

藤椅
你猜~~~ 发表于 2012-8-28 23:05:24
不会。。帮顶

板凳
rdsc2006 发表于 2012-8-29 00:05:29
求高手解答一二

报纸
zhangmin317 发表于 2012-8-29 09:30:20
问题没看明白…
爱国爱党爱人民

地板
rdsc2006 发表于 2012-8-29 09:36:31
就是想达到
输出结果为:
1 12
2 12
3 18
4 11
5 120

的目的

7
playmore 发表于 2012-8-29 10:49:47
我大概写了一个能完成任务但肯定不是最优的
一个sql步完不成,用了两个
第一个得到每个group中的12,18或最小值
第二个就进行判断,有12的取12,有18没12的取18,剩下的取最小值
  1. proc sql noprint;
  2.         create table b as
  3.                 select * from a
  4.                 group by a
  5.                 having b=12 or b=18 or (max(b)<100 and b=min(b)) or (max(b)>=100 and b>=100);
  6. quit;

  7. proc sql noprint;
  8.         create table c as
  9.                 select * from b
  10.                 group by a
  11.                 having count(*)=1 or (count(*)=2 and b=12) or (count(*)=2 and min(b)^=12 and b=18) or (count(*)=3 and b=12)
  12.                 order by a,b;
  13. quit;
复制代码
playmore邀请您访问ChinaTeX论坛!!!进入ChinaTeX论坛

8
ntsean 发表于 2012-8-29 11:35:18
proc sql;
   select a,
   case
       when sum(b=12) then 12
       when sum(b=18) then 18
       when sum(b>100)=0 then min(b)
           else (select min(b) from a where a=a.a and b>100)
   end as value
   from a
   group by a;
quit;
已有 1 人评分经验 论坛币 收起 理由
bakoll + 3 + 3 精彩帖子

总评分: 经验 + 3  论坛币 + 3   查看全部评分

9
rdsc2006 发表于 2012-8-29 12:37:24
ntsean 发表于 2012-8-29 11:35
proc sql;
   select a,
   case
太感谢了!膜拜一下。

10
rdsc2006 发表于 2012-8-29 12:40:04
playmore 发表于 2012-8-29 10:49
我大概写了一个能完成任务但肯定不是最优的
一个sql步完不成,用了两个
第一个得到每个group中的12,18或 ...
也谢谢你啊!

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

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