BookmarkSubscribeRSS Feed

[SAS 활용 FAQ] Getting All Duplicates within a SAS Data Set

Started ‎11-16-2021 by
Modified ‎11-16-2021 by
Views 517

소개

 

데이터를 다루는 일반적인 작업은 데이터 세트에 여러 번 나타나는 모든 측정치를 확보하는 것입니다. 즉, 중복을 확보하는 것입니다. SAS *에서 데이터 세트의 중복치를 직접 제공하는 절차나 기능이 없다는 것이 밝혀졌습니다.

* 업데이트: Fareeza Khurshed가 친절히 말씀해 주셨듯이, PROC SORT의 NOUNIQUEKEY 옵션은 SAS 9.3+에서 직접 중복을 생성할 수 있습니다.

 

SAS 내 잘못된 중복 생성 방법

 

PROC SORT가 nodupkey 및 dupout 옵션을 사용하여이 작업을 수행 할 수 있다고 생각할 수도 있습니다. 그러나 이를 통해 출력된 데이터 세트에는 각 중복된 세트 중 첫 번째 세트가 삭제됩니다. 다음 예시가 세부 사항을 보여줍니다.

 

data test;     

     input var1 $;     

     cards;     

          111     

          222     

          333     

          444     

          444     

          444     

          555     

          555     

          666     

          666     

          666     

          777     

          888     

          888     

          999     

          999     

          999;

run;

 

 

데이터 세트 테스트에는 5 개의 중복 세트가 존재합니다. 간단한 PROC FREQ는 var1의 가능한 각 값의 빈도 수를 보여줍니다.

proc freq     

     data = test;     

     tables var1 / nocum nocol norow nopercent;

run;

111

1

222

1

333

1

444

3

555

2

666

3

777

1

888

2

999

3

 

테스트에서 잘못된 중복이 생성되는 과정은 다음과 같습니다.

proc sort     

     data = test          

     nodupkey               

     dupout = dups;     

     by var1;

run;

proc print     

     data = dups;

run;

 

1

444

2

444

3

555

4

666

5

666

6

888

7

999

8

999

 

데이터 세트 dups의 PROC FREQ는 이전에 표시된 대로 테스트의 빈도 수와 다른 빈도 수를 표시합니다.

 

444

2

555

1

666

2

888

1

999

2

 

PROC SORT에서 nodupkey 및 dupout을 통해 출력된 데이터 세트에서 각 사본 세트의 첫 번째 세트를 제거합니다. 그렇기 때문에 중복 된 각 값이 테스트의 빈도보다 1 회 적은 dups 빈도를 갖습니다.

 

SAS에서 중복을 생성하는 방법

 

데이터 세트의 모든 중복을 만들기 위해 first.variable last.variable을 활용할 수 있습니다. 다음은 위의 테스트 데이터 세트로 이를 수행하는 코드입니다. 단일 관찰과 중복 관찰 모두 가능합니다.

*업데이트: Robert Matthews가 말씀해 주신 바와 같이 코드를 변경하여 중복치를 생성할 수 있습니다. 단일 측정치가 많고, 중복된 측정치가 적은 경우에는 단일 관측치에 신경 쓰지 않는 경우 더 효율적입니다.

 

data single dup;     

     set test;     

     by var1;     

     if first.var1 and last.var1          

          then output single;     

     else output dup;

run;

 

다음은 코드에 관한 사항입니다. 먼저 2 개의 데이터 세트를 단일 및 중복 측정치라고 생성합니다.

 

first.var1과 last.var1이 모두 동일한 관측치에 대해 "1"이면 중복이 존재하지 않으며, 이 관측치는 단일 관측치에 속합니다. 그렇지 않다면 이 관찰은 dup에 속합니다.

 

결과값은 다음과 같습니다.

 

1

444

2

444

3

444

4

555

5

555

6

666

7

666

8

666

9

888

10

888

11

999

12

999

13

999

 

각 값에 대해 정확한 중복 수를 가지고 있습니다.

 

**이 게시물은 블로그 The Chemical Statistician에서 발췌되었습니다.

Version history
Last update:
‎11-16-2021 11:33 PM
Updated by:
Contributors

sas-innovate-wordmark-2025-midnight.png

Register Today!

Join us for SAS Innovate 2025, our biggest and most exciting global event of the year, in Orlando, FL, from May 6-9. Sign up by March 14 for just $795.


Register now!

Article Labels
Article Tags