全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SAS专版
5091 5
2010-01-06
我的数据格式是这样的:

v1    v2    v3    v4
A     李   65    55   
A    张    71    33
A    刘    96    49
B    李    89    66
B    秦    61    88
B    伍    99    75

我写了这样的语句,目的是求出v1相同时,v3 的最大值/最小值/平均值,并且输出的时候将含有极值的数据整行输出:

proc sql output data=t;
select v1,v2,v3,v4, max(v3) as max, min(v3) as min, mean(v3) as mean
from work.A
group by v1;
run;

我想要得到的结果是这样的:
v1    v2    v3    v4    mean
A     李   65    55                               /* 就是v1=A时,v3最小值的这整行*/
A    刘    96    49
B    秦    61    88                               /* 就是v1=B时,v3最小值的整行*/
B    伍    99    75

可是,出来的结果不是这样的,乱七八糟,我写的肯定有问题,希望大侠们可以帮我改改,怎么可以达到我想要的效果呢?
二维码

扫码加我 拉你入群

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

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

全部回复
2010-1-6 02:24:00
非常谢谢啦!!!!!!!!
二维码

扫码加我 拉你入群

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

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

2010-1-6 09:19:34
或者改成这样行不行?不过运行的时候还是错,哪位大侠指点一下菜鸟,谢谢了!

proc sql output data=t;
select v1,v2,v3,v4
from work.A
where v3=max(v3) or v3=min(v3)
group by v1;
run;
二维码

扫码加我 拉你入群

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

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

2010-1-6 09:30:27
SELECT *
FROM a, [SELECT v1,Max(a.v3) AS MaxV3,avg(a.v3) as AVGV3
FROM a
GROUP BY a.v1]. AS b
WHERE a.v1= b.v1 and a.v3=b.maxv3 union
SELECT *
FROM a, [SELECT v1,Min(a.v3) AS MinV3,avg(a.v3) as AVGV3
FROM a
GROUP BY a.v1]. AS c
WHERE a.v1= c.v1 and a.v3=c.minv3
二维码

扫码加我 拉你入群

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

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

2010-1-6 09:52:48
谢谢楼上的,不过我按着您的方法改了一下,还是不行
二维码

扫码加我 拉你入群

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

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

2010-1-6 11:51:01
data x;
input v1$    v2$    v3    v4 ;
cards;
A     李   65    55   
A    张    71    33
A    刘    96    49
B    李    89    66
B    秦    61    88
B    伍    99    75
;run;

proc sql ;create table t as
select  *, mean(v3) as mean
from x group by v1 having  
v3=min(v3) or v3=max(v3) order v1,v3;run;
二维码

扫码加我 拉你入群

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

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

相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

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