CHAPTER 3. 데이터변환하기 2장에서는 SAS 데이터만드는방법 ( 확장편집기이용, 메뉴이용외부데이터불러오기, 확장편집기에서 INFILE 문이나 DATAFILE 옵션사용하기 ) 에대해살펴보았다. 3장에서는이미만들어진 SAS 데이터를연산자, 함수, 데이터문옵션, 제어명령어이용하여변환하는방법을살펴보기로하자. 통계학에서주로사용되는함수에대해서는 4장에서다루기로한다.
64 Chapter 3. 데이터변환하기 3.1 Solution( 솔루션 ) 이용하기 데이터변환도 SAS/ASSIST 이용하여메뉴에서가능하나절차가길고복잡하다. 예를들 어설명하기로하자. 기존의 CANCER 데이터에서시간변수를 LOG 취하는과정을보자. 우선변환하기원하는 SAS 데이터를아래절차에따라설정한다. 오른쪽화면에열린 SAS 데이터는스프레드시트형식으로나타난다. 처음열린데이터는 보기모드로되어있어데이터편집이가능한상태가아니다. 그러므로우선편집이가능한 모드로바꾸어야한다. 방법은다음과같다.
65 SAS 데이터가편집모드로바뀌어야변환메뉴안의계산 (C), 순위 (R) 등의기능이사용 가능 (enabled) 하게된다. 보기모드에서는 Disabled 되어있어사용이불가능하다. 아래화면에서 1. 새로운변수이름지정, 만약 TIME 을사용하면계산된결과가원 TIME 변수에저장된다. 가능하면다른이름사용하는것이편리하다. 2. 원하는작업이있 는 category 를선택한다. 3. 적절한함수를선택한다. 4. 변환하려는변수를지정한다.
66 Chapter 3. 데이터변환하기 설정이끝나면버튼을눌러작업을완료한다. CANCER 데이터마지막열에새로운변수 LOG_TIME이계산되어있다. 오른쪽화면위에데이터이름옆에편집모드를알리는 EDIT 가나타나있다. 보기모드인경우에는 VIEW 가표시된다. 확장편집기에서프로그램을이용하는경우다음프로그램이위의작업과동일한효과를갖는다. CANCER 데이터의변수TIME의로그값이계산되어 LOG_TIME 변수가만들어지고그데이터가 CANCER01 에저장된다.
67 아래에보는것처럼솔루션기능에서여러분석이가능하지만데이터변환과같이확장 편집기에서적절한 PPROCEDURE(5 장참고 ) 단계만작성하면간단하게원하는분석결과 를얻을수있다. 3.2 SET 문과연산자 3.2.1 SET 문 SET 문은기존의 SAS 데이터를이용하여새로운 SAS 데이터를만드는데이터단계에서기존의 SAS 데이터이름을설정하는곳이다. 다음프로그램은앞의예제데이터 TWO 와동일한 SAS 데이터 THREE를만드는것이다. 이를이용하여이미만들어진 SAS 데이터를조작하게된다. 일반적으로 SET 문과 RUN 문장사이에데이터작업프로그램을실
68 Chapter 3. 데이터변환하기 행하게된다. 다음 DATA 옆의새로운데이터이름과 SET의기존의데이터이름이동일하면데이터변환작업결과데이터가기존의데이터에겹쳐저장된다. 기존의데이터에서원변수값이변환되지않고새로운변수가만들어지는경우에는기존데이터이름을그대로사용하는것이효율적이다. 3.2.2 연산자 사칙연산및 Power( 승 ) 은 +, -, *, /, ** 을사용하면된다. 로그 (log), 지수 (exponential) 값은 SAS 함수 (4장참고 ) 를이용해야한다. 다음프로그램은데이터 TWO를이용하여변수 IQ2를 IQ를이용하여만들고 IQ 변수를제곱하여 IQ에다시저장하여데이터 THREE를만든다. 만약 THREE 대신 TWO를쓰면이전의 TWO 데이터에새로만들어진데이터가저장된다. 연산자의우선순위는수학의연산자순위와같다. 우선순위를결정하는괄호기호는 () 만을사용할수있다.
69 비교연산자는다음과같다. 기호를사용하거나문자를사용할수있다. 문자보다는기호 를사용하는것이편리하다. 기호 = ^= > < <= >= ^> ^< 문자 EQ NE GT LT LE GE NG NL 논리연산자는 AND( 그리고 ), OR( 혹은 ) 을사용할수있다. 다음프로그램은시간에 100 이상이고 (and) 병종류가 Stomach 인사람만새로운데이터로만드는프로그램이다. 프로그램은대소문자구별이없지만문자관측치의경우에는대소문자구별을해야한다. 그러므로아래프로그램에서 Stomach 로하지않으면 CANCER2에는관측치가하나도저장되지않는다.
70 Chapter 3. 데이터변환하기 3.3 제어문 SAS의프로그램은한줄씩아래로실행한다. 그리고데이터단계에서는변환작업이데이터행단위로차례로실행된다. 위의프로그램을분해해보자. 데이터 CANCER에는두개의변수 (TIME, TYPE) 와 30개의관측치가있다. 프로그램이실행되면아래절차에의해데이터단계가완성된다. DATA CANCER2; CANCER2 이름의 SAS 데이터를만들준비한다. SET CANCER; 기존의 CANCER 데이터를불러와작업준비를한다. TIME1=LOG(TIME**2); TIME1 이름의변수가기존데이터에없으므로우선생성한다. 그리고 LOG( Time ) 을계 산하여 (time 값은첫관측치인 124가이용 ) 변수 TIME1 첫관측치에지정한다. TIME=2*TIME; TIME 이름의변수가기존데이터에있으므로 2*TIME(time 값은 124) 계산되어 TIME 변수 ct 관측치가 248로바뀐다. RUN; 이문장은더이상의데이터작업이없음을 SAS에게알리게된다. 위의작업이첫행만끝났으므로두번째행에서동일한작업을반복하여 TIME1애는 9.96, TIME에는 292를저장하고세번째행으로이동한다. 데이터마지막관측치까지동일한작업이반복하고결과는데이터 CANCER2에저장된다. PROC PRINT에의해출력창에출력하면변환결과를얻게된다. 2 SAS의순차적실행과정을제어하는문장을제어문 (control statement) 이라하는데가장많이사용하는것이 IF문과 DO문이있다.
71 3.3.1 IF 문 (1) IF ( 조건 ) THEN 문장 ; 조건이성립하면문장이실행된다. 조건의 ( ) 은사용하지않아도되나프로그램을이해하 기쉽게하려면사용하는것이좋다. EXAMPLE: if ~ then 문사용하기 CLASS.txt는학생 19명의이름 (Name), 성별 (Gender), 나이 (Age), 키 (Height, 인치 ), 몸무게 (Weight, 파운드 ) 를조사한자료이다. 이예제데이터는 SASHELP 라이브러리에 CLASS 라는이름의 SAS 데이터로존재하는 SAS 예제데이터이다. ( 관측치수 19개이다 ) 위에서키를 CM(1인치 =2.54cm), 몸무게를 Kg(1파운드 =453g) 으로환산하고, 변수명은 HEIGHT0와 WEIGHT0로하자. 또한공식 ( 체중kg)/( 신장m) 2 을이용하여신체질량지수 (Mass Index) 를계산하고변수명은 MASS로하자.
72 Chapter 3. 데이터변환하기 PROC PRINT 에서 VAR 문장은출력하기원하는변수만지정해주는것이다. 출력된결 과는다음과같다. 키가 170cm 이상인개체 ( 학생 ) 에대해 TALL 이라고구별하는변수 (GROUP) 를만들자. 170cm 이상인경우에는 GROUP 변수가 TALL 이되나그렇지않으면결측치가된다. 문 자일경우에는빈칸이되나숫자인경우에는. 이된다.
73 그러므로 GROUP 에대한기본값을설정해주는것이좋다. 다음과같이문자열의크기 는처음설정하는곳의크기에따라결정된다. 그러므로 NT 로하면 GROUP 변수의문자 열크기는 2 이다. 조건을만족하는데이터일부만얻을때 DELETE 명령을사용한다. 아래왼쪽은성별이 M(case sensitive, 대소문자구별 ) 인데이터를없애는것이고오른쪽은 F 인데이터만얻는 것이므로같다. 이를데이터 SUBSET 이라한다.
74 Chapter 3. 데이터변환하기 EXAMPLE: if ~ then 문사용하기 (2) 몸무게가 30미만이면 WEAK, 몸무게가 50이상이면 BIG, 그리고 30이상 50미만이면 NORMAL 로분류하는변수 GROUP1을만들어보자.
75 EXAMPLE: if ~ then 문사용하기 (3) 다음은신체질량지수에따른비만판정기준이다. MASS0=(MASS+10) 의값을이용하여각학생의비만정도를변수 MASS_G으로표현해보자. 적정 = NORMAL 조금비대 = LITTLE 비대 = FAT 으로설정하시오. 2 신체질량지수에의한비만판정기준표 ( 단위 : Kg / m )ACSM 1998 구분 남자 여자 적정 24 ~ 27 23 ~ 26 조금비대 27 ~ 31 26 ~ 32 비대 31 이상 32 이상
76 Chapter 3. 데이터변환하기 EXAMPLE: if 문으로데이터일부얻기 CLASS.txt 에서키가 60 인치이상이거나몸무게 100 파운드이상인학생들만으로이루어 진 SAS 데이터를만들어보자. IF 문의 () 조건후에아무것도사용하지않으면조건을만족 하는관측치만 SET 문의데이터에저장된다. 아래프로그램은이전프로그램과동일한결과를얻는다.
77 3.3.2 IF 문 (2) IF ( 조건 ) THEN DO; 문장 ( 들 ); END; ( ) 의조건이성립하면 DO~END 사이의문장들을실행한다. 3.2.1 절에서 THEN 뒤에문 장이하나인경우와달리여러문장을실해하고자할때사용된다. EXAMPLE: if ~ then do; 사용하기 학생들의키 (HEIGHT) 가 60인치보다큰관측치 ( 학생 ) 의경우몸무게 ( 파운드, WEIGHT) 는 0.9배, 키는 1.1배를하자. 변수명은 HEIGHT2와 WEIGHT2으로하자.
78 Chapter 3. 데이터변환하기 만약키가 60 보다크지않은학생의경우새로운변수 HEIGHT2 와 WEIGHT2 는결측치 이다. 만약이때새로운변수의값을기존값으로하려면다음과같이하면된다. EXAMPLE: if ~ then do; 사용하기 (2) UNIV.txt 자료미국대학이름, 학교종류 (Liberal Arts, Univ.), SAT 점수, 입학률 (acceptance rate), 일년간학생들이쓴비용, 입학생중고등학교때 10% 안에든학생비율 (%), 교직원의박사학위소지비율 (%), 졸업하는비율 (%) 이다.
79 SAT 성적이 1350 이상이거나입학생중고등학교때 10% 안에든학생비율 (TOP10) 이 85% 이상이면우수학교라하고그렇지않으면비우수학교라정의한다. 우수여부를분 류하는변수를하나만들어보고, 변수명은 GROUP1 이라하자.
80 Chapter 3. 데이터변환하기 변수 TOP10, PHD, GRADUATE 값의평균을구해보고, 변수명은 AVG1 으로하자. 만약 AVG1 의값이 85 이상이면 TOP10 은 90, PHD 는 85 로하고, AVG1 변수가출력될때정수로 출력되게하자. 자동생성변수 ID+1; ID+1; 의의미는변수 ID를만들고관측치마다 1씩증가시키라는것이다. ID+2; 를하면어떻게될까? 2, 4, 6, 으로된다.
81 3.3.3 IF 문 (3)IF ( 조건 ) THEN; 문장 1( 들 ); ELSE DO; 문장 2( 들 ); END; ( ) 의조건이성립하면문장1을그렇지않은경우문장2를실행한다. 그러나이문장은다음과같이 IF문 2번쓰는것으로해결될수있다. IF ( 조건 ) THEN DO; 문장1( 들 ); END IF ( 반대조건 ) THEN DO; 문장2( 들 ); END; EXAMPLE: if ~ then; else 사용하기 UNIV.txt 자료 : 교직원중박사학위소지자 (PHD) 가 90% 이상이면그룹을 ( 변수이름 : GROUP2) HIGH 그렇지않으면 LOW 라하자. PRINT PROCEDURE에서원하는변수만출력하려면 VAR 문장을사용하면된다.
82 Chapter 3. 데이터변환하기 아래프로그램은위와동일한작업이다. 그러나결과를보면 HIGH 가다출력된것이 아니라 HIG 로세글자만출력되었다. 이는 GROUP2 변수의초기치가설정될때 LOW 로세글자로되었기때문이다. 이런경우 GROUP2= LOW 로설정하여주면된다. IF~THEN ELSE 문을모르는경우다음과같이프로그램하면된다. 물론 IF 문을두번 사용함으로써실행시간이약간길어지기는하겠지만컴퓨터성능의발달로인하여실제 사용자들은차이를느끼지못할것이다.
83 3.3.4 DO 문 DO UNTIL, DO WHILE 문이있으나사용빈도가매우적을뿐아니라고급프로그램이주로사용되므로본책에서는생략하기로하자. DO 문은설정된초기값과말기값까지설정된증가분만큼증가시키면서문장을실행한다. DO 변수이름 = 초기값 TO 말기값 (BY 증가분 ); 문장 ( 들 ); END; EXAMPLE: DO 문사용하기 다음프로그램은 1부터 10까지의정수의세제곱을계산하는프로그램이다. 변수 I를 1부터 10까지 1씩증가시키면서 DO loop 안에있는문장을반복실행한다. 증가분 (BY) 설정이없었으므로 1씩증가한다. I=1, 2,, 10으로증가되면서 J=I**3; 을반복한다. 그러므로 J=3, 8,, 1000이결과이다.
84 Chapter 3. 데이터변환하기 그런데위프로그램을실행시키면출력결과는마지막한개만나온다. J=1000 이맞는데 변수 I 는하나더증가된 11 이다. 원하는결과를얻기위해서는 OUTPUT 을사용하면된다. OUTPUT 은현재변수값들을데이터에저장하라는의미이다. 다음프로그램은증가설정하는 BY 옵션을사용한경우이다. 말기값이 10 이나정수 9 이후값이 13 이므로 9 까지만저장된다.
85 EXAMPLE: DO 문사용하기 (2) 다음은일정한숫자만큼증가시키지않는경우예제이다. 문자열을사용할수있다. 문자열을사용할때는 혹은 을사용해야한다. ^ = 의의미는같지않다는의미이다. 즉 (I^= 남자 ) 는변수 I가 남자 가아닐때의조건이다.
86 Chapter 3. 데이터변환하기 EXAMPLE: DO 문사용하여데이터입력하기 다음은세개의그룹 (1, 2, 3) 으로부터남자 3명여자 3명을추출하여 IQ를조사한데이터 이다. 분석을위하여 SAS 데이터를입력해보자. 그룹1 그룹2 그룹3 남자 여자 남자 여자 남자 여자 125, 120, 115 113, 110, 135 123, 118, 130 100, 130, 130 110, 110, 115 115, 120, 110 아래와같이변수 4개 ( 그룹, 성별, 반복, IQ), 관측치 18개입력하면된다. 이처럼 DO 문을사용하지않고 SAS 데이터로만들수있다.
87 위의데이터처럼변수값이반복되는경우 DO 문을사용하면간단하게입력할수있다. 이런경우는드물고입력해야할데이터가많은경우가아니면효율성이떨어지므로자주 사용되는예제는아니다.
88 Chapter 3. 데이터변환하기 EXAMPLE: DO 문두번사용하기 이단 ~ 십이단을출력해보자. 앞의숫자반복을위하여 DO문사용, 뒤에숫자반복을위하여 DO문을사용하면된다. NOOBS 옵션의의미는출력할때앞에 OBS를출력하지말라는옵션이다. OUTPUT; 을사용함으로써그때의변수관측치를저장하도록한다.
89 EXAMPLE: DO 문두번사용하기 (2) 10씩증가하면서합을출력하는프로그램을작성해보자. 1부터 10까지의합계, 11-20까지의합계, 이렇게 100까지출력하는프로그램을작성하자. S=0; 이행이실행될때변수 S의값이 0으로설정된다. OUTPUT; 을내부 DO 루프밖에사용함으로써내부 DO 루프실행이끝난후그결과를저장하게된다. 그러므로변수 END가반복되는회수만큼저장된다. 그러므로관측치가 10개이다. OUTPUT; 을내부 DO문안에사용하면관측치가 100개출력될것이다.
90 Chapter 3. 데이터변환하기 3.3.5 RETAIN 문 RETAIN 문은변수의초기값설정과저장된값을유지하기위해사용된다. 예제중심으 로사용방법을설명하기로하자. EXAMPLE: RETAIN 문사용하기 SAS 데이터에서새로운변수에초기치를할당하기위하여사용된다. 만약초기치를할당하지않으면결측치 (.) 로배정된다.
91 RETAIN 문을사용하여 TOTAL 변수의초기값으로 0 이할당된다. 첫행은 X=1 이고왼쪽 TOTAL=0 이므로 TOTAL 에는 1 이저장된다. 두번째행에는 X=3 이고왼쪽 TOTAL( 이전 TOTAL 값 )=1 이므로 TOTAL 에는 4 가저장된다. EXAMPLE: RETAIN 문사용하기 (2) 자료의평균을구하는프로그램을 RETAIN 문을이용하여작성해보자. 마지막행의 AVG 변수의값이평균이다.
92 Chapter 3. 데이터변환하기 3.4 데이터합치기 3.4.1 SET 과 MERGE SAS 데이터를합치는방법으로 SET 문과 MERGE 문이있다. SET 은두데이터를세로 로합치는것이고 MERGE 문은가로로합치게된다. EXAMPLE: SET 문과 MERGE 문사용하기 다음과같이두개의 DTAT SET(ONE, TWO) 이있다고가정하자. ONE 에는 3 개의변수 X1, X2, X3 가있고, TWO 에는 3 개의변수 X1, X2, X4 가있을때 SET 과 MERGE 를이용하여자 료를합칠경우어떠한결과가나오나확인해보자.
93 데이터 ONE 데이터 TWO SET 문은데이터를세로로결합한다. 데이터 ONE을위에 TWO를아래에결합한다. 없는변수에대해서는결측치로저장된다. 데이터 TWO 를위에놓고두데이터를결합한다. 결과는위와동일하다. MERGE 문은데이터를가로로결합한다. 두데이터동일한변수가있으면뒤에있는데이터변수관측치값이엎어진다. 관측치개수는 TWO의것이더많으므로 3개가된다. 동일변수 X1, X2에대해서는뒤에있는 TWO의관측치값이저장된다. TWO에는변수 X3의관측치가 ONE의관측치가저장되고 3번째는결측치로처리된다.
94 Chapter 3. 데이터변환하기 변수 X1, X2 에대해서는뒤에있는 ONE 의관측치가엎어진다. 그러나 ONE 에는관측치 가 2 개이므로나머지부분은 TWO 데이터관측치가그대로있다. 변수 X3 의경우 TWO 에 는없으므로 3 번째관측치는결측치가나타난다. EXAMPLE: SET 문과 MERGE 문사용하기 (2) 3개의 DATA SET ONE, TWO, THREE가각각다음과같을때 SET과 MERGE문을적절히이용하여데이터가어떻게합쳐지는가보자. SET 문을이용한경우
95 MERGE 문을이용한경우
96 Chapter 3. 데이터변환하기 3.4.2 UPDATE 문 가로결합이고뒤에데이터가앞의데이터위에덥혀지는점에서 MERGE 문과유사하나 뒤의데이터에결측치가있을경우이전데이터값이저장된다. 예를들어보자.
97 3.4.3 공통변수이용하여합치기 고객에대한정보가두데이터에나뉘어저장되어있다고하자. 예를들어 ONE 이라는 데이터에는 IQ, 데이터 TWO 에는성별, 소득의정보가있다. 물론고객을식별하는 ID 변수 는모두있다. 어떻게합칠것인가? 가로로합치는 MERGE 문을생각하게될것이다. MERGE 문을사용하면동일변수이름의 ID 의경우뒤에데이터로엎어져버리므로다 음결과를얻는다. 이런문제를해결하기위한방법으로 BY 문을사용하게된다. BY ID; 의의미는변수 ID 에의해 MERGE 작업을시행하라는것이다. 즉 ID 가같은값을찾아결합하게된다.
98 Chapter 3. 데이터변환하기 그러나출력결과에변화가없다. 이상하다. 앞에서설명하였듯이로그창을살펴보는습관을갖자. 오류메시지가있다. 의미는데이터 TWO가정렬 (sort) 되어있지않았다는것이다. SAS에서 BY문을쓰려면 BY문에지정된변수에의해그데이터가정렬되어있어야오류가발생하지않는다. 데이터단계뿐아니라 PROCEDURE 단계에서사용되는 BY 문도동일한규칙을적용받는다. 이문제를해결하려면데이터를 ID 변수에의해크기순으로정렬해야한다. 이때사용 되는 PROCEDURE 는 SORT 이다. 이에대한자세한내용은 5 장에서다루기로한다.
99 이런데이터합치기는새로운관측에의해데이터를갱신 (update) 하는경우에도사용된다. 데이터 OLD를기존의고객정보, 데이터 NEW를새로운정보라하자. 새로운정보에의해기존데이터를갱신해보자. 변수 ID는학번이고 GPA는전학년평점이라하자. 학번 2의학생의평점이 3.42로수정되었다고하자. 두데이터모두 ID에의해정렬되어있으므로굳이정렬할필요는없다. 3.4.4 필요한변수만가져오기 두데이터에동일한변수 ( 예 : ID) 가있어이변수에의해두데이터를합치려고한다면 MEREGE 문을사용하려고할것이다.
100 Chapter 3. 데이터변환하기 아래프로그램은 DATA TWO 로부터 GENDER 라는변수만가져와 ONE 에 MERGE 한다. 만약 소득변수도가져오기원하면 TWO(KEEP=GENDER INCOME); 이렇게사용하면된다. 만약 필요없는변수를제외하려면 TWO(DROP=INCOME); 이렇게사용하면된다. 3.4.5 일부관측치만가져오기 다음프로그램은두개의데이터를 SET 문을사용하여합치는데 TWO 데이터에서처음 2 개데이터만가져올때사용된다.
101 DROP 과 KEEP 문장은변수를원하는변수를제거하거나그변수들만저장하고자할때 사용한다. DELETE 는관측치를제외할때사용하는것임을기억하기바란다. EXAMPLE: DROP 문과 KEEP 문사용하기 다음예에서는두개의 DATA SET ONE과 TWO를 SET 문장을이용하여합치는프로그램이다. DATA THREE는 KEEP을이용하여 X3, X4, X5 변수를선택한것이고 DATA FOUR는 DROP을이용하여 X1, X2 변수를제외한것이므로데이터 THREE, FOUR의저장결과는동일하다.
102 Chapter 3. 데이터변환하기 3.5 알아두면편리한기능 3.5.1 INFORMAT 과 FORMAT 데이터를읽어올때형식을지정하는것은 INFORMAT(INPUT 문장에옵션형식으로지 정한다 ) 이라하고결과창에출력하는형식을지정하는것을 FORMAT(INPUT 문장위에문 장형식으로지정한다 ) 이라한다. 3.5.2 Label 문 변수가어떤내용인지설명을부여하는문장이다. 다음은 CLASS 데이터의 Height 변수에대한 Label 문부여방법이다. 다른변수에대해서도동일한방법으로부여할수있다. MEANS는측정형변수의기초통계량을구하는 PROC이다. 변수이름을부여할때적절한것을사용한경우에는 LABEL 문의효용은줄어든다. 그러나변수가많아 X1, X 2,.., 등으로이름을부여한경우 LABEL 문이사용하여변수들을구별하는것이좋다.
103 3.5.3 날짜보기 컴퓨터현재시각, 날짜를출력하는프로그램이다. 날짜의경우 1960 년 1 월 1 일을 0 으로 하여매일 1 씩증가시킨다.
104 Chapter 3. 데이터변환하기 3.5.4 FORMAT PROCEDURE 변수의값에대한설명을설정하는 PROC 단계이다. 사용자정의의 FORMAT 을작성하는 PROC 이다. 예를들어설명하는것이더편리하다. EXAMPLE: PROC FORMAT 사용하기 SASHELP 라이브러리에있는 CLASS 데이터를예제데이터로사용하자. FORMAT procedure를사용하여원하는형식으로출력해보자. AGEFMT, GENDERFMT은형식이름이므로사용자가설정할수있으나변수명 +FMT로하는것이구별하는데유리하다. $ 의의미는변수의관측치가문자나문자열일경우사용한다. FORMAT으로설정되지않은관측치는원래값으로출력된다. FORMAT procedure는한번설정해놓으면향후 PRINT procedure에계속사용할수있다.
105 이처럼 FORMAT 문은데이터를출력 (PROC PRINT) 할때각변수의값에대한설명이나 범주그룹을설정할때사용된다. 원데이터의값들은변하는것이아니고출력할때만설 정된형식 (format) 으로출력창에출력되는것이다. EXAMPLE: PROC FORMAT 사용하기 (2)
106 Chapter 3. 데이터변환하기 CEO.txt( 나이, 연봉 ) 데이터를우선 SAS 데이터 CEO 를만들어보자. IF 문사용해나이를 30 대, 40 대, 50 대이상 으로나누고변수명을 AGE_G 으로하자. 그 리고 LABEL 문을사용하여변수에대한설명을붙여보자. FORMAT 문을이용하여나이변수 AGE 가 30 대, 40 대, 50 대이상으로출력되게하자.
107 3.5.5 자동생성변수 SAS 내에서자동으로생성되는변수에는 _ 이름 _ 에서보는것처럼 _ 가변수명양쪽에 붙는다. 가장많이사용되는것이 _N_ 으로 Obs 의값과동일하다. 그리고 SAS 분석결과 얻어지는변수들은 SAS 가자동으로이름을부여하는데형식은 _ 변수명 _ 이다. EXAMPLE: _N_ 자동생성변수 CEO 중연봉이큰 10명만으로이루어진새로운데이터를만들어보자. 연봉이 10번째인 CEO의연봉이 643 인줄알고있다면 IF문을사용하면된다.
108 Chapter 3. 데이터변환하기 연봉서열 10번째에대한데이터가없다면다음방법을이용하면된다. 데이터를크기순으로정렬한후열번째데이터까지만저장하면된다. 데이터를크기순으로정렬하는 PROC는 SORT이다. BY문은정렬하려는변수이름을지정하는것이고, DESCEDING 옵션은크기의역순으로정렬하라는의미이다. 데이터를연봉크기순으로역정렬한후 10번째관측치까지만얻으면된다. SAS 데이터를출력할때 OBS라는변수가있는것처럼출력되지만실제데이터에는없다. OBS와같은역할을하는변수가자동생성변수인 _N_ 이다. 3.5.6 SAS 데이터나누기 3.3.1 절에서는 IF 문을사용하여일정한조건에따라 SAS 데이터의일부 SAS 데이터로 만드는방법을알아보았다. 그때는데이터단계한번에하나의 SAS 데이터를얻었으나 여기서는두개이상의 SAS 데이터를얻는방법을알아보자. EXAMPLE: SAS 데이터두개이상만들기 CLASS.txt 자료에서다음프로그램을실행해보자. 두개의 SAS 데이터가만들어지며하나는 CLASSM( 여기에는성별이 M인관측치 ), 다른하나는 CLASSF( 성별이 F인관측치 ) 이다. 성별변수의경우범주가 2개이므로아래 IF문장대신 ELSE OUPUT CLASSF; 을사용해도같은결과를얻는다.
109 3.5.7 FIRSTOBS 와 OBS 옵션 SET 문장에사용되는옵션으로 FIRSTOBS 는시작관측치를지정하는것이고 OBS 는관 측치의끝을지정한다. FIRSTOBS 가생략되면처음부터, OBS 옵션이생략되면끝까지저장 된다. EXAMPLE: FIRST/OBS 옵션사용하기 CLASS.txt 자료에서다음프로그램을실행해보자. 11 번째관측치부터 CLASS3 에저 장된다.
110 Chapter 3. 데이터변환하기 아래프로그램은 11 번째부터 13 번째관측까지만저장된다. 3.5.8 RENAME 문장 변수이름을바꿀때사용된다. 앞에서설명하였듯이 SAS 데이터에서변수를제거하는 명령은 DROP, 원하는변수만저장하는명령은 KEEP 이다. RENAME 이전변수명 = 새로운변수명 ; EXAMPLE: RENAME 문장사용하기 CLASS.txt 자료에서변수 HEIGHT 의이름을 HEIGHT0 로변환하여보자. 만약 RENAME 문장을모른다면다음방법이있다. HEIGHT 와동일한 HEIGHT0 만들고 DROP 문을사용하여 HEIGHT 변수를제거하면된다.
111 RENAME 문장을사용하면간단히해결된다. 등호왼쪽이원변수이름임에유의하기바 란다. 여러변수를다음방법으로동시에이름변경할수있다. 3.5.9 PUT 문사용하기 PUT문은데이터를로그창에출력할때사용한다. SAS 데이터가제대로만들어졌는지알려면로그창의 NOTE( 노트 ) 를보면된다. 그러나만들어진데이터내용을보려면 PROC PRINT을사용하여출력창에출력을해야한다. 이런번거로움을덜기위하여아래와같이 PUT문을사용하면로그창에데이터가출력된다.
112 Chapter 3. 데이터변환하기 3.5.10 TITLE 문과 FOOTNOTE 문 TITLE문은출력결과의제목을붙이는것으로제목이두줄이상이면 TITLE1, TITLE2 등으로지정하면된다. SAS를새로시작하면디폴트제목은 SAS 시스템 이다. 한번지정된제목은다시지정하지않는한유효하다. FOOTNOTE는출력결과꼬리말이며사용방법은 TITLE과동일하다. 다음프로그램은 CANCER 데이터출력시제목과꼬리말을출력한것이다. PROC MEANS 앞에제목설정이없으므로 PROC 결과제목도동일하다. 만약제목을없애고싶다면 ( 따옴표사용하지않음 ) 문장을사용하면된다. FOOTNOTE도같은방법으로없앨수있다.
113 3.5.11 OPTIONS 문 출력결과에대한형식을지정할때사용한다. 사용방법은다음과같다. 이문장은프로 그램어디에서사용가능하며문장사용이후부터설정이유효하다. SAS 가종료되면설정 한옵션은디폴트로 reset 된다. NODATE 출력제목에날짜 / 시간출력하지않음. NONUMBER 출력제목에페이지출력하지않음. NOCENTER 출력결과가왼쪽정렬된다. 디폴트 = 가운데정렬 PAGESIZE 출력결과가한페이지에몇행인지지정한다. 디폴트 =68 LINESIZE 출력결과넓이를지정한다. 디폴트 =121 출력결과에대한옵션설정은 SAS 메뉴에서도가능하다.
114 Chapter 3. 데이터변환하기
115 3.5.12 주석문 프로그램내용을설명하거나프로그램디버깅을위하여사용되는문장으로실행되지않는다. 사용방법은다음과같다. 주석문 (comment) 은확장편집기내에서자동적으로초록색이된다. * ( 설명내용, 혹은프로그램 ); 한행일경우 /* ( 설명내용, 혹은프로그램 ) */ 두행이상인경우 아래첫프로그램에서는첫행만실행되지않고아래프로그램에서는프로그램전체가실행되지않는다. 3.5.13 두데이터합칠때변수명으로 SAS 데이터구별하기 두 SAS 데이터를합칠때새로운변수를이용하여데이터소스를구별해보자. EXAMPLE: 데이터합칠때데이터소속구별하기 CLASS.txt 자료에서다음프로그램을실행해보자. CLASSM에서가져온관측치에는 DATA NAME에남자, CLASSF에서가져온경우에는여자가저장되어있다.
116 Chapter 3. 데이터변환하기 3.5.14 배열 (array) 사용하기 SAS 에서배열의사용예를다양하지만여기서는변수이름에동일한접두사 (prefix) 를갖 는경우변수이름을관리하는예제를살펴보자. 다음프로그램은 D1, D2, D3, D4, D5 변 수명을 X 에의해관리하는프로그램이다.
117 배열은 DATA 문을사용할때마다지정해줘야하며이전에배열에대한이름으로사용 하였던것과다른이름을사용할수있다. X1 ~ Normal(1,1), X 2 ~ Normal(2,4), X 3 ~ Normal(3,9), X 4 ~ Normal(4,16), X 5 ~ Normal(5,25) 을따르는변수 10개를생성하고, 각각의 seed는 1, 2, 3, 4, 5로하자.
118 Chapter 3. 데이터변환하기