1 강 SAS 시스템과 SAS 언어
SAS 란? SAS 란? SAS V6.08 이전 : Statistical Analysis System 자료의처리및분석이주목적인범용통계패키지 SPSS, Minitab, BMDP, S, S-plus, R 등의패키지와비교할때자료의분석기능이뛰어남 SAS V6.08 이후 : Strategic Application System 단순통계자료분석용이아닌데이터베이스 (data base), 데이터마이닝 (data mining), 데이터웨어하우징 (data warehousing) 등각종응용프로그램을포함한통합패키지로활용 V8.1부터응용프로그램이훨씬보강된상태의토탈솔루션개념으로변화프로그램형식에메뉴형식이추가 2
SAS 소프트웨어구성 시스템 - SAS/CORE : SAS 시스템을지배하는핵심부분 SAS 언어로작성된 SAS 프로그램을해석하고, SAS 시스템제어및관리 데이터처리 - SAS/BASE : SAS 의가장기본적인 S/W 자료입력, 입력자료저장, 수정, 검색, SAS 파일편집단순통계분석, 보고서작성 - SAS/FSP : 대화형처리 S/W SAS 자료의수정, 검색등을모니터전체화면을사용하여처리하는 S/W Base SAS Software( 기본 SAS 소프트웨어 ) : SAS/CORE+SAS/BASE 간단한자료처리및통계량계산을수행 그래픽 - SAS/GRAPH : 고단위그래픽 S/W 각종 2 차원및 3 차원그래프지원 DBMS(DataBase Management System) 데이터엑세스 - SAS/ACCESS : 각종데이터베이스엑세스 S/W 다른데이터베이스와의접속이가능하도록하는 S/W 3
SAS 소프트웨어구성 ( 계속 ) 통계분석 - SAS/STAT : 통계분석 S/W 통계모델을이용한광범위한자료분석법, 모수추정기법등고급응용통계방법지원 - SAS/IML : SAS/Interactive Matrix Language 행렬연산 S/W - SAS/QC : 통계적품질관리 S/W - SAS/ETS : 경제통계와시계열분석 S/W - SAS/OR : SAS/Operation Research 의사결정기법지원 S/W - SAS/LAB : 대화형실험실통계해석 S/W - SAS/INSIGHT : 대화형통계해석및그래픽구현 S/W - SAS/CALC : 스프레드쉬트 S/W 4
SAS 소프트웨어구성 ( 계속 ) 어플리케이션구축 - SAS/AF : SAS/Application Facility 어플리케이션개발 S/W 메뉴판식응용프로그램작성지원 S/W - SAS/EIS : 메뉴형식의 Enterprise Information System(EIS) 개발지원 S/W - SAS/SCL : Screen Control Language 사용자지향응용어플리케이션 - SAS/ASSIST : 메뉴형식의사용자인터페이스 S/W - SAS/CPE : 컴퓨터성능평가 S/W - SAS/PH-CLINICAL : 의학 / 약학연구해석용 S/W 5
SAS 소프트웨어구성 ( 계속 ) 분산처리 - SAS/CONFLICT : 분산처리관련 S/W - SAS/SHAPE : 분산처리관련 S/W 기타 - SAS/TOOLKIT : SAS 모듈작성 S/W - SAS/GIS : 지리정보시스템 S/W - SAS/C : C 컴파일러 - SAS/MACRO : 동일한작업의반복을단순화하기위한 S/W - SAS/Enterprise Miner : 각종 Data Mining을지원하는 S/W 6
SAS 시작하기 SAS 초기화면 7
각창의설명 (1) Explorer 창 - 테이블 (data set), 카탈로그, 파일등을관리하는곳 - SAS 파일을보거나관리 - 새로운라이브러리및파일단축경로생성 - 라이브러리의새로운멤버생성 - SAS 파일을열거나편집 9
각창의설명 (2) 결과 (Results) 창 - 편집기창에서실행된프로그램의각절차에의해출력결과목록이나타남 - 해당목록을더블클릭하면 출력 창에서해당되는내용으로이동 10
각창의설명 (3) 편집기 (Editor) 창 - 종류 : 확장편집기, 프로그램편집기 - 기존의프로그램열기, 편집 - 새로운프로그램생성및실행 - 프로그램실행시 F8버튼또는실행버튼 ( ) 으로실행 11
각창의설명 (4) 로그 (Log) 창 - SAS 프로그램실행시프로그램내용을검토하며오류의파악 - 검토결과와각절차들의실행에소요된시간등을출력 12
각창의설명 (5) 출력 (Output) 창 - SAS 프로그램에의해실행된결과들이나타남 - 단, 그래픽모드로출력된결과들은그래픽창에나타남 13
SAS 프로그램구성 기본구성 DATA 단계 - DATA 문으로시작함 - 하나이상의새로운 SAS data set을생성 - 이미존재하는 SAS data set을가공, 처리하여새로운 SAS data set을만듦 - 보고서작성, 파일의처리, 정보의저장, 회수등이이루어짐 PROC(procedure) 단계 - PROC 문으로시작하여지정된이름을가진절차를수행 - 생성된 SAS data set의자료를분석하여그결과를출력하는등의작업을수행 - 대표적처리절차 PRINT MEANS UNIVARIATE CORR TTEST ANOVA REG GLM FREQ LOGISTIC PRINCOM FACTOR CLUSTER DISCRIM CANDISC 14
Raw Data Read in Data Process Data (Create new variables) Data Step Output Data (Create SAS Dataset) Analyze Data Using Statistical Procedures PROCs
DATA demo; INFILE DATALINES; INPUT gender $ age marstat $ credits state $ ; if credits > 12 then fulltime = 'Y'; else fulltime = 'N'; if state = 'MN' then resid = 'Y'; else resid = 'N'; DATALINES; F 23 S 15 MN F 21 S 15 WI F 22 S 09 MN F 35 M 02 MN F 22 M 13 MN F 25 S 13 WI M 20 S 13 MN M 26 M 15 WI M 27 S 05 MN M 23 S 14 IA M 21 S 14 MN M 29 M 15 MN ; RUN; PROC PRINT DATA=demo ; VAR gender age marstat credits fulltime state ; RUN; DATA STEP SAS PROCEDURE
예제 아래의표와같은데이터를이용하여간단한성적관리프로그램을 SAS 로작성하시오. 1. 자료를입력하여그대로인쇄 (print) 하시오. 2. 중간시험과기말시험의성적을합산하고인쇄하시오. 이름 번호 성별 학과 중간시험 기말시험 성준 1 남 통계 5 3 춘향 2 여 수학 30 40 흥부 5 남 컴퓨터 25 30 세준 4 남 통계 23 21 콩쥐 3 여 컴퓨터 30 28 논개 6 여 수학 39 21 17
DATA class; INPUT name $ number sex $ dept $ exam1 exam2; CARDS; Sungjun 1 M Stat 5 3 Choonhyang 2 F Math 30 40 Heungboo 5 M Computer 25 30 Sejoon 4 M Stat 23 21 Kongjui 3 F Computer 30 28 Nongae 6 F Math 39 21 RUN; PROC PRINT DATA=class; RUN; DATA new; SET class; score=exam1+exam2; RUN; PROC PRINT; /* 가장최근사용한 SAS data set 를자동으로사용 */ RUN; 18
SAS 문장특징 - SAS 키워드 (SAS keyword), SAS 이름 (SAS name), 연산자 (operator), 특수문자 (special characters) 등으로구성 - SAS 문장은반드시세미콜론 (;) 으로끝남그러나, 입력되는데이터는 SAS 문장이아니므로세미콜론을쓰면안됨 - SAS 문장입력에는특별한규칙이없음 1 한문장이어느열에서시작하건, 여러줄에걸쳐나눠입력하건상관없음 2 한줄에여러개독립된문장들을연속해서입력할수도있고, 두문장사이에여러줄이빈줄이어도상관없음 3 영어대 / 소문자구분없고, 혼합해서사용해도됨 4 문장사이에빈칸이여러개있어도상관없음 - SAS 키워드 : DATA, INPUT, CARDS, RUN, PROC, PRINT, SET 앞의예에서대문자로쓰여진단어는 SAS 프로그램내에서용도가이미지정되어있음 - SAS 이름 : class, name, number, sex, dept, exam1, exam2, new, score 소문자로쓰여진단어는사용자의편의상작명가능 - 연산자 : =, + 등의부호 - 특수문자 : $ 19
SAS 문장특징 ( 계속 ) - SAS 이름을짓는규칙 1 첫문자로는반드시영문자나밑줄 (_) 이용 2 두번째문자부터는영문자, 밑줄, 숫자사용가능 3 이름중간에빈칸이있을수없음 예1) 올바른경우 a id_num txt data1 _effect_ 예 2) 잘못된경우 1st_ data $ollar 20
SAS 연산자 1 산술연산자 (Arithmetic Operators) 산술연산자산술기능 + 더하기 - 빼기 * 곱하기 / 나누기 ** 지수예 ) A**2 A 2 2**A 2 A 2**3**4? cf) B2 : 변수명 B*2 : 수식 21
2 비교연산자 (Comparison Operators) 비교연산자 비교기능 = EQ 같다 (EQual to) ^= NE 같지않다 (Not Equal to) > GT 크다 (Greater Than) < LT 작다 (Less Than) >= GE 크거나같다 (Greater than or Equal to) <= LE 작거나같다 (Less than or Equal to) - 비교연산자는기호와단축영문자두종류이용가능 - SAS 에서는비교연산자를이용하여진리값 (true value) 할당 예1) x=3, y=7 일때 t=x<y 이면 t=1, t=x>y 이면 t=0 t= 'Gary' > 'Adams' 이면 t=1 예 2) IF x<y THEN z=5; ELSE z=9; z=5*(x<y)+9*(x>=y) 22
3 논리연산자 (Logical Operators) 논리연산자 기능과진리값 & AND 좌우의수식이둘다참이면 1, 아니면 0 OR 좌우의수식이둘중하나이상이참이면 1, 아니면 0 ^ NOT 우측의수식이참이면 0, 아니면 1 예 ) a=1; b=2; c=3; d=a<b & b<c; e=a<b & b>c; f=a<b b>c; g=a>b b>c; h=^(a<b); d=1, e=0, f=1, g=0, h=0 23
4 접합연산자 (Concatenation Operators) : - 연결연산자는문자열을연결한다. - 연결연산자는문자열의앞뒤에오는공백을제거하지않는다. - 후미공백을제거하기위하여 trim 함수를이용할수있다. - 공백을제거하기위하여 compress 함수를이용할수있다. 예 ) level='grade ' 'A' level='a' 'B' 'C' level=trim('grade ') 'A' level=compress('grade ' 'A') level=trim('grade ' 'A') level = 'grade A' level = 'ABC' level = 'gradea' level = 'gradea' level = 'grade A' 24
DATA test; a1='black '; a2='blue Black '; name='jack'; game1=a1 name; game2=compress(a1 name); game3=compress(a2 name); game4=trim(a1) name; game5=trim(a1 name); game6=trim(a2) name; RUN; PROC PRINT; RUN; 25
5 최소 (MIN), 최대 (MAX) 연산자 : ><, <> - >< 연산자는두실수의최소값을계산한다. - <> 연산자는두실수의최대값을계산한다. 예 ) A = 3><-3 A = -3 B = 1<>2 B = 2 26
6 IN 연산자 : X in A - IN 연산자는 X 가수열 A 에포함되는지판단한다. - 수열 A 를나타내기위하여 : 을이용할수있다. 3:10 은 3, 4, 5, 6, 7, 8, 9, 10 을의미한다. - <> 연산자는두실수의최대값을계산한다. 예 ) (2*1:5) 1,2,3,4,5,1,2,3,4,5 X=3; Y = X in (1:3) X = 3, Y = 1 y = x in (1, 2, 3, 4, 5, 6, 7, 8, 9, 10); y = x in (1:2,10); 27
연산자우선순위 순위 순서 기능 1 멱 (**), 접두연산자 (+, -, ^), 최소 / 최대 (><, <>) 2 곱셈, 나눗셈 (*, /) 3 덧셈, 뺄셈 (+, -) 4 접합연산자 ( ) 5 비교연산자 (>, =, <, >=, <=) 6 논리곱 (&, and) 7 논리합 (, or) 예 ) X=2**3**4 (2**(3**4)) Y=-3><-3 -(3><(-3)) 28
SAS 함수 함수호출 Function(argument, argument, ) 구분이름기능 산술함수 ABS 절대값 (absolute value) MAX MIN MOD SIGN SQRT 최대값 (maximum) 최소값 (minimum) 나머지 (remainder, 또는 modulus) 부호 (sign) 제곱근 (square root) 29
구분 이름 기능 절단함수 CEIL 인수이상의최소정수 FLOOR 인수이하의최대정수 INT 인수에서소수점이하를절단한정수 (integer) ROUND 지정된자리수에서반올림 (rounding) 수리함수 EXP 지수함수 (exponential function) LOG 자연로그 (natural logarithm) LOG2 밑이 2인로그 LOG10 상용로그 (common logarithm) 삼각함수 COS 코사인 (cosine) SIN 사인 (sine) TAN 탄젠트 (tangent) 표본통계함수 CV 변동계수 (coefficient of variation) MEAN 산술평균 (arithmetic mean) RANGE 범위 (range) STD 표준편차 (standard deviation) 30
구분 이름 기능 표본통계함수 STDERR 표준오차 (standard error) SUM 합 (sum) VAR 분산 (variance) NMISS 결측치 (missing values) 의개수 분포함수 POISSON 포아송 (Poisson) 분포함수 PROBBNML 이항 (binomial) 분포함수 PROBCHI 카이제곱 (chi-square) 분포함수 PROBF F분포함수 PROBNORM 정규 (normal) 분포함수 PROBT T분포함수 분위수함수 CINV 카이제곱 (chi-square) 분포의분위수 FINV F분포의분위수 PROBIT 정규 (normal) 분포의분위수 TINV t분포의분위수 31
SAS 함수사용예 산술함수 - ABS(argument) : 주어진인수의절대값을계산 x = ABS(-3) ; x = 3 - MAX(argument, argument, ) : 주어진인수들중최대값을계산 x = MAX(-1, 0, 1) ; x = 1 - MOD(argument1, argument2) : argument1을 argument2로나누었을때의나머지계산 x = MOD(10, 3) ; x = 1 y = MOD(10, 1.6) ; y = 0.4 - SIGN(argument) : 인수의부호를확인. 인수의값이 0보다크면 +1, 0보다작으면 1 x = SIGN(-2) ; x = -1 - SQRT(argument) : 제곱근계산, 인수는 0보다큰값이어야함 x = SQRT(4) ; x = 2 32
절단함수 : 반올림및소수점이하의자리수가있는숫자의정수화에관련된함수 - CEIL(argument) : 인수이상의최소정수계산 x = CEIL(2.2) ; x = 3 y = CEIL(-2.2) ; y = -2 - FLOOR(argument) : 인수이하의최대정수계산 x = FLOOR(2.2) ; x = 2 y = FLOOR(-2.2) ; y = -3 - INT(argument) : 인수의값에서소수점이하를잘라버림 x = INT(1) ; x = 1 y = INT(1.5) ; y = 1 z = INT(-1.5) ; z = -1 Gauss 함수와다름 - ROUND(argument, round-off-unit) : 주어진인수를가장가까운반올림단위에서반올림 x = ROUND(123.456,1) ; x = 123 y = ROUND(123.456,100) ; y = 100 z = ROUND(123.456,0.01) ; z = 123.46 33
수리함수 - EXP(argument) : 주어진인수만큼 e의거듭제곱계산 x = EXP(0); x = 1 y = EXP(1); y = 2.71828 - LOG(argument) : 자연로그값계산, argument >0 e = EXP(1); e = 2.71828 x = LOG(e); x = 1 y = LOG(1); y = 0 z = LOG(10); z = 2.30259 - LOG10(argument) : 상용로그값계산, argument >0 x = LOG10(1); x = 0 y = LOG10(10); y = 1 표본통계함수 - MEAN(argument, argument, ) : 주어진인수들의산술평균계산 x = MEAN(1,2,3); x = 2 x1=1; x2=2; x3=3; average = MEAN(x1,x2,x3); average = 2 34