全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SAS专版
28985 9
2016-11-09
数据是这样的tt=
grouabc
arm1ynn
arm1yyn
arm2nnn
arm2nyn
我编的代码是
pro sql;
    create table mm as select count(a="y") as a1, count(b="y") as b1, count(c="y") as c1 group by grou;
quit;
希望出现的效果是
a1b1c1
arm1

2

1

0

arm2

0

1

0

但是没有效果,sas并没有区分“y”和“n”;而是一起统计进去了!


二维码

扫码加我 拉你入群

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

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

全部回复
2016-11-9 14:47:56
count 好像不行,因为逻辑值为 0或1,count以后是总数
可以改为sum()函数,这样只累计那些条件成立的记录
二维码

扫码加我 拉你入群

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

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

2016-11-9 15:13:22
baiyaoqian 发表于 2016-11-9 14:47
count 好像不行,因为逻辑值为 0或1,count以后是总数
可以改为sum()函数,这样只累计那些条件成立的记录
sum不行,sum要求是数值变量,字符型的不行!
二维码

扫码加我 拉你入群

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

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

2016-11-9 15:41:07
sum应该可以:

proc sql;
create table wanted as
select grou, sum(a='y') as a1, sum(b='y') as b1, sum(c='y') as c1
from tt
group by grou;
quit;

用data步也比较方便:

proc sort data=tt;
by grou;
run;

data wanted;
set tt;
by grou;
if first.grou then do;
   a1=0;b1=0;c1=0;
end;
if a='y' then a1+1;
if b='y' then b1+1;
if c='y' then c1+1;
if last.grou;
keep grou a1 b1 c1;
run;

二维码

扫码加我 拉你入群

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

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

2016-11-9 17:18:33
baiyaoqian 发表于 2016-11-9 14:47
count 好像不行,因为逻辑值为 0或1,count以后是总数
可以改为sum()函数,这样只累计那些条件成立的记录
sum可以,刚才我错了
二维码

扫码加我 拉你入群

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

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

2016-11-9 17:19:14
wwang111 发表于 2016-11-9 15:41
sum应该可以:

proc sql;
恩,不过最近对sql着魔了!
二维码

扫码加我 拉你入群

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

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

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

说点什么

分享

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