全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SAS专版
2652 3
2016-07-02
悬赏 10 个论坛币 已解决
不是说好的Group只能和Having连用么???

有这样一个data set:
data Employee;
input EmpId$  Name $ Gender $ DepId  $ Salary  Bonus DOB;
informat DOB mmddyy8.;
format DOB date9.;
cards;
1400 Mary F ME1 29769 587 09/18/87
1403 Eric M ME3 28072 342 06/05/93
1120 Jenny F ME2 28619 986 03/27/95
1120 Jenny F ME2 28619 986 03/27/95
1156 Daniel M ME3 32619 523 07/12/92
1116 CiCi F ME2 46943 591 01/23/90
1131 Sophie F ME3 18745 537 11/14/93
1124 Steven M ME1 58376 935 08/28/96
1106 Ricky M ME3 36578 286 04/20/88
1234 Cindy F ME1 96465 275 12/06/94
;
run;

下面的coding没有报错,而且还出现了正是我想要的结果:
proc sql;
select gender, count(distinct EmpId) as N
from Employee
where DOB between '01JAN1992'd and '31DEC1999'd
group by gender;
quit;

这是我最开始想写的coding:
proc sql;
select gender, count(distinct EmpId) as N
from Employee
group by gender
having DOB between '01JAN1992'd and '31DEC1999'd;
quit;
可这段的结果却显示出了好几条!怎么就不是两条呢???

求指教,多谢多谢!!

最佳答案

pobel 查看完整内容

应该是这样: 第一个例子0里, 1. sql先执行where语句,把dob满足条件的选出来; 2. 再根据gender分组执行select中的count; 第二个例子里, 1. sql先根据gender分组执行select,数出distinct empid; 这里用的是整个数据集。 2. 对1的结果执行having的条件。
二维码

扫码加我 拉你入群

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

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

全部回复
2016-7-2 09:09:59
应该是这样:
第一个例子0里,
1. sql先执行where语句,把dob满足条件的选出来;
2. 再根据gender分组执行select中的count;

第二个例子里,
1. sql先根据gender分组执行select,数出distinct empid;
    这里用的是整个数据集。
2. 对1的结果执行having的条件。
二维码

扫码加我 拉你入群

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

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

2016-7-4 12:19:48
pobel 发表于 2016-7-2 12:39
应该是这样:
第一个例子0里,
1. sql先执行where语句,把dob满足条件的选出来;
{:3_42:}
二维码

扫码加我 拉你入群

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

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

2016-7-6 09:48:36
pobel 发表于 2016-7-2 09:09
应该是这样:
第一个例子0里,
1. sql先执行where语句,把dob满足条件的选出来;
学习了,不胜感激!![em49]
二维码

扫码加我 拉你入群

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

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

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

说点什么

分享

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