2

テーブル内の 1 つの列の重複した結果のみを保持しようとしています。これは私が持っているものです。

proc sql; 
    create table DUPLICATES as 
    select Address, count(*) as count 
    from TEST_TABLE
    group by Address
    having COUNT gt 1 
    ;
quit;

これを行うためのより簡単な方法、または私が考えていなかった代替手段はありますか? 答えを得るために元のテーブルと再結合する必要があるのはばかげているようです。

4

4 に答える 4

8

nodupkey と dupout で proc sort を使用すると、データが重複排除され、元のデータセットからの重複レコードを含む「out」データセットが得られますが、「out」データセットには ID 変数を持つすべてのレコードが含まれていません。 、4番目...N番目。したがって、この方法を使用する場合、ID 変数のすべての重複オカレンスを比較するわけではありません。何を削除したいのかが分かっていて、これを正確に制限するのに十分な変数を定義している場合、または重複した ID を持つレコードがあらゆる点で同一であり、それらを削除したいだけであることがわかっている場合に最適です。

受信した生ファイルに重複がある場合、ID が複数回出現するすべてのレコードを比較するのが好きです。

proc sort data=test nouniquekeys
     uniqueout=singles
           out=dups;
by=ID;
run;
  • nouniquekeysは、「out」DS から一意の観測を削除します
  • uniqueout=dsnameは一意の観測値を格納します
  • out=dsnameは残りの観測値を格納します

繰り返しになりますが、この方法は、乱雑な生データを処理したり、コードが重複を生成した可能性がある場合にデバッグしたりするのに最適です。

于 2016-01-12T18:45:55.720 に答える
8
proc sort data=TEST_TABLE;
    by Address;
run;

data DUPLICATES;
    set TEST_TABLE;
    by Address;
    if not (first.Address and last.Address) then output;
run;
于 2013-06-17T21:40:43.880 に答える
7

これは、データ ステップを使用すると簡単です。

proc sort data=TEST_TABLE nodupkey dupout=dups; 
 by Address; 
run; 

詳細については、このドキュメントを参照してください

于 2013-06-18T00:29:42.337 に答える
1
select field,count(field) from table 
group by field having count(field) > 1
于 2013-06-17T14:20:57.610 に答える