0

これは、2 つの数値を結び付ける私のデータ (n>3000) のサンプルです。

id  a       b
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 の複製であることです。aそのため、 columnを columnにマップする if-then ステートメントを作成しようとするとb、基本的に数値が入れ替わってしまいます。私の完全なデータでは、このようなケースがたくさんあります。

したがって、私の質問は、重複を特定し、何らかの方法で重複の 1 つ (id=2 または id=5) を削除することです。できれば Excel でこれを行いたいのですが、SQL Server や SAS でも作業できます。

前もって感謝します。私の質問が明確でない場合はコメントしてください。

私が欲しいもの:

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

2 に答える 2

2

これを行うためのあらゆる種類の方法。

SAS または SQL では、これは単純です (SQL Server の場合、SQL 部分は同一またはほぼ同一である必要があります)。

data have;
input id a b;
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 (V.a=H.a and V.b=H.b) or (V.a=H.b and V.b=H.a)
);
quit;

Excelソリューションでは、2つの文字列を順番に連結して追加の列を作成し(任意の順序で実行できます)、それがその値を持つ最初の行であるかどうかを確認する必要があります。追加の列を作成せずに(またはVBAを使用して、それを使用できればかなり簡単な解決策もある)、それを行うことはできないと思います。

編集:実際には、新しい列を作成しなくてもExcelソリューションは可能です(まあ、この式をどこかに置く必要がありますが、別の列を追加する必要はありません)。

=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 には値が含まれます (ヘッダー行はありません)。その式は 2 行目 (つまり、B2/C2 値) に入り、さらに行に拡張されます (したがって、行 36 の配列は B1:B35 と C1:C35 などになります)。これにより、上記の何かの重複である行に DUPLICATE が配置され、一意の行に空白が配置されます。

于 2012-12-07T20:49:23.790 に答える
0

私はこれをテストしていませんが、ここでいくつか考えてみます。それ自体に対してテーブルに参加し、重複している 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
于 2012-12-07T20:51:27.260 に答える