楼主: jungsee
1870 8

删除数据的问题 [推广有奖]

  • 0关注
  • 10粉丝

已卖:857份资源

讲师

31%

还不是VIP/贵宾

-

威望
0
论坛币
2094 个
通用积分
76.6887
学术水平
12 点
热心指数
15 点
信用等级
8 点
经验
75593 点
帖子
255
精华
0
在线时间
637 小时
注册时间
2004-12-20
最后登录
2025-10-16

楼主
jungsee 发表于 2014-3-7 00:06:38 |AI写论文
20论坛币
我的问题是这样的:假如数据中,例如以下的模拟数据,同一id下面,只要存在一个z=1 ,那么所对应的id 所有的数据行全部删除。 那么,下面的数据运行后,只剩下id  x   y  z=【3  4   5   6】。这个程序我也编了一下,太繁复,希望哪位大神提供一个简单的计算程序,谢谢大神!!!

data a;
input id $2.  x   y  z ;
datalines;
1   2   4  6
1   5   7  1
1   3   4  1
1   2   5  7
2   4   7  1
2   4   1  7
2   9   4  5
2   8   7  3
3   4   5  6
;
run;



关键词:Input Lines Data line 模拟数据 SAS程序

沙发
yongyitian 发表于 2014-3-7 00:06:39
  1. input id $2.  x   y  z ;
  2. datalines;
  3. 1   2   4  6
  4. 1   5   7  1
  5. 1   3   4  1
  6. 1   2   5  7
  7. 2   4   7  1
  8. 2   4   1  7
  9. 2   9   4  5
  10. 2   8   7  3
  11. 3   4   5  6
  12. ;
  13. run;
  14. data b;
  15.     flag='N';
  16.     retain flag;
  17.     do until(last.id);
  18.        set a; by id;
  19.        if z = 1 then flag='Y';
  20.     end;
  21.     do until(last.id);
  22.        set a; by id;
  23.        if flag='N' then output;
  24.     end;
  25.     drop flag;
  26. run;
复制代码
已有 1 人评分经验 论坛币 学术水平 热心指数 信用等级 收起 理由
Imasasor + 80 + 80 + 4 + 3 + 4 热心帮助其他会员

总评分: 经验 + 80  论坛币 + 80  学术水平 + 4  热心指数 + 3  信用等级 + 4   查看全部评分

藤椅
jungsee 发表于 2014-3-7 01:15:37
yongyitian 发表于 2014-3-7 00:06
谢谢大神的指点迷津!!!

板凳
kunkunred 发表于 2014-3-7 06:36:09
Here is a version easier to understand.


data a;
input id $2.  x   y  z ;
datalines;
1   2   4  6
1   5   7  1
1   3   4  1
1   2   5  7
2   4   7  1
2   4   1  7
2   9   4  5
2   8   7  3
3   4   5  6
;
run;
proc sort data=a out=id(keep=id) nodupkey;
by id;
where z=1;
run;
proc sort data=a;
by id;
data b;
merge a id(in=b);
by id;
if ~b;
run;

报纸
jungsee 发表于 2014-3-7 09:32:16
kunkunred 发表于 2014-3-7 06:36
Here is a version easier to understand.
对,这个算法不错,谢谢您的回复!!!

地板
shenliang_111 发表于 2014-3-9 13:52:53
jungsee 发表于 2014-3-7 01:15
谢谢大神的指点迷津!!!
data a;
input id $2.  x   y  z ;
datalines;
1   2   4  6
1   5   7  1
1   3   4  1
1   2   5  7
2   4   7  1
2   4   1  7
2   9   4  5
2   8   7  3
3   4   5  6
;
run;
/*data step*/
proc sort data=a;
by id;
run;
data result;
flag=0;
drop flag;
do _n_=1 by 1 until(last.id);
set a;
by id;
flag+(z=1);
end;
do _n_=1 to _n_;
set a;
if flag=0 then output;
end;
run;
/*SQL*/
proc sql noprint;
create table result_sql
as
select a.*
from a
left join
(
select id,sum(case when z=1 then 1 else 0 end) as c1
from a
group by id
)b
on a.id=b.id
where c1=0;
quit;

7
jungsee 发表于 2014-3-10 01:19:26
shenliang_111 发表于 2014-3-9 13:52
data a;
input id $2.  x   y  z ;
datalines;
谢谢您的回复,您对SQL的理解比较深刻,向您学习!!!

8
farmman60 发表于 2014-3-10 04:36:25

proc sql;
  select * from a group by id having id not in (select distinct id  from a where z=1 group by id);
  quit;

9
jungsee 发表于 2014-3-10 14:27:07
farmman60 发表于 2014-3-10 04:36
proc sql;
  select * from a group by id having id not in (select distinct id  from a where z=1 gr ...
好,够简洁,谢谢!!!

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

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2025-12-30 09:40