BookmarkSubscribeRSS Feed

[SAS 프로그래밍] 누락된 결측값 채우기

Started ‎06-17-2020 by
Modified ‎06-17-2020 by
Views 523

[SAS 프로그래밍] 누락된 결측값 채우기

 

 

안녕하세요^^

 

이번 시간에는 두 개의 테이블을 이용하여 누락된 값을 채우는 방법에 대해 알아보겠습니다.

 

 

 

▶ 예제데이터 생성하기

누락된 값을 채우기 위한 두 개의 연관된 테이블을 만들어 보겠습니다.

 

 

 DATA1

 

8DUhzdXYkFV70AAAAASUVORK5CYII_.png

 

gB4LCSVjVmmB66EpAIgFUkFQCqSCoBUJBUAqUgqAFKRVACk4gmFABYbfkIhACzF7Q_AVCQVAKlIKgBSkVQAJHp6_h8J7H44rIt0g.png

 

 

============================================================

 

 

▷ DATA2

 

_YGUNAMCwnp7_DzfZ17sOlnJdAAAAAElFTkSuQmCC.png

 

tE5tm7OoGTvGkYAln7nZ_R7xttRqCnC1J1vqadK8ldsuUnVtspbyR2fHVdN3X6cmr0nzKvda6D6aZpDqZ6nvuTIdsyaMkbv7St2p.png

 

 • Data step을 사용하여 league1과 league2 데이터셋을 생성합니다.

 

 • league1 데이터셋에는 full name, bowler, average score가 있으며, 작년의 볼링 average socre에 대한 자료입니다.

 

 • league2 데이터셋에는 first name, last name, AMF Number, average score가 있으며, 전년도 볼링 average score에 대한 자료입니다.

 

 

 

 

 

▶ 자료분석의 목적

 

▷ 볼링선수가 다른 볼링리그의 멤버일 때 볼링선수의 average score를 분석하여 새 팀을 구성합니다.

 

▷ 가능한 각 볼링선수의 가장 최근 리그(작년) average score를 사용합니다.

 

▷ 하지만 선수가 작년 리그 average score가 없다면 전년도 average score를 입력하여 average score를 분석하고자 합니다.

 

 

 

 

 

 DATA STEP 사용하기

 

JL75GLDIQqbUWKODt7LJn7MWliYWQMIcIyrZroLjG0fVBCeQNs_n8ebNLXA4RjRaDPVUrFO9HseKraWtysZaSn_S5ylM7yDdzRix.png

 

DD6y1evp9q4Hj64P30CgLzaD6PfSoAAEAm3wADCIgECCIsECCAsEiCAsEiAAIK6uPge0s7d3U_wWzcAAAAASUVORK5CYII_.png

 

▷ coding

 

두 자료를 가로병합하기 위해 두 자료에 공통으로 있는 볼링선수 번호(Bowler)로 정렬합니다.

먼저 작년 자료인 league1을 proc sort 프로시저를 사용하여 정렬하며, by 문장에는 정렬시킬 변수를 입력합니다.

 

 

 

 

 

g8oIJP_cq4x0QAAAABJRU5ErkJggg__.png

 

ctTFAAAAAElFTkSuQmCC.png

 

▷ coding

 

Full_name=catt(firstname, " ", lastname);

 

 작년도 자료인 league1의 fullname이 결측인 경우가 존재하기 때문에, league2 자료의 firstname 변수와 lastname 변수를 결합하여 Full_name 변수를 생성합니다.

 

 전년도 자료인 league2에는 작년 자료인 league1과 볼링선수 번호가 공통으로 들어있습니다.

 

 하지만 두 자료에서의 변수명이 다르면 data step의 가로병합은 가능하지 않습니다.

 

 따라서 league2 자료의 볼링선수 번호(AMFNo) 변수를 league1 자료와 동일하게 bowler로 변경시킵니다.

 

rename AMFNo=bowler;

 

 

