Chapter 2. Performing Advanced Queries Using PROC SQL (5)

Using a Summary Function  

아래 아웃풋 두개가 있는데요. 서로 비교해면 왼쪽 그림은 JobCode가 있고 거기에 평균 salary가 있습니다. 그런데 평균 샐러리가 모두 다 같은 값이네요. 사실은 오른쪽 그림의 아웃풋처럼 JobCode별의 평균 샐러리를 구하는 아웃풋을 원하는거였는데 말이지요. 

           


왼쪽 아웃풋의 명령어는 다음과 같습니다. 20개의 값(행)만 출력하고요. sasuser 라이브러리에 있는 payrollmaster라는 데이터를 불러워서 jobcode의 열을 불러오고 salary의 평균(avg)값을 구해서 AvgSalary라는 열을 새로 만들어 넣으라는 내용입니다. 따라서 결과값은 jobcode가 20개의 행만큼 주르륵 나오고 AvgSalary는 salary의 그냥 평균값, 값 하나인 54079.62만 들어가게 됩니다. 이때 outobs가 설정되지 않으면 payrollmaster의 148개 행이 모두 출력됩니다. 하나의 값이 계속 반복되어 출력이 될 경우 SAS log파일에 이에 관한 메시지가 뜨게 됩니다. 이건 나중에 다루도록 하고요. 


 JobCode별 평균 샐러리를 구하고자 한다면 Group by 구문이 필요합니다. 

아래 코드보면 첫번째로 outobs = 이 구문이 없어졌네요. 그룹화하게되면 행의 수가 적어지게 되어서 제외되었고요. AvgSalary의 포맷이 다르게 설정된거 이외에 추가된 내용은 group by jobcode; 입니다. 





Counting Values by Using the COUNT Summary Function

전체 행의 개수나 아니면 특정 그룹의 행을 세기 위해서는 다음과 같은 함수를 사용하면 됩니다. 



전체 행의 개수를 세고자 할때~ 

count (*) as Count 즉 count라는 열을 생성해서 불러오는 데이터의 모든 행을 세어라는 뜻입니다. 아래 예시처럼 payrollmaster의 모든 행의 갯수가 Countf라는 변수이름 아래 생성이 됩니다.  




만약 그룹별 행의 갯수를 세고 싶다면!!! 

아래 코드를 보죠. SELECT구문을 이용해서 Job Catogory라는 새로운 열을 만드는데 이때 sasuer라이브러리에 있는 payrollmaster의 데이타에서 jobcode의 열 중에 1번부터 2번까지의 문자열을 불러와 Job Category에 넣습니다. 그리고 두번째 열은 Count로 Job Category로 그룹화된것으로 행을 센 값이 들어가게 됩니다. 하지만 주의해야할점은 만약 missing value가 있으면 결과값이 다르게 나올 수 있어서 missing value가 있는지 확인하는 절차가 필요할 수 있습니다. 



Non-Missing Values 세어보기 

missing value를 바로 세어볼 수 있지만, 만약 행의 갯수를 알고 실제 관측값을 세어보았을때 둘의 값이 일치하면 missing value가 없다는 뜻이겠지요. 혹은 실제로 값이 들어있는 행의 갯수를 세어보고싶을때 아래처럼 코드를 사용하면 됩니다. count (변수이름) as Count 라고 하면 Count의 변수이름 아래 JobCode 열의 관측치의 갯수가 들어가게 됩니다. 





All Unique Values 세어보기 

JobCode가 한 열에서 반복적으로 나타날 수 있잖아요. 몇개의 JobCode가 있는지 Unique Value를 셀 때 distinct의 키워드를 넣으면 됩니다. 아래 코드 보면 Count라는 열을 만들어서 jobcode의 unique value가 몇개인지 distinct라는 키워드를 사용해서 코드를 넣었네요. 그래서 결과값 보면 16개가 나와있죠. 즉, 16개의 jobcode가 있다는 뜻입니다. 



#  SAS 자격증, SAS Advanced, SAS Advanced programming, SAS Prep Guide, 자격증 

반응형

+ Recent posts