重复项不在同一列时删除重复项

下面是我的数据(n> 3000)的样本,它将两个数字联系在一起:

id ab 1 7028344 7181310 2 7030342 7030344 3 7030354 7030353 4 7030343 7030345 5 7030344 7030342 6 7030364 7008059 7 7030659 7066051 8 7030345 7030343 9 7031815 7045692 10 7032644 7102337 

现在,问题是id = 2是id = 5的副本,id = 4是id = 8的副本。 所以,当我试图写if-then语句来将列a映射到列b ,基本上这些数字就被交换了。 我的完整数据中有很多这样的情况。

所以,我的问题是确定重复(s),并以某种方式删除重复项(id = 2或id = 5)之一。 我最好在Excel中做这个,但我也可以使用SQL Server或SAS。

先谢谢你。 请留言,如果我的问题不清楚。

我想要的是:

 id ab 1 7028344 7181310 2 7030342 7030344 3 7030354 7030353 4 7030343 7030345 6 7030364 7008059 7 7030659 7066051 9 7031815 7045692 10 7032644 7102337 

各种各样的方式来做到这一点。

在SAS或SQL中,这很简单(对于SQL Server,SQL部分应该是相同的或几乎是这样):

 data have; input id ab; datalines; 1 7028344 7181310 2 7030342 7030344 3 7030354 7030353 4 7030343 7030345 5 7030344 7030342 6 7030364 7008059 7 7030659 7066051 8 7030345 7030343 9 7031815 7045692 10 7032644 7102337 ;;;; run; proc sql undopolicy=none; delete from have H where exists ( select 1 from have V where V.id < H.id and (Va=Ha and Vb=Hb) or (Va=Hb and Vb=Ha) ); quit; 

excel解决scheme需要创build一个额外的列,我相信与两个string的串联,以顺序(任何顺序将做),然后查找,看看是否是第一行与该值或不。 我不认为如果不创build一个额外的列(或者使用VBA,如果可以使用的话也会有一个相当简单的解决scheme)就可以做到这一点。

编辑:实际上,Excel的解决scheme是可能的,而无需创build一个新的列(当然,你需要把这个公式放在某个地方,但没有另外的列)。

 =IF(OR(AND(COUNTIF(B$1:B1,B2),COUNTIF(C$1:C1,C2)),AND(COUNTIF(B$1:B1,C2),COUNTIF(C$1:C1,B2))),"DUPLICATE","") 

假设ID在A中,B和C包含值(并且没有标题行)。 该公式进入第二行(即B2 / C2值),然后扩展到更多行(因此第36行将使数组为B1:B35和C1:C35等)。 这将DUPLICATE放在上面的东西的重复行中,在行中是空白的,这些行是唯一的。

我没有testing过这个,但是这里有一些值得思考的东西,你可以join到自己的表中,并得到重复的ID

  SELECT id, a, b FROM [myTable] INNER JOIN ( SELECT id, a, b FROM [myTable] ) tbl2 ON [myTable].a = [tbl2].b OR [myTable].b = tbl2.a