소개
데이터를 다루는 일반적인 작업은 데이터 세트에 여러 번 나타나는 모든 측정치를 확보하는 것입니다. 즉, 중복을 확보하는 것입니다. 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에서 발췌되었습니다.
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.