楼主: playmore
2342 9

[有偿编程] 请问如何删除每组第一个观测,仅有一个则不删 [推广有奖]

已卖:1645份资源

学科带头人

2%

还不是VIP/贵宾

-

TA的文库  其他...

R相关

经济学相关

金融工程

威望
1
论坛币
16356 个
通用积分
8.6697
学术水平
372 点
热心指数
394 点
信用等级
341 点
经验
15297 点
帖子
1194
精华
1
在线时间
1332 小时
注册时间
2007-1-11
最后登录
2025-12-1

初级学术勋章 初级热心勋章 中级热心勋章

楼主
playmore 发表于 2013-7-22 16:45:59 |AI写论文
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;
关键词:proc sql having data步 Lines Input 如何

本帖被以下文库推荐

  • · sas|主题: 59, 订阅: 14
playmore邀请您访问ChinaTeX论坛!!!进入ChinaTeX论坛

沙发
pobel 在职认证  发表于 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;
已有 1 人评分学术水平 热心指数 信用等级 收起 理由
playmore + 1 + 1 + 1 观点有启发

总评分: 学术水平 + 1  热心指数 + 1  信用等级 + 1   查看全部评分

和谐拯救危机

藤椅
caoqiong76 发表于 2013-7-22 16:55:44
好,谢谢

板凳
ziyenano 发表于 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;

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

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

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

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

我还想着必须要再加一步删变量呢
还是sql用得不熟啊
playmore邀请您访问ChinaTeX论坛!!!进入ChinaTeX论坛

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

data have;
很赞,学习了~~
衣带渐宽终不悔,为伊消得人憔悴~~

8
可~乐 发表于 2013-7-22 18:03:10
  1. data have;
  2. input Cat $ Val;
  3. datalines;
  4. A 1
  5. A 2
  6. B 3
  7. C 4
  8. C 5
  9. C 6
  10. ;
  11. run;

  12. proc sort data=have;
  13.         by cat;
  14. run;

  15. data want;
  16.         set have;
  17.         by Cat;
  18.         if first.cat and first.cat^=last.cat then delete;
  19. run;
复制代码
已有 1 人评分学术水平 热心指数 信用等级 收起 理由
playmore + 1 + 1 + 1 观点有启发

总评分: 学术水平 + 1  热心指数 + 1  信用等级 + 1   查看全部评分

9
playmore 发表于 2013-7-23 09:05:42
可~乐 发表于 2013-7-22 18:03
嗯,这样也行
之前没想到,就想着用sql了
playmore邀请您访问ChinaTeX论坛!!!进入ChinaTeX论坛

10
sasha2000 发表于 2013-7-23 15:58:49
用First和Last的较为传统的解决方案。

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

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