全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SAS专版
2299 9
2013-07-22
悬赏 100 个论坛币 已解决
有如下所示的数据集

data have;
input Cat $ Val;
datalines;
A 1
A 2
B 3
C 4
C 5
C 6
;
run;

我的目的是:如果一个组里只有一个观测,则保留;若有多个,则删除第一个,保留余下的
我估计用data步的话,一步是不行的
我想用一步proc sql解决,不知道having子句该怎么写
请教大神了

最佳答案

pobel 查看完整内容

不知道这样是不是楼主想要的结果: data have; input Cat $ Val; datalines; A 1 A 2 C 88 B 3 C 4 C 5 C 6 ; run; proc sql; create table wanted(drop=tmp) as select *,monotonic() as tmp from have group by cat having count(*)=1 or tmp>min(tmp) order by tmp; quit;
二维码

扫码加我 拉你入群

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

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

全部回复
2013-7-22 16:46:00
不知道这样是不是楼主想要的结果:

data have;
input Cat $ Val;
datalines;
A 1
A 2
C 88
B 3
C 4
C 5
C 6
;
run;

proc sql;
  create table wanted(drop=tmp) as
   select *,monotonic() as tmp
    from have
        group by cat
    having count(*)=1 or tmp>min(tmp)
    order by tmp;
quit;
二维码

扫码加我 拉你入群

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

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

2013-7-22 16:55:44
好,谢谢
二维码

扫码加我 拉你入群

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

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

2013-7-22 16:58:31
多个排序
proc sort data=have;
by cat;
run;

data want;
set have;
by cat;
if first.cat and ^last.cat then delete;
run;
二维码

扫码加我 拉你入群

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

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

2013-7-22 17:06:51
看需求的话,数据的顺序应该是不能动的:
data want;
set have;
by cat notsorted;
if first.cat and ^last.cat then delete;
run;
二维码

扫码加我 拉你入群

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

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

2013-7-22 17:31:00
pobel 发表于 2013-7-22 17:16
不知道这样是不是楼主想要的结果:

data have;
对,就是这样,多谢pobel神

我只想到了得用个辅助变量,但是不知道这一步
create table wanted(drop=tmp) as

我还想着必须要再加一步删变量呢
还是sql用得不熟啊
二维码

扫码加我 拉你入群

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

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

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

说点什么

分享

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