안녕하세요. MYSAS입니다.
이번 시간에는 Permanent , 즉 영구적 Data Set을 만드는 법에 대해서 알아보겠습니다.
목 차
- SAS는 기본적으로 RAW DATA FILE (텍스트 파일등) 이나 엑셀 파일을 직접적으로 사용할 수 없습니다. 어떻게든, SAS 데이터 셋 안에 있는 데이터 값들이 필요합니다. SAS DATA STEP에서 데이터 셋들을 만들 수 있다는 것을 기억하세요. 또는, 엑셀, 오라클, DB2와 같은 다른 소스에서 데이터를 전환시켜도 됩니다.
- 이번 장에서는 어떻게 SAS DATA SET을 영구화 시키는지, 데이터 셋의 컨텐츠를 어떻게 결정하는 지에 대해서 알아 볼 예정입니다.
이런 DATA 명령문을 쓴다고 합시다
data test;
이 때 SAS는 Test라는 일시적인 데이터 셋을 만듭니다. SAS 프로그램을 종료함과 동시에 이 데이터 셋은 사라지죠. 자 SAS의 데이터 셋의 이름은 기본적으로 두부분으로 나누어 져있는데요
libref.data-set-name
- libref란 라이브러리의 이름을 말합니다. 즉 data set이 저장되는 폴더의 개념으로 생각하시면 되구요.
- data-set-name은 말 그대로 데이터 셋의 이름을 말하는 것이구요.
- 자 그럼 여기서 이런 질문이 들어 옵니다. 저기 위에 있는 data test; 는 뭔가요?
사실 저 속에는
data work.test; 에서 work가 생략된 명령문이고 보셔도 됩니다. 즉, 일시적인 데이터 셋은 자동적으로 WORK라는 라이브러리에 저장이 되는데 이는 생략가능 하기 때문에 저렇게 코딩을 해도 무방합니다.
자 그럼 영구적인 데이터 셋은 WORK가 아닌 다른 라이브러리에 저장이 되어야 하겠죠? 여기서 라이브러리를 만드는 방법을 알아 보겠습니다. 다음 코딩을 한번 살펴보시죠
libname mozart 'c:\books\learning';
data mozart.test_scores;
length ID $ NAME $ 15;
input ID $ Score1-Score3 Name $;
datalines;
1 90 95 98 Cody
2 78 77 75 Preston
3 88 91 92 Russell
;
Libname을 통해서 mozart라는 라이브러리가 형성이 됩니다. 그리고 생성한 데이터 셋은 c:\books\learning 이 폴더에 저장을 하게 됩니다. mozart.test_socres라는 명령문은 결국 mozart라는 라이브러리 안에 test_scores라는 데이터셋을 만들겠다는 것입니다.
데이터셋이 작다면 매번 SAS를 시작할때마다 만들어도 상관이 없겠죠. 하지만 그 크기가 매우 크다면 영구적 데이터 셋을 만들고 매번 다시 만들 필요 없이 편리하게 불러내어 사용할 수 있겠죠?
4, PROC CONTENTS
SAS 데이터 셋은 두가지 파트로 나눠져 있습니다. 바로 Descriptor portion과 Data portion인데요, 문자 그대로 Descriptor portion은 데이터에 대한 묘사를 하는 부분입니다. 여기서 PROC CONTENTS로 해야한다는 것입니다.
proc contents data= mozart.test_scores;
run;
SAS 시스템 1
2011년 02월 07일 월요일 오전 11시36분59초
CONTENTS 프로시저
데이터셋 이름 MOZART.TEST_SCORES 관측치 3
멤버 유형 DATA 변수 5
엔진 V9 인덱스 0
생성일 2011년 02월 07일 월 오전 11시38분16초 관측치 길이 48
마지막 수정일 2011년 02월 07일 월 오전 11시38분16초 삭제된 관측치 0
보호 압축여부 아니오
데이터셋 유형 정렬 아니오
레이블
데이터 표현 WINDOWS_32
엔코딩 euc-kr Korean (EUC)
엔진/호스트 관련 정보
데이터셋 페이지 크기 4096
데이터셋 페이지 번호 1
첫 번째 데이터 페이지 1
페이지 당 최대 관측치 수 84
첫 번째 데이터 페이지의 관측치 수 3
데이터셋 수리의 번호 0
파일명 c:\books\learning\test_scores.sas7bdat
생성된 릴리즈 9.0202M3
생성된 호스트 XP_PRO
변수와 속성 리스트(오름차순)
# 변수 유형 길이
1 ID 문자 3
2 NAME 문자 15
3 Score1 숫자 8
4 Score2 숫자 8
5 Score3 숫자 8
보시다시피 데이터에 관한 정보가 있는데요, 변수의 갯수, 관측치수, 파일을 만든 날짜 등이 나와있습니다.
자 여기까지 PROC CONTENTS로 DESCRIPTOR PORTION을 보는 방법을 알아 보았구요 이번엔 SAS 라이브러리 안에 데이터 셋들의 이름을 나열하는 방법을 알아 보겠습니다.
PROC CONTENTS DATA=mozart._ALL_ NODS;
RUN;
여기서 _ALL_ 은 보시다시피 모든 데이터 셋을 지칭하는 것이고 NODS는 SAS 데이터 셋의 이름만 꺼내겠다는 말입니다. 그러타면 예상을 해보지요. 저희가 오늘 만든 mozart라는 라이브러리에는 과연 얼마나 많은 데이터 셋이 있을까요?
SAS 시스템 4
2011년 02월 07일 월요일 오전 11시36분59초
CONTENTS 프로시저
디렉터리
라이브러리 참조 MOZART
엔진 V9
물리적 경로 c:\books\learning
파일명 c:\books\learning
멤버 파일
# 이름 유형 크기 마지막 수정일
1 TEST_SCORES DATA 5120 2011.02.07 오전 11:38:16
그렇습니다. 바로 test_scores라는 데이터 셋 한 개 겟죠?
- 솔직히 Descriptor portion은 몇번의 클릭질(?)이면 확인 할 수 있습니다. 왼측 하단에 탐색기로 가서 라이브러리 - Mozart 에 들어가서 test_score이라는 데이터 셋을 오른쪽 클릭하시면 칼럼보기가 있는데 거기에서도 역시 변수에 관한 정보들을 얻을수 있습니다.
- 상세한 정보를 얻고자 하시면 상세라는 탭을 클릭하시면 되구요
이건은 예전 많은 예제들 속에서 쉽게 접했을 것이라 예상합니다. 간단히 하고 넘어가도록 하지요.
proc print data=mozart.test_scores;
run;
이라는 프로그램을 통해 mozart라는 라이브러리 안에 test_scores라는 데이터 셋을 출력을 하는 것입니다.
SAS 시스템 6
2011년 02월 07일 월요일 오전 11시36분59초
OBS ID NAME Score1 Score2 Score3
1 1 Cody 90 95 98
2 2 Preston 78 77 75
3 3 Russell 88 91 92
참 쉽죠이잉?
이것도 마찬가지로 앞에서의 우리의 수고아닌 수고를 무력화 시켜버리는 간단한 클릭에 의한 방법인데요. 방금 5번째 단원에서 보셧듯이 라이브러리에 들어가셔서 데이터셋을 더블클릭하시면 테이블 형식으로 DATA SET을 살펴 볼 수 있습니다. 이렇게요
이러면 편한 점이 열을 드래그, 드롭할 수 있고, 정렬도 가능하며 숨길 수 도 있습니다. 엑셀과 거의 비슷한 기능을 보이죠.
명심해야할 점은 Data를 수정하기 전에 반드시 이 테이블은 꺼야 적용이 된다는 점입니다
Raw data files이외에도 SAS 데이터 셋은 DATA Step에 있어 input으로도 사용가능 합니다.
저희가 만들엇던 test_Scores라는 데이터 셋은 ID, Navme, Score1 에서부터 Score3까지의 변수를 가지고 있습니다. 만약 본인이 Score 1에서부터 3까지의 평균 성적을 내보고 싶다면 ?
libname learn 'c:\books\learning';
data new;
set mozart.test_scores;
AveScore = mean(of score1-score3);
run;
- 자 여기서 의미를 한번더 복습해봅시다. LIBNAME문을 통해 learn이라는 라이브러리를 만들 수 있고 만든 데이터 셋은 c:\books\learning라는 폴더에 저장을 할 것입니다.
- new라는 이름의 데이터를 만들 것인데 이는 임시적인 데이터 셋입니다. 여기서 열쇠를 가지고 있는 것은 바로 SET 문입니다. SET문은 우리가 읽어오고자 하는 테이터 셋을 지정해주는 명령문입니다.
- 즉. new라는 데이터 셋의 데이터 값들은 mozart안에 test_scores 데이터 셋에서 가지고 올것이구요 Avescore라는 변수를 만들되 이는 score1-score3까지의 평균값을 나타내는 것입니다.
출력해볼까요?
proc print data=new;
run;
SAS 시스템 7
2011년 02월 07일 월요일 오전 11시36분59초
Ave
OBS ID NAME Score1 Score2 Score3 Score
1 1 Cody 90 95 98 94.3333
2 2 Preston 78 77 75 76.6667
3 3 Russell 88 91 92 90.3333
수고하셨습니다. 문제는 다음 시간에 리뷰용으로 올려드리겠습니다~ ^^~
본 자료의 저작권은 sas에 있습니다
Save $250 on SAS Innovate and get a free advance copy of the new SAS For Dummies book! Use the code "SASforDummies" to register. Don't miss out, May 6-9, in Orlando, Florida.