【发布时间】:2018-09-04 23:51:11
【问题描述】:
我想将一个数据集分成两个子集。我希望第一个子集包含 id 或 id1 值多次出现的所有行。
喜欢这个,
data test;
input id id1 var1 $ var2 $;
datalines;
1 11 A B
2 22 C D
3 11 E F
3 12 G H
7 15 K L
3 13 M N
2 10 I J
8 16 P L
;;;;
run;
我希望子集是
1 11 A B
2 22 C D
3 11 E F
3 12 G H
3 13 M N
2 10 I J
和
7 15 K L
8 16 P L
我可以使用下面的代码,但效率不高,因为拆分时有两次通过数据集。还有其他选择吗?
proc sql;
create table DuplicateId as
select id from test
group by id
having count(id) > 1;
quit;
proc sql;
create table DuplicateID1 as
select id1 from test
group by id1
having count(id1) > 1;
quit;
proc sql;
create table split1 as
select * from test
where id not in (select id from DuplicateID) and id1 not in (select id1 from DuplicateID1);
quit;
proc sql;
create table split2 as
select * from test
where id in (select id from DuplicateID) or id1 in (select id1 from DuplicateID1);
quit;
【问题讨论】:
-
将它发布到communities.sas.com 上,这样的问题您会得到更好的答复。最好的解决方案可能需要一个 HASH 或 DoW 循环,这可能仍然是数据的两次传递,尽管可能更有效。我添加了一个分号 - 您的数据步骤缺少正确运行。