[SAS 프로그래밍] 중복된 행(duplicate rows)의 개수 세기
안녕하세요^^
이번 시간에는 자료에서 중복된 행(duplicate rows)의 개수를 세는 방법에 대해 알아보겠습니다.
▶ 예제데이터 생성하기
먼저 중복된 행의 개수를 세기 위해 예제 데이터를 만들어 보겠습니다.
▷ 목적
• 각 row는 9명의 자료이며, 성(lastname), 이름(firstname), 도시(city), 주(state)가 입력되어 있습니다
• 이 예제 데이터는 네 개의 변수 모두 중복되는 경우가 존재하기 때문에, 모두 같은 열이 몇 개가 존재하는지 세어보도록 하겠습니다
▶ DATA STEP 사용하기; retain 문장 & if first. / if last. ~ 문장
Data step 문장에서 retain 문장을 사용하여 중복된 행의 개수를 셀 수 있습니다.
▷ coding 1
• 먼저 retain문장과 if first.변수명 문장을 사용하기 위해, 중복을 고려할 변수들을 proc sort 프로시저를 사용하여 자료를 정렬시킵니다.
• 네 변수 모두의 중복을 고려하기 위해, by 문장에 성(lastname), 이름(firstname), 도시(city), 주(state)로 정렬시키면 예제 데이터는 오른쪽과 같이 알파벳 순서로 정렬됩니다.
If last.~ 문장을 실행하지 않았을 때
If last.~ 문장을 실행하였을 때
▷ coding 2
• Retain 문장과 if first. 문장을 사용하여 중복되는 열의 개수를 셀 수 있습니다.
• retain 문장으로 count라는 변수명으로 1, 2, 3,… 처럼 1씩 증가하는 열의 값을 입력할 수 있습니다.
• 이 때 if first.변수명 문장으로 조건에 맞는 첫 번째 열이 나타나면 count에 1의 값이 입력되도록 할 수 있습니다.
• if first.변수명1 or first.변수명2 or first.변수명3 or first.변수명4 처럼 여러 개의 조건을 줄 수 있습니다.
• 이 경우, 성(lastname), 이름(firstname), 도시(city), 주(state) 중에 처음 나오는 값이 존재하면 count를 1부터 다시 세도록 코드를 작성하였습니다.
• 위 코딩의 결과는, if.first 문장을 실행하였을 때의 결과(우측 상단)와 같습니다
▷ coding 3
• 마지막으로 if last. ~ 문장을 사용하여 자료에서 count의 값이 1로 바뀌기 전의 열만을 가져오겠습니다.
• 이 때도 마찬가지로 조건은 네 변수 모두에 대해 주게 됩니다.
▷ 결과
위의 자료를 사용한 결과는 오른쪽 하단에 있는 결과입니다.
해당 결과는 성(lastname), 이름(firstname), 도시(city), 주(state)가 중복되지 않은(unique) 행 만을 나타내고 있으며,
가장 오른쪽 열인 count 변수는 원자료에서 중복된 행이 몇 개가 있었는지를 보여줍니다.
▶ PROC SQL 사용하기
▷ coding
• PROC SQL 문장을 사용해서 위의 DATA STEP과 같은 결과를 얻을 수 있습니다.
• select 문장의 *을 사용하여 from 문장에 있는 Duplicates 데이터의 모든 변수를 가져옵니다.
• count(*)를 사용하여 count라는 변수로 중복된 행의 개수를 입력합니다.
• group by 문장을 사용하여 성(lastname), 이름(firstname), 도시(city), 주(state)가 모두 같지 않은 행을 기준으로 잡습니다.
▷ 결과
위의 자료를 사용한 결과는 오른쪽 하단에 있는 결과입니다.
해당 결과는 성(lastname), 이름(firstname), 도시(city), 주(state)가 중복되지 않은(unique) 행 만을 나타내고 있으며,
가장 오른쪽 열인 count 변수는 원자료에서 중복된 행이 몇 개가 있었는지를 보여줍니다.
이상으로 중복된 행의 개수를 세는 방법에 대해 알아보았습니다.
감사합니다^^
[출처]
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.