全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SAS专版
1806 8
2014-03-07
悬赏 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;



二维码

扫码加我 拉你入群

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

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

全部回复
2014-3-7 00:06:39
复制代码
二维码

扫码加我 拉你入群

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

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

2014-3-7 01:15:37
yongyitian 发表于 2014-3-7 00:06
谢谢大神的指点迷津!!!
二维码

扫码加我 拉你入群

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

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

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;
二维码

扫码加我 拉你入群

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

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

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

扫码加我 拉你入群

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

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

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;
二维码

扫码加我 拉你入群

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

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

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

说点什么

分享

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