로그인   |  회원가입  |  사이트맵  |  Contact Us
  아이디 저장하기
 
홈 > SAS Tech & Tip > SAS Programming 활용하기
[SAS 프로그래밍] 데이터의 개체 수(Number of observations) 계산하기 2017.12.29
김효범 494 1
http://www.mysas.co.kr/SAS_tiptech/a_question.asp?b_no=7580&gotopage=1&con=subject&keyword=&cmd=content&bd_no=05&gubun=

 

 

 안녕하세요. 이번시간에는 데이터셋의 개체 수를 알 수 있는 방법에 대해 알아보겠습니다.

 

 

 

사용할 데이터 셋은 SASHELP 라이브러리에 있는 COMET 데이터 셋입니다.

 

 

Easy method

데이터셋의 개체수를 나타내는 가장 쉬운 방법PROC SQLCOUNT함수를 사용하는 것입니다. 예를 들어 다음과 같은 PROC SQL문에서 COUNT함수로 변수 N에 모든 행의 개수를 저장할 수 있습니다.

 

그리고 만약 매크로변수에 저장하고 싶다면 다음과 같이 as N into N:으로 변경하면 N이라는 매크로변수에 저장됩니다. 결과는 로그창을 통해 확인하였습니다.

 

하지만 이 방법은 메타데이터를 활용하지 않고 데이터 셋의 전체 행을 하나하나 읽는 과정을 거치기 때문에 효율적이지 않고 시간도 비교적 오래 걸리는 단점이 있습니다.

 

 

 

Metadata

 메타데이터를 활용하면 보다 효율적으로 개체 수를 구할 수 있습니다. 메타데이터를 활용하는첫번째 방법은Descriptor portion을 이용하는 것입니다. Sasdataset의 구조를 이루는 Descriptor portion Data portion 중 자료값이 아닌 dataset의 이름, 변수나 개체의 수 등으로 구성된 Descriptor portion을 활용하는 것입니다. 이 방법은 dataset 안에서 검색을 하는 것이 아닌 메타데이터를 사용하는 것이기 때문에 효율적인 방법입니다. 다음과 같은 SET문에서 데이터셋의 행의 수를 나타내는 자동변수 NOBS를 사용하여 변수N에 개체 수를 저장하였습니다.

 

 그리고 만약 매크로변수에 저장하고 싶다면 아래와 같이 call symputx 문을 추가하면 됩니다.

 

 

 

Dictionary table

메타데이터를 활용하는 또 다른 방법은 SAS라이브러리, 데이터세트, 매크로, 시스템옵션 등에 대한 정보를 생성하고  관리하는 Dictionary table 이라는 읽기 전용 테이블 모음을 활용 하는 것입니다.

Proc SQL문을 통해 사전테이블을 사용할 수 있으며, where절에서 libname옵션은 데이터가 저장된 라이브러리를 memname옵션은 데이터셋을 지정할 수 있습니다.

 

 

 

Macro.

개체 수를 알고자 하는 데이터셋이 많을 때는 매크로를 이용하는 것이 편리합니다. 다음은 sas function macro function으로 이용 할 때 쓰이는 %SYSFUNC을 사용하여 개체 수를 구하는 방법입니다. Sashelp.comet데이터 외에 Sashelp.bei데이터과 Sashelp.cars데이터의 개체수도 함께 구해보았습니다.

Open함수는 데이터를 여는데 사용하고 Attrn 함수는 데이터셋의 숫자 속성값을 반환하는데 nobs옵션과 같이 쓰이면 개체 수를 반환하게 됩니다. 그리고 Close함수를 사용하여 Open한 데이터 셋을 닫을 수 있습니다.

 

 


 

마치며

오늘은 데이터셋의 개체 수를 알아보는 법에 대해 알아보았습니다. 개체수가 적은 데이터는 PROC SQL문을 사용하여 COUNT함수로 데이터 전체를 직접 검색해도 무방하지만 개체수가 많은 데이터의 경우 연산량의 문제 때문에 메타데이터를 사용하여 개체수를 알아내는 것이 효율적인 방법입니다.

 




 

 

Reference

http://www.listendata.com/2017/04/number-of-observations-in-sas-data.html

 

 
 
 
 
 [SAS 프로그래밍] 상관계수(correlation coefficient)의 크기에 따라 변수 정렬하기
 [SAS 프로그래밍] 매크로 언어 - CALL EXECUTE