• 또한 전년도 자료의 평균 점수는 작년도 자료의 avgscore와 구분하기 위해 AverageScore로 변수명을 변경시킵니다.

 

rename AvgScore=AverageScore;

 

 

• 작년자료인 league1과 가로병합하기 위해 proc sort 프로시저를 사용하여 정렬합니다.

 

 

 

 

 

qTgHALlKegAAAABJRU5ErkJggg__.png

 

1o_YPkBwBRcNsLICSSH4CQSH4AQiL5AQjo7u7vW5gDOqn3ej8AAAAASUVORK5CYII_.png

 

▷ coding

 

 두 자료를 data step에서 merge 문장을 사용하여 가로병합합니다.

 

• 이 때 league2를 수정한 자료인 new_league2는 불필요한 변수인 firstname 변수와 lastname 변수를 drop한 후 가져옵니다.

 

• 만약 작년도 자료인 league1의 Fullname 변수가 누락되었으면 전년도 자료인 new_league2의 값에서 대체합니다.

 

if Fullname=' '  then Fullname=Full_name;

 

 

• 또한 작년도 자료인 league1의 avgscore 변수가 누락되었으면 전년도 자료인 new_league2의 값에서 대체합니다.

 

if AvgScore=. then AvgScore=AverageScore;

 

 

 

▷ 결과

 

 data step에서 두 자료의 누락값을 대체하는 방법에 대해 알아보았습니다.

 

 즉, 결과를 살펴보면 작년 리그 average score가 없다면 전년도 average score를 입력하여 average score를 분석할 수 있게 되었습니다.

 

 

 

 

 

 

▶ PROC SQL 사용하기

PROC SQL 문장을 사용하여 원하는 조건의 average score 분석 테이블을 만들 수 있습니다.

 

YAAAAASUVORK5CYII_.png

 

cAAAAAElFTkSuQmCC.png

 

▷ coding

 

 from 문장에서는 league1 데이터셋을 lastyr이라고 인덱싱하고, league2를 prioryr이라고 인덱싱합니다.

 

 특히 league1과 league2를 full join하며, league1의 bowler 변수와 prioryr의 amfno가 같을 때의 값을 결합합니다.

 

from league1 as lastyr full join league2 as priory

on lastyr.bowler=prioryr.amfno

 

 

 coalesce(a,b) 함수를 사용하여 변수 a와 b 중 결측이 아닌 값을 출력합니다.

 

 coalesce 함수로 league1 자료의 fullname과 league2 자료의 firstname과 lastname을 공백을 추가하여 만든 값 중 결측이 아닌 값을 name이라는 변수로 출력합니다.

 

 이 때 lastyr로 인덱싱한 league1 자료의 fullname은 lastyr.fullname으로 말할 수 있습니다.

 

                                   select coalesce(lastyr.fullname,

              trim(prioryr.firstname) ||' '||prioryr.lastname)as Name format=$26.,

 

 

• 또한 league1 자료의 bowler 변수와 league2 자료의 amfno 변수 중 결측이 아닌 값을 bowler 변수로 출력합니다.

 

coalesce(lastyr.bowler,prioryr.amfno)as Bowler,

 

 

 league1 자료의 avgscore과 league2 자료의 avgscore 변수 중 결측이 아닌 값은 Average 변수로 출력합니다.

 

coalesce(lastyr.avgscore,prioryr.avgscore)as Average format=8.

 

 

 order by 문장을 사용하여 bowler 변수를 기준으로 정렬합니다.

 

 

 

 

 

 

 

이상으로 두 개의 테이블을 이용하여 누락된 값을 채우는 방법에 대해 알아보았습니다.

감사합니다^^

 

 

 

 

[출처]

http://support.sas.com/documentation/cdl/en/sqlproc/63043/HTML/default/viewer.htm#n1hg5l3d8c24fin19b...

 

Version history
Last update:
‎06-17-2020 10:15 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