사용자 삽입 이미지

표준 정규 분포

사용자 삽입 이미지

자유도가 1인 t분포

사용자 삽입 이미지

빨간색이 표준정규분포, 파랑색이 t분포

사용자 삽입 이미지

검정색 선 : 표준정규분포
파랑색 선 : t-분포 (df = 1)
빨강색 선 : t-분포 (df = 2)
초록색 선 : t-분포 (df = 3)
갈  색  선 : t-분포 (df = 4)

>>아래에서 보는 것처럼, t-분포의 자유도가 높을 수록 표준정규분포에 근사함을 알 수 있다.




표준정규분포 설명

내가 이 게시판에 올린 제목을 보고 당황한 사람이 있을거라 생각한다. 하지만 의심을 하지말고 일단 끝까지 읽어보길 바란다.

미안하지만 아직 표준정규분포를 모르는 사람들은 주변 사람들에게 수학의 정석을 빌려 찾아보길 바란다.

(아님 배울때까지 기다렸다가 이 글을 읽기 바란다.)


이놈을 처음 만난 날을 아직 잊을 수가 없다. 나는 수업도 안 듣고 이놈만 50분동안 째려 보았으니 말이다.

먼저 이 곡선을 뚫어져라 쳐다 보자. 특정 구간에서 곡선의 밑 면적은 해당 확률변수의 범위에 따른 확률을 나타낸다... 그리고 이 곡선에 있어서 x축은 점!근!선! 이다. 즉, 절대 만나지는 않는다는 것이다.

다시 말해서, 확률이 0일 수는 없다는 것이다. 하다 못해 내가 전교 500등을 해도 전교 1등을 할 확률이 절대 없지는 않다는 것이다. 이것이 첫번째 교훈.. Impossible Is Nothing (어디서 많이 본 듯 하다는.....*ㅡㅡ*쿨럭)

그리고 또한번 째려 보자. 과연 이 곡선에서 상위 0.1%의 밑면적과 평균에서 전후 0.1%의 밑면적은 얼마나 차이가 날까..

여기서 두번째 교훈... 남들 "만큼" 해서는 최고가 될 수 없다.

그리고 이번엔 이놈의 한가운데를 가로지르는 y축을 보자. x=0 즉, "평균"의 면적은... 직선이므로. 그 면적이 0다. 즉 이세상에 평균이란 없는 것이다... 이 무슨 궤변인고 하니..

세상은 y축이라는 기준을 따라 (+) 아니면 (-)다. 발전하거나, 뒤쳐지거나.. 정체란 있을수 없다

설령 아무리 공부를 열심히 해도 성적이 오르지 않는다 해도.. 그것은 정체가 아니라 발전이다. 그렇지 않으면 점차 퇴보할 뿐이다. 인생은 너무나 가파른 산이어서, 오르다 쉬는 순간에는 그만큼 미끄러져 내려가고 있는 것이다.

그리고 이번엔 이 곡선의 오른쪽 끝을 찾아보자.. 찾았는가?---->Yes 한 사람은 거짓말쟁이다. 아까도 말했듯 x축은 점근선이다. 즉, 곡선은 점점 x축에 가까워지면서 끝없이 나아가고 있다.

여기서 네번째, 나는 절대로 최고가 아니다! 세상엔 나보다 우월한 존재가 항상 존재한다. 따라서 나는 멈추어서는 안된다. 계속 나아가야만 한다! 는 것이다.


오늘 나의 헛소리는 여기까지!!!  일어주셔서 감사합니다~~~~~

by Sungjo Park Joe & Soohy 2007.02.21 19:05
SAS

9장. SAS 함수와 응용 단원이다.
엑셀에서 함수를 말하면 뭐라고 생각되는가?
연산을 위한 명령어가 아닐까?
책에는 엄청난 숫자의 함수가 적혀있다.
일단 뭐 적어보도록 하자.

1. 연산 함수
   ABS(argument): 절대값을 계산한다(돌려준다)
   DIM(ARRAY명): ARRAY문의 원소들의 수를 계산한다.
   HBOUND(ARRAY명): ARRAY에 사용된 원소들은 상한을 리턴한다.
   LBOUND(ARRAY명): ARRAY에 사용된 원소들의 하한을 리턴한다.
   MAX(argument, argument, ...): 최대값
   MIN(argument, argument, ...): 최소값
   MOD: 나눗셈에서의 나머지를 구한다
   SIGN: 변수의 부호 또는 0

2. Truncation(절단, 끝을 잘라냄) 함수
   CEIL(argument): 변수보다 큰 수이면서 제일 작은 정수 - 올림
   FLOOR(argument): 변수보다 적은 수이면서 제일 큰 정수 - 내림
   INT(argument): 정수 부분만을 취한다
   ROUND(argument, 반올림단위): 반올림의 값

3. 수학적 연산함수
   DIGAMMA: gamma 함수의 log 미분값
   ERF: error function (에러 기능)
   ERFC: error function의 complement (에러 기능 보충)
   EXP: 지수함수
   GAMMA: complete gamma function (완벽한 감마 기능 -_-;)
   LGAMMA: 주어진 값의 gamma function의 자연로그 계산
   LOG: 자연로그(base가 e)
   LOG2: base가 2인 log
   LOG10: 상용로그(우리가 일반적으로 쓰는 로그)

4. 삼각함수와 Hyperbolic(쌍곡선) 함수와 관련된 기능
   SIN(argument): sine 계산
   COS(argument): cosine 계산
   TAN(argument): tangent 계산
   ARSIN(argument): arc sine 계산
   ARCOS(argument): arc cosine 계산
   ATAN(argument): arc tangent 계산
   COSH(argument): hyperbolic cosine 계산
   SINH(argument): hyperbolic sine 계산
   TANH(argument): hyperbolic tangent 계산

5. 통계 관련 함수
   CSS(argument, argument, ...): 수정된 자승합
   CV(argument, argument, ...): 변이계수(Coefficient of Variation)
   KURTOSIS(argument, argument, ...): 첨도
   MAX(argument, argument, ...): 최대값
   MIN(argument, argument, ...): 최소값
   MEAN(argument, argument, ...): 산술평균값
   N(argument, argument, ...): 계산에 이용된 Missing이 아닌 자료의 수
   NMISS(argument, argument, ...): Missing 자료의 수
   RANGE(argument, argument, ...): 범위
   SKEWNESS(argument, argument, ...): 왜도
   STD(argument, argument, ...): 표준편차
   STDERR(argument, argument, ...): 표준오차
   SUM(argument, argument, ...): 합계
   USS(argument, argument, ...): 자승합

6. 통계적 확률분포와 관련된 함수
   POISSON(lamde, x): 모수 lamda인 Poisson 확률변수의 분포함수 값 F(x)를 계산한다.
   PROBBETA(x, a, b): 모수가 a, b인 베타분포의 분포함수 값 F(x)를 계산한다.
   PROBBNML(p, n, x): 모수가 n, p인 이항분포의 분포함수 값 F(x)를 계산한다.
   PROBCHI(x, df): 자유도가 df인 카이자승분포의 분포함수 값 F(x)를 계산한다.
   PROBF(x, ndf, ddf): 자유도가 ndf, ddf인 F 분포의 분포함수 값 F(x)를 계산한다.
   PROBGAM(x, a): shape parameter가 a인 감마분포의 분포함수 값 F(x)를 계산한다.
   PROBHYPR: 초기하분포의 분포함수의 값 F(x)를 계산한다.
   PROBNEGB: 이항분포의 분포함수의 값 F(x)를 꼐산한다.
   PROBNORM(x): 표준정규분포의 분포함수의 값 F(x)를 계싼한다.
   PROBT(x, df): 자유도가 df인 t 분포의 분포함수의 값 F(x)를 계산한다.

7. Quantile(변위치) 함수
   BETAINV(p, a, b): 모수가 a, b인 베타확률분포에서 100p% 백분위수를 계산한다.
   CINV(p, df): 자유도가 df인 카이자승분포에서 100p% 백분위수를 계산한다.
   FINV(p, ndf, ddf): 자유도가 ndf, ddf인 F 분포에서 100p% 백분위수를 계산한다.
   GAMINV(p, a): 감마분포의 역함수
   PROBIT(p): 표준정규분포에서 100p% 백분위수를 계산한다.
   TINV(p, df): 자유도가 df인 t분포에서 100p% 백분위수를 계산한다.

8. 난수발생과 관련된 기능
   NORMAL(seed): 표준정규분포를 따르는 확룰변수의 난수를 만든다.
   RANBIN(seed): 모수(parameter)가 n, p인 이항분포의 난수를 만든다.
   RANCAU(seed): Location Parameter 값이 0이고, Scale Parameter 값이 1인 Cauchy 분포 f(x)=1(1+x2)를 따르는 난수를 만든다.
   RANEXP(seed): 모수의 값이 1인 지수분포 f(x)=exp(-x), x>0인 난수를 만든다.
   RANGAM(seed, a): Shape Parameter가 a인 감마분포의 난수를 만든다.
   RANNOR(seed): 표준정규분포를 따르는 난수를 만든다(Box-Muller)방법
   RANPOI(seed, lamda): 모수가 lamda인 Poisson 분포로부터 난수를 만든다.
   RANTBL(seed, p1, ... pn): Probability Mass Function 형태로 주어진 이산확률분포를 따르는 난수를 만든다.
   RANTRI(seed): (0, 1) 구간에서 Triangular 분포를 따르는 난수를 만든다.
   RANUNI(seed): (0, 1) 구간에서 Uniform Distribution을 따르는 난수를 만든다.
   UNIFORM(seed): (0, 1) 구간에서 Uniform Distribution을 따르는 난수를 만든다.

9. 문자 함수(Character Function)에 관한 기능
   BYTE(n): n에 해당되는 ASCII 코드를 리턴한다. n은 0부터 256까지이다.
   COMPRESS: 문자변수의 일부를 제거할 때 이용
   INDEX(source, 찾는 문자): source에서 찾는 문자의 위치를 계산한다.
   INDEXC(source, 찾는문자1, 찾는 문자2, ...): source에서 찾는 문자의 위치를 계산한다.
   LEFT(argument): 왼쪽의 빈칸을 제거
   LENGTH(argument): 인수로 주어진 변수의 길이를 계산한다.
   LOWCASE(argument): 대문자를 소문자로 변환한다.
   RANK(argument): 문자의 ASCII 코드를 반환한다.
   REVERSE(argument): 문자의 내용을 거꾸로 배열한다.
   RIGHT(argument): 오른쪽의 빈칸을 제거
   SUBSTR: 문자에서의 일부를 추출
   TRANSLATE(source, 새로운 문자, 원래 문자): Source에서 특정 문자 열을 바꾸고자 할 때
   TRIM: 빈칸을 제거
   UPCASE(argument): 소문자를 대문자로 변환
※ 예  a=COMPRESS(aa, ' ');  문자변수 aa에서 빈칸을 제거하여 변수 a에 저장
         a=substr(aa, 7, 3): 문자변수 aa 값에서 7번째 문자에 3개를 골라 변수 a에 저장

10. 날짜 계산과 관련된 기능
   DATE(): 현재의 날짜를 SAS Date 값으로 변환한다.
   DATEJUL(julian-date): julian-date를 SAS Date 값으로 변환한다.
   DATETIME(): 현재의 시간과 날짜를 계산한다.
   DAY(date): SAS Date 값으로부터 그 달의 날짜를 계산한다.
   DHMS(date, hour, minute, second): date, hour, minute, second로부터 SAS Datetime을 계산한다.
   이 외에도 다음과 같은 것들이 있는데 도움말을 참조하기 바란다고 씌여있다.
   DATEPART, DATETIME, HMS, HOUR, INTCK, INTNX, JULDATE, MDY, MINUTE, MONTH,
   QTR, SECOND, TIME, TIMEPART, TODAY, WEEKDAY, YEAR, YYQ

11. 기타 특별한 기능
   LAG<n>(argument): SAS에서는 두 변수의 함과 차이는 쉽게 구할 수 있다. 그러나 현재의 관측치와 이전의 관측치의 합이나 차이는 쉽게 구할 수 없다. 바로 앞의 자료를 구하는 것이 LAG() 함수이다. LAG(x)하면 변수 x의 바로 이전 자료를 구하고, LAG2(x)하면 두 번째 앞의 자료를 구할 수 있다.
   DIF<n>(argument): DIF() 함수는 현재의 자료와 이전 자료 Lag"n"과의 차이를 계산한다.
   INPUT(source, informat.): SAS 작업을 하다보면 문자변수를 숫자변수로 바꾸어야 할 필요가 종종 생기게 되는데 이때 유용하게 사용되는 것이 INPUT() 함수이다.
   PUT(source, format.): INPUT과는 반대로 숫자변수를 문자변수로 바꾸어야 할 경우에는 PUT() 함수를 사용한다.

이걸 어찌 다 알겠는가.. 통계학 전공도 아니라서 대체 뭔소리를 하는건지 전혀 모르는 것도 많다.
따로 공부를 해야 하는걸까... 후덜덜덜..

뒤로는 다 예제이다. 실습을 통해 알아보도록 하자.
♥♥♥♥♥
DATA a1;INPUT x y1 y2 y3 z;CARDS;                                                                                                      
-1 10 20 30 112                                                                                                                        
DATA b1;SET a1;                                                                                                                        
xabs=ABS(x);                      /*  xabs변수에 절대값 1   */                                                                         
ARRAY yyy y1-y3 z;                                                                                                                     
ydim=DIM(yyy);                    /*   ARRAY의 개수 4   */                                                                             
yhbound=HBOUND(yyy);              /*   ARRAY의 상한 4   */                                                                             
ylbound=LBOUND(yyy);              /*   ARRAY의 하한 1   */                                                                             
ymax=MAX(x,y1,y2,z); ymin=MIN(x,y1,y2,z);                                                                                              
                   /* ymax는 최대값 112, ymin은 최소값 -1 */                                                                           
zmod=mod(z,100);   /* 112를 100으로 나눈 나머지  12       */                                                                           
xsign=SIGN(x); zsign=SIGN(z);                                                                                                          
                   /* SIGN함수는 값이 음수인 경우 -1, 양수인 경우  1을 나타냄  */                                                      
PROC PRINT;VAR xabs ydim yhbound ylbound ymax ymin zmod xsign zsign;                                                                   
                                                                                                                                       
DATA a1;                                                                                                                               
xceil=CEIL(3.2);  yceil=CEIL(-3.2);                                                                                                    
       /* 3.2 올림은 4, -3.2 올림은 -3    */                                                                                           
xfloor=FLOOR(3.7);yfloor=FLOOR(-3.7);                                                                                                  
        /* 3.7 내림은 3, -3.7 내림은 -4    */                                                                                          
xint=INT(3.7);    yint=INT(-3.7);                                                                                                      
        /* 3.7 정수는 3, -3.7 정수는 -3    */                                                                                          
xround1=ROUND(3.7);xround2=ROUND(3.2);                                                                                                 
        /* 3.7 반올림은 4, 3.2 반올림은 3  */                                                                                          
yround1=ROUND(-3.7);yround2=ROUND(-3.2);                                                                                               
        /* -3.7 반올림은 -4, -3.2 반올림은 -3*/                                                                                        
PROC PRINT;                                                                                                                            
RUN;
♥♥♥♥♥
                                                        SAS 시스템            2007년 02월 21일 수요일 오후 06시22분36초   1

                    OBS    xabs    ydim    yhbound    ylbound    ymax    ymin    zmod    xsign    zsign

                     1       1       4        4          1        112     -1      12       -1       1

                                                        SAS 시스템            2007년 02월 21일 수요일 오후 06시22분36초   2

           OBS    xceil    yceil    xfloor    yfloor    xint    yint    xround1    xround2    yround1    yround2

            1       4        -3        3        -4        3      -3        4          3          -4         -3

♥♥♥♥♥
여기서 간혹 실수를 범하는 경우가 있는데 변수의 합계를 구하고자 할 때, 예를 들어 sumx=x1+x2+x3; 으로 하면 x1, x2, x3중 하나가 Missing이 있는 경우에는 sumx가 Missing이 되는데 sumx=sum(x1-x3); 으로 하면 Missing 자료를 0으로 간주하여 계산되므로 주의를 해야하며, 이 경우 mean()의 경우에도 마찬가지이다.


♥♥♥♥♥
DATA binomial;
binprob1=PROBBNML(0.1,10,4); /* 불량율이 0.1 일때, 10개중에 4개 까지 불량일  확률     */
binprob2=PROBBNML(0.1,10,3); /* 불량율이 0.1 일때, 10개중에 3개 까지 불량일  확률     */
binprob=binprob1-binprob2;   /* 불량율이 0.1 일때, 10개중에 4개 불량일 확률           */
PROC PRINT;
DATA normal;
norprob=PROBNORM(1.96);     /* 표준정규분포에서 1.96시그마에 해당되는 누적확률 0.975 */
norvalue=PROBIT(0.975);     /* 표준정규분포에서  누적확률 0.975에 해당되는 값  1.96  */
PROC PRINT;
RUN;
DATA t;
tprob=PROBT(1.812,10);       /* t분포에서 자유도가 10 일때 1.812 보다 적을 확률, 0.95 */
tvalue=TINV(0.95,10);        /* t분포에서 자유도가 10 일때 누적확률 0.95일때의 t 값,  1.81246  */
PROC PRINT;
RUN;
DATA chi;
chiprob=PROBCHI(3.94,10);    /* 카이자승분포에서 자유도가 10 일때 3.94 보다 적을 확률, 0.05 */
chivalue=CINV(0.05,10);      /* 카이자승분포에서 자유도가 10 일때 누적확률 0.05일때의 카이자승 값, 3.94030 */
PROC PRINT;
RUN;
DATA f;
fprob1=PROBF(3.33,5,10);     /* F분포에서 자유도가 5, 10 일때 3.33 보다 적을 확률, 0.95          */
fvalue1=FINV(0.95,5,10);     /* F분포에서 자유도가 5, 10 일때 누적확률 0.95 일때의 F 값, 3.32583 */
fvalue2=FINV(0.05,10,5);     /* F분포에서 자유도가 10, 5 일때 누적확률 0.95 일때의 F 값, 0.30068 */
fvalue3=1/fvalue2;           /* F분포에서 자유도가 10, 5 일때 누적확률 0.95 일때의 F 값의 역수 , 3.32583 */
PROC PRINT;
RUN;

♥♥♥♥♥
                                                        SAS 시스템            2007년 02월 21일 수요일 오후 06시22분36초   3

                                          OBS    binprob1    binprob2     binprob

                                           1      0.99837     0.98720    0.011160

                                                        SAS 시스템            2007년 02월 21일 수요일 오후 06시22분36초   4

                                                OBS    norprob    norvalue

                                                 1     0.97500     1.95996

                                                        SAS 시스템            2007년 02월 21일 수요일 오후 06시22분36초   5

                                                 OBS     tprob      tvalue

                                                  1     0.94996    1.81246

                                                        SAS 시스템            2007년 02월 21일 수요일 오후 06시22분36초   6

                                                OBS     chiprob    chivalue

                                                 1     0.049987     3.94030

                                                        SAS 시스템            2007년 02월 21일 수요일 오후 06시22분36초   7

                                      OBS     fprob1    fvalue1    fvalue2    fvalue3

                                       1     0.95017    3.32583    0.30068    3.32583

♥♥♥♥♥
결과 값이 나온다는 것과,
해당 함수가 서로 반대의 성향을 안다는 것 까지는 알겠다.
하지만 통계학적 지식이 없고서는 이해하기 힘든 것 같다.
표준정규분포와 t분포는 따로 의미를 공부하도록 링크를 걸었다.
하지만 나머지는 찾기가 쉽지 않았다.


카이자승 검정은 오른쪽에 ppt 파일을 참고하는게 그나마 가장 나은 것 같다.
그리 기대는 하지 말고 보시길 바란다. 왜냐면 나도 잘 이해가 가지 않는다.

다음은 평균이 150이고 표준편차가 20인 정규분포를 따르는 표본 50개를 만들어 이것이 정규분포를 따르는 것인지 체크해보는 프로그램이다....라고 적혀있다.
뭔소린지;
일단 적어본다.

♥♥♥♥♥
DATA rannormal; /* rannormal이라는 데이터셋을 만들자 */                                                                                
DO i=1 to 50;   /* i는 1에서 시작해서 반복을 하는데, 50까지 하며, 1회당 1씩 증가한다 */                                                
randy=150+20*RANNOR(0);  /* randy 변수의 값은 150 + 20 x 표준정규분포를 따르는 난수이다. */                                            
OUTPUT;  /* 결과를 내어라 */                                                                                                           
END;     /* DO문 다시 돌아가서 연산하라 */                                                                                             
PROC PRINT;  /* DO문 끝나면 출력한다 */                                                                                                
PROC UNIVARIATE NORMAL;VAR randy;                                                                                                      
RUN;                                                                                                                                   
/* UNIVERATE문: 자료의 평균, 표준편차, 분산, 중앙값, 사분위수, 최대, 최소, 극단값들, 분포 형태 그림 */                                 
/* UNIVERATE NORMAL: 정규성 검정을 위한 검정 통계량 값 계산 */                                                                         
/* VAR randy: 분석하고자 하는 변수는 randy이다 */

♥♥♥♥♥
                                                        SAS 시스템            2007년 02월 21일 수요일 오후 06시22분36초   8

                                                   OBS     i     randy

                                                     1     1    109.041
                                                     2     2    146.441
                                                     3     3    156.604
                                                     4     4    159.197
                                                     5     5    128.559
                                                     6     6    150.116
                                                     7     7    153.480
                                                     8     8    182.038
                                                     9     9    139.066
                                                    10    10    156.331
                                                    11    11    157.290
                                                    12    12    146.304
                                                    13    13    134.685
                                                    14    14    164.597
                                                    15    15    141.367
                                                    16    16    119.476
                                                    17    17    151.596
                                                    18    18    144.663
                                                    19    19    167.141
                                                    20    20    136.217
                                                    21    21    139.646
                                                    22    22    173.649
                                                    23    23    116.832
                                                    24    24    134.611
                                                    25    25    122.686
                                                    26    26    137.305
                                                    27    27    174.072
                                                    28    28    101.571
                                                    29    29    146.519
                                                    30    30    136.310
                                                    31    31     95.089
                                                    32    32    135.032
                                                    33    33    154.091
                                                    34    34    148.381
                                                    35    35    186.334
                                                    36    36    133.084
                                                    37    37    166.362
                                                    38    38    137.690
                                                    39    39    126.317
                                                    40    40    126.118
                                                    41    41    141.523
                                                    42    42    154.968
                                                    43    43    176.442
                                                    44    44    129.590
                                                    45    45    184.207
                                                    46    46    152.146
                                                    47    47    144.686
                                                    48    48    143.962
                                                    49    49    129.463
                                                    50    50    173.504

                                                        SAS 시스템            2007년 02월 21일 수요일 오후 06시22분36초   9

                                                    UNIVARIATE 프로시저
                                                       변수:  randy

                                                           적률

                                  N                   50    가중합                     50
                                  평균         145.32803    관측치 합           7266.4015
                                  표준편차     20.352418    분산               414.220919
                                  왜도        -0.0816375    첨도               0.05896251
                                  제곱합      1076308.64    수정 제곱합         20296.825
                                  변동계수    14.0044684    평균의 표준오차    2.87826656


                                                      기본 통계 측도

                                          위치측도                  변이측도

                                      평균     145.3280     표준편차        20.35242
                                      중위수   144.6747     분산           414.22092
                                      최빈값      .         범위            91.24481
                                                            사분위 범위     21.99328


                                                   위치모수 검정: Mu0=0

                                     검정            --통계량---    -------p-값-------

                                     스튜던트의 t    t  50.49151    Pr >  |t|   <.0001
                                     부호            M        25    Pr >= |M|   <.0001
                                     부호 순위       S     637.5    Pr >= |S|   <.0001


                                                       정규성 검정

                                검정                  ----통계량----    -------p-값-------

                                Shapiro-Wilk          W     0.985687    Pr < W      0.8007
                                Kolmogorov-Smirnov    D     0.059245    Pr > D     >0.1500
                                Cramer-von Mises      W-Sq  0.031641    Pr > W-Sq  >0.2500
                                Anderson-Darling      A-Sq  0.226445    Pr > A-Sq  >0.2500


                                                      분위수(정의 5)

                                                  분위수           추정값

                                                  100% 최대값     186.334
                                                   99%            186.334
                                                   95%            182.038
                                                   90%            173.861
                                                   75% Q3         156.604
                                                   50% 중위수     144.675
                                                   25% Q1         134.611
                                                   10%            121.081
                                                    5%            109.041
                                                    1%             95.089
                                                    0% 최소값      95.089



                                                        SAS 시스템            2007년 02월 21일 수요일 오후 06시22분36초  10

                                                    UNIVARIATE 프로시저
                                                       변수:  randy

                                                         극 관측치

                                        ----작은값부터---        -----큰값부터----

                                              값   관측치              값   관측치

                                          95.089       31         174.072       27
                                         101.571       28         176.442       43
                                         109.041        1         182.038        8
                                         116.832       23         184.207       45
                                         119.476       16         186.334       35

♥♥♥♥♥
점점 뭔소린지 모르는 미궁속으로 들어가고 있다.
결과도 중요하겠지만, 내용을 이해할 수 있어야 하지 않나...


♥♥♥♥♥
DATA a1;
bbb=BYTE(65);              /* bbb에는 문자 A 가 저장 (ASCII 코드로 65는 영어 대문자 A이다)*/
ccc="안녕 하세요";         /* 안녕 하세요 가운데 빈칸이 하나 있다 */
nccc=COMPRESS(ccc,' ');    /* 빈칸이 없어진다                     */
size1=LENGTH(ccc);         /* 길이가 11; 한글 5글짜에 빈칸 하나   */
size2=LENGTH(nccc);        /* 빈칸이 없어졌으므로 길이가 10       */
size3=LENGTH(bbb);         /* 길이가 1                            */
large=UPCASE('Good Morning');  /* GOOD MORNING 으로 바뀜          */
small=LOWCASE('Good Morning'); /* good morning 으로 바뀜          */
str=SUBSTR(large,2,4);         /* 변수 large의 2번째부터 4문자를 선택  */
PROC PRINT;
RUN;

♥♥♥♥♥
                                                        SAS 시스템            2007년 02월 21일 수요일 오후 06시22분36초  11

         OBS    bbb        ccc           nccc       size1    size2    size3       large           small        str

          1      A     안녕 하세요    안녕하세요      11       10       1      GOOD MORNING    good morning    OOD
♥♥♥♥♥


♥♥♥♥♥
DATA a1;
nalja1=DATE();      /* 현재의 날짜를 SAS Date의 값으로 변환   */
nalja2=DATETIME();  /* 현재의 시간을 SAS Datetime 값으로 번환 */
nalja3=TIME();
nalja4=TODAY();     /* DATE() 와 같다 */
nal_sec1=SECOND(nalja1);
nal_min1=MINUTE(nalja1);
nal_hr1=HOUR(nalja1);
nal_date1=DAY(nalja1);  /* 2002년 7월 22일이면  22    */
nal_mon1=MONTH(nalja1); /* 2002년 7월 22일이면   7    */
nal_qtr1=QTR(nalja1);
nal_yr1=YEAR(nalja1);   /* 2002년 7월 22일이면  2002  */
nal_sec2=SECOND(nalja2); /* 초단위 */
nal_min2=MINUTE(nalja2); /* 현재의 몇분인가? */
nal_hr2=HOUR(nalja2);    /* 현재 몇시인가? 오후 3시이면 15   */
nalja3=DHMS(nalja1,15,33,0);  /* SAS Date를 SAS Datetime으로 바꾼다 */
PROC PRINT;
RUN;

♥♥♥♥♥

사용자 삽입 이미지

♥♥♥♥♥

참 갈길이 멀다. 아무래도 통계학 원론을 공부하고 하는게 좋을까 생각되는 하루이다.
이렇게 전혀 감도 못 잡고 공부하는 것은 체질상 맞지도 않고...

SAS 함수 이용 예제가 나온다. 이건 좀 쉬워보이는데?
오늘 위에 것 어려웠다면 다 잊어버리고 이거라도 즐겁게 해보자.
^______^ 인생 스마일모드다!

① 여러 개의 변수를 Missing 처리하기 (DIM 사용)
자 DIM을 사용한단다. DIM 뭔지 기억 나시는 분? 그렇다 변수의 갯수를 세는 명령어였다.
뭘 어떻게 쓴다는 것인지 보도록 하자!

ARRAY kkk x1-x5 y1-y3 zzz;
DO OVER i=1 to 9;
  IF kkk(i) = 99999 THEN kkk(i)=. ;
END;

배열 kkk는 x1 x2 x3 x4 x5 y1 y2 y3 zzz 변수로 만들어진다.
i는 1에서 시작 9까지 반복한다. 반복되는 내용은 다음과 같다.
만약 배열 kkk(i번째 변수) 값이 99999 이면 kkk(i)를 .로 처리해라. (Missing 처리)
DO문 끝. 반복하러 올라감

ARRAY kkk x1-x5 y1-y3 zzz;
DO OVER i=1 to DIM(kkk);
 IF kkk(i)=99999 THEN kkk(i)=.;
END;

반복되는 횟수는 변수의 수 만큼인데, 일일이 지정하지 않아도 자동으로 변수의 개수를 계산해주는 것을 알 수 있다.

② 중복된 자료를 제거하고자 할 때
중복된 자료가 있을 때 이를 제거하는 방법은 여러가지가 있는데, 가장 간단한 방법을 소개하고자 한다.

♥♥♥♥♥
DATA a1; INPUT code x; CARDS; /* a1 데이터셋을 만들자; 변수는 code와 x이다; 자료들; */                                                 
111 45                                                                                                                                 
123 56                                                                                                                                 
123 56                                                                                                                                 
132 46                                                                                                                                 
119 55                                                                                                                                 
;                                                                                                                                      
PROC SORT; BY CODE;  /* 정렬한다; CODE 변수를 기준으로 한다 */                                                                         
DATA a1; SET a1;     /* a1 데이터셋을 만든다; 변수는 a1 데이터셋과 같다 */                                                             
IF code=LAG(code) THEN DELETE;  /* 만약 code값이 이전 code값과 같다면 삭제해라 */                                                      
PROC PRINT;   /* 출력하라 */                                                                                                           
RUN;
♥♥♥♥♥
                                                        SAS 시스템            2007년 02월 21일 수요일 오후 06시22분36초  13

                                                     OBS    code     x

                                                      1      111    45
                                                      2      119    55
                                                      3      123    56
                                                      4      132    46

♥♥♥♥♥
123 56 데이터가 2개였는데 1개로 줄은것을 알 수 있다.

③ 날짜 자료에서 연, 월, 일을 구하고자 할 때
날짜 색인에서 일별, 월별 색인을 구하고자 할 때는 나머지를 구하는 MOD와 정수값을 취하는 INT 함수를 이용하면 할 수 있다고 한다.

♥♥♥♥♥
DATA a1; INPUT nal; CARDS;                                                                                                             
19981211                                                                                                                               
20030102                                                                                                                               
;                                                                                                                                      
DATA a1; SET a1;                                                                                                                       
day=mod(nal, 100);                                                                                                                     
mon=int(nal/100);                                                                                                                      
mon1=mod(mon, 100);                                                                                                                    
yr=int(nal/10000);                                                                                                                     
PROC PRINT;                                                                                                                            
RUN;
♥♥♥♥♥
                                                        SAS 시스템            2007년 02월 21일 수요일 오후 06시22분36초  14

                                     OBS       nal      day      mon     mon1     yr

                                      1     19981211     11    199812     12     1998
                                      2     20030102      2    200301      1     2003
♥♥♥♥♥
일단 일(day) 부분은 전체를 100으로 나눠서 남은 나머지(mod 함수의 기능이다)로 처리했다.
즉 19981211 에서 100을 나누면 11만 남게된다.
mon변수는 100을 나눈 값을 구해서(199812) 정수부분만을 취한다. 왜냐구?
19981211을 100으로 나누면 답은 199812.11 이 나오기 때문이다. 뒤에 11을 없애기 위해서 int함수를 쓴다.
같은 방법으로 월(mod1)을 뽑아낸다. 100으로 나누면 12만 남고, 이것은 월이된다.
같은 방법으로 년(yr)을 뽑아낸다. 100으로 나누고 int함수로 정수 부분만 뽑아낸다.
이렇게 해서 결과를 출력하게 하면, 원하는 값이 딱딱 떨어져 나오게 된다.

함수는 꼭 산술적인 처리만 하는데 쓰이는 것은 아니다.
머리를 요리 굴리고, 조리 굴리면 일반 자료 처리에서도 멋진 방법을 제공해준다.

오늘 사실 책은 10쪽밖에 되지 않지만, 알 수 없는 함수와 통계적인 마인드 때문에 너무 어려웠던 것 같다.
그래도 뭉실하게나마 머릿속에 무언가 떠다니는 것은 행복한 것이다.
잡지 못하든 잡든 무언가가 있다는 것은 확실하니까.
아무것도 없는 텅빈 머릿속이라면 얼마나 외로울까... 그런 생각이 든다.

하루하루 열심히 살자.
모두 뱌뱌시~

by Sungjo Park Joe & Soohy 2007.02.21 15:22
SAS

8장이다. 제목은 SAS 프로그램 작성법...
이제 슬슬 작성에 들어가는 것인가?
음. 머리도 식힐 차원에서 SAS에 관련된 기사를 두 개 올렸다.
참 좋은 회사라고 생각한다.
국내의 여건은 어느정도인지 모르겠지만,
일단 사회에 기여하는 바가 큰 솔루션 업체가 아닌가.

아무튼, 공부를 하니 애착이 가는걸까... 열심히 공부해보자.
오늘은 15개의 세부항목으로 작성 구문을 배우게된다.
코딩이라고 생각하면 되는데, 지레 겁먹고 도망가는 바보가 있는 것은 아니겠지?
생차 초보인 나도 하는데, 같이 도망가지 말고 도전하는 시간이 되었으면 한다.

1. KEEP, DROP, RENAME 문

어제 막판에 살짝 본 것 같은데? 음... 뭔가 궁금했던 문제가 처음에 나오면 의욕이 막 생긴다.
모르면서 고민한 어제의 하루가 아스피린을 먹은 듯 씻은듯이 사라지기 때문이다.

KEEP문은 SAS 데이터셋에 들어있는 변수 중 원하는 변수만을 갖는 데이터셋을 만들때 쓰는 것이다.
형식
KEEP 변수명(데이터셋에 보관하고자 하는 변수명을 말한다);

DROP문은 반대로 원하지 않는 변수를 적으면 그것을 빼고 데이터셋을 만든다.
DROP 변수명(빼고싶은 변수명을 말한다);

즉, 다음의 문장에서

DATA a1; INPUT x1 x2 y; CARDS;
1 2 3
4 5 6
DATA b1; SET a1; KEEP x1 y;
DATA b2; SET a1; DROP x2;

b1 데이터셋과 b2 데이터셋은 동일한 변수가 들어가게 된다.
둘 모두 변수 x1, y가 들어가는 것이다. 이해가 되는가?
안된다고? 흐음
b1은 KEEP으로 x1과 y를 변수로 쓰겠다고 말하는 것이고,
b2는 DROP으로 x1, x2, y중에서 x2를 빼고 쓰겠다는 것이니 결국 x1과 y만 쓰는 것이다.

RENAME문은  변수명을 바꿀때 사용된다.
형식
RENAME 원래변수명 = 바꾸고자 하는 새로운 변수명;

어제 y가 중복될 때, y1, y2로 분리하는 것을 공부할 때 적용했던 구문이다.

♥♥♥♥♥
DATA a1; INPUT x1 x2 y; CARDS;                                                                                                          
1 2 3                                                                                                                                  
4 5 6                                                                                                                                  
DATA b1; SET a1;                                                                                                                       
RENAME x1 = nx1;                                                                                                                       
PROC PRINT;                                                                                                                            
RUN;
♥♥♥♥♥
                                                        SAS 시스템            2007년 02월 20일 화요일 오후 02시55분21초   2

                                                   OBS    nx1    x2    y

                                                    1      1      2    3
                                                    2      4      5    6

♥♥♥♥♥
출력되는 변수 x1이 nx1으로 변해서 나오는 것을 확인할 수 있다.


2. IF-THEN, IF-THEN/ELSE

IF, THEN, ELSE문은 어떤 상황에서는 어떤 것을 선택하겠다하는 표지판 같은 구문이다.
IF는 표지판의 글자이고, THEN은 화살표이며, ELSE는 다른 길의 방향을 가리키는 것이다.
표지판이라는 자체가 한 방향의 길에서 필요한 것이 아니지 않는가?

IF 조건 THEN 명령
만약 이런 조건 이면 명령대로 해라.

DATA a2; SET a1;
IF age < 20 THEN DELETE;
IF mon=9 THEN mon=.;

a2 데이터셋을 만들고 변수는 a1을 사용한다.
만약 age변수의 값이 20 이하라면 해당 변수를 삭제해라.
만약 mon변수의 값이 9이면 mon 변수의 값을 missing 값으로 바꾸어라.

이런 의미가 되는 것이다.
만약 age값이 20 이상이면 어쩌냐고? 아무일도 안일어나는 것이지 모..
그렇지만 상황에 따라서 아닌경우에도 어떤 명령을 내려야 할 경우가 있다.

화장실에서 휴지가 있으면 쓴다. 라는 IF문을 쓴다면,
화장지가 없으면 이 사람 어쩌라는 것인가.
그래서, 휴지가 없으면 휴지를 달라고 외쳐라. 라는 식으로 명령을 내려야 하는 경우가 필요한데,
이럴때 ELSE문을 사용하고,
여러 조건을 가정하고 싶으면(성적이 90이상이면 A, 80이상이면 B, 70이상이면 C,....이런식으로..)
ELSE IF 라는 문장을 쓰고, 마지막에 이도저도 아닐때는 이라는 의미로 ELSE라는 문장을 쓰면 된다.

DATA a1; SET a1;
IF age < 20 THEN ageg=.;
ELSE IF age <= 30 THEN ageg=1;
ELSE IF age <= 40 THEN ageg=2;
ELSE ages=3;

a1 데이터셋을 만들자. 내용은 다음과 같이 하겠고, 변수는 a1을 따른다.
만약 age 변수의 값이 20 이하이면 ageg 변수 값을 missing 처리하며,
age 변수의 값이 20 초과인데 30 이하이면 ageg 변수 값을 1로 처리하며,
age 변수의 값이 30 초과인데 40 이하이면 ageg 변수 값을 2로 처리한다.
위의 경우 어느것도 해당되지 않는 불쌍한 경우라면 ageg 변수 값을 3으로 처리하면 된다.


3. DELETE문

이름에서도 알 수 있듯이, 그리고 앞에서도 많이 사용해봤듯이 관측치를 날려버릴때 사용한다.
DROP과 헛갈리는 사람이 간혹 있는데, DROP은 자료는 두되, 해당 변수를 사용하지 않는 것이고,
DELETE는 해당 변수에 해당하는 자료를 이 세상에서 없애버리겠다는 뜻이다.

형식
IF 조건식 THEN DELETE;
만약 이런 조건이라면 날려버려라.

DATA b1; SET a1;
IF sex='m' THEN DELETE;
데이터셋 b1을 만들어보자. a1 데이터셋의 변수를 따른다;
만약 sex 변수의 값이 'm' 이라면 그 변수에 해당하는 관측치를 몽땅 제3세계로 날려버려라.


4. STOP문

STOP문은 SAS 데이터 스탭을 중지하고자 할 때 사용한다.
방대한 데이터를 처리해야 하는 경우, 일부가 돌려봐서 프로그램의 작동 상황을 확인하고,
돌리는 경우를 생각해볼 수 있다. 이게 더 효율적이기 때문이다.

DATA a1; INPUT x y z;
IF _N_ = 100 THEN STOP;
CARDS;
1 2 3
4 5 6
 .
 .
 .
301 302 303
304 305 306
;
PROC PRINT;

이렇게 프로그램을 짜면 무슨일이 생길까.
참고로, _N_ 은 관측치의 번호를 나타내는 것이라고 한다.
1번자료, 2번자료 이런식으로 데이터가 들어가지 않는가? 이 때 보이지않는 1, 2 (번째) .. 같은 숫자이다.

저렇게 연산을 돌리게 되면 자료를 아마도,
1 2 3
4 5 6
 .
 .
 .
295 296 297
요기까지만 자료가 입력될 것이다.
298 299 300 <- 요것이 100번째 자료인데, 100번째 자료면 멈추게끔 되어 있기에,
99번째 관측치 까지만 입력되는 것이다.


5. OUTPUT문

OUTPUT도 예전에 본 적이 있지 않은가? 고급 문장이라고 했었던가?
대충 이런 내용이였다.

DATA b1 b2 B3; SET a1;
IF          X=1 THEN OUTPUT b1;
ELSE IF X=2 THEN OUTPUT b2;
ELSE          THEN OUTPUT b3;

b1, b2, b3 데이터셋을 만들려고 합니다. a1이라는 데이터셋의 변수를 사용하겠습니다.
만약 변수X가 1의 값을 가지면 b1데이터셋으로 관측치를 넘기고,
만약 변수X가 2의 값을 가지면 b2데이터셋으로 관측치를 넘기며,
변수X가 위의 값에 해당하지 않는 불쌍한 상태면 관측치를 b3데이터셋으로 넘기도록 합니다.

이것을 만약 나눠서 쓰게 된다면 이렇게 되겠습니다.

DATA b1; SET a1; IF X=1;
DATA b2; SET a1; IF X=2;
DATA b3; SET a1; IF X^=1 AND X^=2;

어려운가요? 하나하나 개별로 처리했다고 생각하면 되겠는데...음
박스안에 있는 초코파이를 보는 것과 낱개로 파는 초코파이를 보는 느낌이랄까요. 흠흠.


6. DO문

DO문입니다. 정신없이 오느라 다들 뭐야 무어야!! 하고 소리지르시겠지만,
어쩝니까.. 전 아무것도 들리지 않습니다.
그리고 들어서도 안됩니다. 오늘 15까지 있는데 1/3 와서 징징대면 암울하지 않습니까.
관악산에 올라갈때, 오이를 파는 아주머니들이 계셨는데, 아래서는 싸게 팔고 올라갈수록 비싸더군요.
올라가기전에 오이를 사서 어떻게든 높은 곳에서 먹어야 돈 버는 것 아니겠습니까.
산에서 먹는 오이가 왜 그리 시원하고 맛있던지...
그렇다고 '이녀석 등산을 좋아하는구나!' 하고 생각하면 곤란합니다.
그게 6년전 일이니까요 음핫핫..ㄱ-..가고 싶어요. 근데 잘 안되네요. 뭐든 습관입니다. 진짜로...그쵸?

DO문은 반복을 위한 구문입니다.
50개의 햄버거를 먹는 프로그램을 짠다고 합시다.

햄버거 먹는 프로그램
1. 햄버거를 본다
2. 햄버거를 든다
3. 햄버거를 먹는다
4. 속이 괜찮은지 판단한다.
5. 햄버거를 본다
6. 햄버거를 든다
7. 햄버거를 먹는다
8. 속이 괜찮은지 판단한다.
9. 햄버거를 본다
10. 햄버거를 든다
11. 햄버거를 먹는다
12. 속이 괜찮은지 판단한다.
 .
 .
 .

왠지 다 쓰면 신상에 위협이 올 것 같은 생각이 듭니다.
각각 다 나열한다고 프로그램이 안돌아거는 것은 아닙니다.
하지만 궂이 저렇게 답답하게 표기해야 할까요?

이건 어떤가요?

햄버거를 먹는 프로그램
1. 50번만 반복해주세요. 반복 시작합니다.
2. 햄버거를 본다
3. 햄버거를 든다
4. 햄버거를 먹는다
5. 속이 괜찮은지 판단한다.
6. 반복횟수가 50번이 아닌지 판단하고 2번으로 돌아간다.

얼마나 간단합니까. 이런 것을 가능하게 하는 것이 DO문입니다.
'또'문 아닙니까. 또? 또 돌아? ㅎㅎㅎ

DO문은 크게 4가지로 나뉩니다.

① 단순 DO문:  END;문을 만나면 그만한다.

IF X > 5 THEN;
DO Y = X*10; LY = SQRT(Y); END;
만약 X가 5보다 크다면 아래처럼 해주세요;
Y변수에는 X에 10을 곱한 값을 넣어주시고요. LY변수에는 루트Y의 값을 구해주세요; 그리고 반복을 그만하세요;

② 반복 DO문: DO문 안에 반복을 몇 번 할것인지 정해주는 것

형식
DO 색인변수=시작 [TO 끝 [BY 증가분] [WHILE 또는 UNTIL(표현식)]];
  SAS 문장들;
END;

DO I=1 TO 10;
 SAS 문장들;
END;
SAS 문장들을 10번 반복하라.

DO I=1 BY 1;
 SAS 문장들
 IF I = 10 THEN GO TO F;
END;
F: PUT 'FINISHED';
I는 1부터 1씩 증가한다.
 SAS 문장들 실행
 만약 I가 10이되면 F로 가라
여기가 끝이다. 다시 DO문으로 돌아가라.
F는 'FINISHED'를 출력하라....가 아닐 듯 싶다.
C언어에서 PUT이란 명령어는 '  ' 안에 씌여진 글자를 그냥 출력하는 것으로 알고있다...가물가물.
아마도 그렇지 않을까 생각만 해두자. 뒤에 어디 다시 등장하겠지...;;

③ DO WHILE문
DO WHILE문은 WHILE 다음의 조건이 맞는 한 계속해서 실행된다.

형식
DO WHILE (표현식);
 SAS 문장들
END;
표현식의 내용이 맞으면 아래를 실행하고, 안 맞으면 END; 문 아래의 내용을 실행하는 것이다.

N=0;
DO WHILE (N LT 5);
 PUT N=;
 N+1;
END;
N에 0을 입력한다.
N이 5보다 작으면,
 N= 을 출력해라
 N에 1을 더해라
끝, 다시 DO WHILE문으로 가라.

④ DO UNTIL문
UNTIL문은 조건이 맞을때 실행을 중지하되, 무조건 처음 1번은 조건에 상관없이 연산한다.

WHILE문은 맞으면 통과, 틀리면 끝 인데, UNTIL문은 틀리면 통과, 맞으면 끝 이다.

형식
DO UNTIL (표현식);
 SAS 문장들;
 SAS 문장들;
END;

♥♥♥♥♥
DATA a1;
N=0;
DO UNTIL (N>=5);
 OUPUT;
 N+1;
END;
PROC PRINT;
RUN;
♥♥♥♥♥
                                                        SAS 시스템            2007년 02월 20일 화요일 오후 02시55분21초   3

                                                         OBS    N

                                                          1     0
                                                          2     1
                                                          3     2
                                                          4     3
                                                          5     4
♥♥♥♥♥


7. ARRAY (배열)문

배열의 의미를 아는가? 일종의 테이블을 생각하면 이해가 빠를 것 같다.
우리가 표를 그려서 어떤 칸을 콕 찝으면 어느 위치에 있는지 알 수 있지 않는가.
배열은 여러 변수들에 어떤 동일한 명령을 적용시킬때 등에 사용된다.
말로 써봐야 잘 이해 안된다.
역시 형식 설명 후 예제를 보도록 하자.

형식
ARRAY array명[{n}] [$] [length] [변수들 이름];
배열 배열이름을 정한다[{변수의 수}] [$<- 문자열이면 붙이는건가?] [길이??] [변수들 이름??]

ARRAY aaa{7} X1-X5 GNP MONEY;
DO I=1 TO 7; IF aaa{I}=9 THEN aaa{I}=.; END;
배열 배열 aaa는 7개의 변수를 가진다. X1 X2 X3 X4 X5 GNP MONEY가 그것이다.
I가 1에서 시작해서 7까지 반복한다.(7번 반복하겠다는 의미); 만약 배열 aaa(I)의 변수값이 9이면 .으로 바꾼다; 끝내고 다시 DO문으로 돌아가자;

ARRAY aaa X1-X5 GNP MONEY;
DO OVER aaa; IF aaa= 9 THEN aaa=. ; END;
aaa란 배열에는 X1 X2 X3 X4 X5 GNP MONEY라는 변수가 포함된다.
OVER가 뭐지;; 아무튼 같은 내용이다. 변수의 숫자를 쓰지 않았을 뿐...
이렇게 썼을때 실행이 되지 않는 경우가 발생할 수 있단다. 그럴때는

ARRAY aaa(*) X1-X5 GNP MONEY;
DO I=1 TO DIM(aaa); IF aaa{I} = 9 THEN aaa{I}=.; END;
이렇게 쓰면 되는데 (*)를 쓰면 알아서 세어준다. DIM 함수는 배열문의 변수의 개수를 구하는 기능이 있어서 이번 경우 DIM(aaa)=7 이 나오게 된단다.

ARRAY가 위에서 본 1차원 배열(변수가 1자로 주욱 있는 것)만 적용되는 것은 아니다.
다차원 배열이 +_+ 가능하다.

ARRAY TEST{2,3} TEST1-TEST6;
요렇게 TEST라는 이름의 배열 옆에 (2행 3열)이라고 표기를 해주면
실제로 변수는 이런 위치를 보인다.

TEST1  TEST2  TEST3
TEST4  TEST5  TEST6

알겠는가? 예문을 보고 이해해보도록 하자.
♥♥♥♥♥
DATA a1; INPUT year korea japan usa ec; /* a1 데이터셋을 만들어라; 변수는 year korea japan usa ec 이다. */                             
CARDS; /* 데이터들 */                                                                                                                  
1981 12 34 56 78                                                                                                                       
1982 16 47 66 82                                                                                                                       
1983 32 13 32 13                                                                                                                       
1984 20 14 69 20                                                                                                                       
1985 30 20 10  1                                                                                                                       
1986 11 22 33 44                                                                                                                       
1987 43 32 21 10                                                                                                                       
1988 92 38 42 84                                                                                                                       
1989 30 20 30 30                                                                                                                       
1990 93 125 262 301                                                                                                                    
;                                                                                                                                      
DATA a1; SET a1; /* 데이터셋 a1은 a1 데이터셋의 변수를 사용한다 */                                                                     
ARRAY xxx(4) korea japan usa ec; /* 배열 xxx는 4개의 변수를 가진다 : korea japan usa ec */                                             
ARRAY yyy(4) rkorea rjapan rusa rec; /* 배열 yyy는 4개의 변수를 가진다 : rkorea rjapan rusa rec */                                     
DO i=1 to 4; /* i는 1에서 4까지 1씩 증가하며 DO 내의 문장을 4번 반복한다 */                                                            
yyy{i} = ( xxx{I} - LAG(xxx{i}) ) / LAG(xxx{i}); /* 배열 yyy{i}에 들어가는 변수값 연산 */                                              
END; /* DO문 여기까지 다시 반복할 것 */                                                                                                
PROC PRINT; VAR rkorea rjapan rusa rec; /* 출력할 것. 변수 rkorea rjapan rusa rec에 대해서 */                                          
RUN; /* 돌려돌려 */
♥♥♥♥♥
                                                        SAS 시스템            2007년 02월 20일 화요일 오후 02시55분21초   4

                                    OBS     rkorea      rjapan       rusa           rec

                                      1      .           .           .            .
                                      2     0.33333     0.38235     0.17857      0.0513
                                      3     1.00000    -0.72340    -0.51515     -0.8415
                                      4    -0.37500     0.07692     1.15625      0.5385
                                      5     0.50000     0.42857    -0.85507     -0.9500
                                      6    -0.63333     0.10000     2.30000     43.0000
                                      7     2.90909     0.45455    -0.36364     -0.7727
                                      8     1.13953     0.18750     1.00000      7.4000
                                      9    -0.67391    -0.47368    -0.28571     -0.6429
                                     10     2.10000     5.25000     7.73333      9.0333

♥♥♥♥♥
LAG 함수가 또 발목을 붙잡는다.
그래서 LAG함수를 알아보도록 하자.
책에 나온 설명은 다음과 같다.

SAS에서는 두 변수의 합과 차이는 쉽게 구할 수 있다. 그러나 현재의 관츨치와 이전의 관측치의 합이나 차이는 쉽게 구할 수 없다. 바로 앞의 자료를 구하는 것이 LAG() 함수이다. LAG(X) 하면 변수 X의 바로 이전 자료를 구하고, LAG2(x)하면 두 번째 앞의 자료를 구할 수 있다.

그렇다고쳐도 대체 뭘 구하려는 작정인지 모르겠다. 저녁먹고 다시 해야겠당.

아 맛나게 저녁을 먹고 다시 시작!
컴퓨터를 키고, 다시 저 결과값을 바라보니 무슨 말인지 이해가 간다.
결과값의 2행의 0.33333은 어떻게 나온 값인고 하니,
(16-12) /12 -> 0.33333 이란 값이 되는 것이다. 즉, 1981년에서 1982년으로 가는동안 0.33333 만큼 증가했다는 것이다. 즉 33.3% 증가라는 말이다.


8. TITLE문과 FOOTNOTE문

일전에 우리가 봤던 구문들이다.
전자는 출력 윗부분에 프린트 하는 기능이고, 후자는 아랫부분에 프린트하는 기능이다.
10줄까지 만들 수 있으며, 최대 132자의 문자를 넣을 수 있다.

형식
TITLE[N] ['TITLE']

TITLE 'FIRST LINE';
TITLE2 'SECOND LINE';
TITLE10 'THIRD LINE';

그냥 봐도 딱 알 것 같다. 한 가지 유의할점이 있다면..

PROC PRINT;
RUN;
TITLE 'TITLE FOR SECOND PROC';
PROC MEANS;


PROC PRINT;
PROC MEANS;
TITLE 'TITLE FOR SECOND PROC';
는 같게 출력되지만,

PROC PRINT;
TITLE 'TITLE FOR SECOND PROC';
PROC MEANS;
는 다르게 출력된다.

위의 두가지는 아래 MEANS만 출력되고,
아래는 PRINT, MEANS 둘 모두에 출력된다.

첫 번째 문장에서 MEANS만 출력되는 이유는 PROC PRINT; RUN;이 실행되어 PRINT가 끝나버려서 그렇고,
두 번째는 MEANS 구문 아래 있기 때문에 위하고는 상관 없어지는 것이다.

FOOTNOTE문도 TITLE과 같다.
형식
FOOTNOTE[N] ['TEXT'];

궂이 예시를 안들어도 이해하리라 본다.


9. LABEL문

이번 명령어도 일전에 우리가 한 번 만났지 않았나 싶다.
변수명에 특정 이름을 주고자 할 때 사용된다.

형식
LABEL variable='label';

여기서,
variable: Label을 지정하고자 하는 변수명
label: 빈칸을 포함하여 256자까지 가능하며 인용부호가 앞뒤에 있어야 함
라벨 자체에 인용부호가 있는 경우에는 이렇게 바꿔쓰면 된다.

LABEL n='mary''s experiment number';

♥♥♥♥♥
DATA a1;                                                                                                                               
INPUT sex $ mar age edu his work pay money hob @@;                                                                                     
CARDS;                                                                                                                                 
M 1 18 2 1 4 5 42 1  F 1 19 2 1 5 5 42 3                                                                                               
F 1 20 3 1 4 5 43 2  F 1 21 3 2 3 4 45 7                                                                                               
F 1 22 3 2 4 4 45 3  F 1 23 3 3 2 3 47 5                                                                                               
F 1 24 3 3 1 2 49 5  F 1 25 4 3 2 2 50 1                                                                                               
;                                                                                                                                      
PROC PRINT; VAR sex edu hob work pay money;                                                                                            
RUN;                                                                                                                                   
DATA b1; SET a1;                                                                                                                       
LABEL sex="성별"                                                                                                                       
      mar="결혼유무"                                                                                                                   
      edu="교육수준"                                                                                                                   
      hob="취미생활";                                                                                                                  
PROC PRINT LABEL; VAR sex edu hob work pay money;                                                                                      
RUN;

♥♥♥♥♥
                                                        SAS 시스템            2007년 02월 20일 화요일 오후 08시06분31초   1

                                     OBS    sex    edu    hob    work    pay    money

                                      1      M      2      1       4      5       42
                                      2      F      2      3       5      5       42
                                      3      F      3      2       4      5       43
                                      4      F      3      7       3      4       45
                                      5      F      3      3       4      4       45
                                      6      F      3      5       2      3       47
                                      7      F      3      5       1      2       49
                                      8      F      4      1       2      2       50

                                                        SAS 시스템            2007년 02월 20일 화요일 오후 08시06분31초   2

                                OBS    성별    교육수준    취미생활    work    pay    money

                                 1      M          2           1         4      5       42
                                 2      F          2           3         5      5       42
                                 3      F          3           2         4      5       43
                                 4      F          3           7         3      4       45
                                 5      F          3           3         4      4       45
                                 6      F          3           5         2      3       47
                                 7      F          3           5         1      2       49
                                 8      F          4           1         2      2       50

♥♥♥♥♥
결과 값은 같지만, LABEL문을 이용해서 변수명의 출력을 바꿔준 것을 볼 수 있다.
변수가 바뀐것이 아니다. 단지 출력할 때 그렇게 보여주겠다는 것이다.


10. FORMAT문

10번째 구문이다. 기억하는지 모르겠지만, 예전에 LABEL문이 나왔을 때, 위쪽 카테고리 말고, 왼쪽에도 한글로 표기시킬 수 있으면 좋겠다고 했던거 기억할련지.
FORMAT문이 그 구문이라고 한다. +_+
일단은 형식과 예문을 보도록 하자.

형식
FORMAT 변수명 [양식명] 변수명 [양식명];

여기서,
변수명: 특정이름을 지정하고자 하는 변수명
양식명: 변수의 값에 따라 프린트하고자 하는 양식(FORMAT)

PROC FORMAT;
VALUE fmtaaa M='남자' F='여자';
PROC PRINT; VAR sex; FORMAT sex fmtaaa. ;
PROC FREQ; TABLES sex; FORMAT sex fmtaaa;

FORMAT문을 사용하겠다.
fmtaaa는 M을 남자로, F를 여자로 표기한다.
출력하겠다. sex라는 변수를 말이다. 이때 sex에 fmtaaa를 적용하겠다.
FREQ(도수분포던가??)를 적용하겠다; sex 테이블에 대해서 말이다. 이때 역시 sex에 fmtaaa를 적용하겠다.

대체 이게 뭔 소리지..ㅡ.ㅡ;
리얼스러운 예문을 보도록 하자.

♥♥♥♥♥
DATA a1;                                                                                                                               
INPUT sex $ mar age edu his work pay money hob @@;                                                                                     
CARDS;                                                                                                                                 
M 1 18 2 1 4 5 42000 1  F 1 19 2 1 5 5 42000 3                                                                                         
F 1 20 3 1 4 5 43000 2  F 1 21 3 2 3 4 45000 7                                                                                         
F 1 22 3 2 4 4 45000 3  F 1 23 3 3 2 3 47000 5                                                                                         
F 1 24 3 3 1 2 49000 5  F 1 25 4 3 2 2 50000 1                                                                                         
DATA b1; SET a1;                                                                                                                       
LABEL sex="성별" mar="결혼유무" edu="교육수준" hob="취미생활";                                                                         
PROC FORMAT;                                                                                                                           
VALUE $kkk 'F'='여자' 'M'='남자' 'A'-'C'='잘못';                                                                                       
VALUE bbb low-44999 = '저임금' 45000-48999 = '정상임금' 49000-high = '고임금' OTHER = '잘못 입력';                                     
PROC PRINT; VAR sex edu hob work pay money;                                                                                            
FORMAT pay comma7.3 money bbb. sex $kkk.;                                                                                              
RUN;
♥♥♥♥♥
                                                        SAS 시스템            2007년 02월 20일 화요일 오후 08시06분31초   3

                                 OBS    sex     edu    hob    work        pay     money

                                  1     남자     2      1       4       5.000    저임금
                                  2     여자     2      3       5       5.000    저임금
                                  3     여자     3      2       4       5.000    저임금
                                  4     여자     3      7       3       4.000    정상임금
                                  5     여자     3      3       4       4.000    정상임금
                                  6     여자     3      5       2       3.000    정상임금
                                  7     여자     3      5       1       2.000    고임금
                                  8     여자     4      1       2       2.000    고임금

♥♥♥♥♥
어라 왜 라벨문이 출력을 안하지? 해서 보니..
PROC PRINT; VAR sex edu hob wwork pay가 아니라
PROC PRINT LABEL; VAR sex edu hob wwork pay을 해야했다.


                                                        SAS 시스템            2007년 02월 20일 화요일 오후 08시40분28초   3

                            OBS    성별    교육수준    취미생활    work        pay     money

                             1     남자        2           1         4       5.000    저임금
                             2     여자        2           3         5       5.000    저임금
                             3     여자        3           2         4       5.000    저임금
                             4     여자        3           7         3       4.000    정상임금
                             5     여자        3           3         4       4.000    정상임금
                             6     여자        3           5         2       3.000    정상임금
                             7     여자        3           5         1       2.000    고임금
                             8     여자        4           1         2       2.000    고임금

이러니까 결과가 제대로 나온다.. 역시


11. INFORMAT문

FORMAT문과 이름이 살짝 다르다.
이건 뭐에 쓰는 것일까...
FORMAT문은 프린트하는 양식을 지정하는 것이였다.
INFORMAT은 입력에 대한 양식을 지정한다.
예문을 보면 이해가 빠를 것이다.

DATA b1; INPUT x y z;
CARDS;
1jan90 34 123
2mar93 26 190
PROC PRINT;
RUN;

DATA b1;
INFORMAT x DATE7. ;
INPUT x y z;
CARDS;
1jan90 34 123
2mar93 26 190
PROC PRINT;
RUN;

위와 아래의 차이를 알겠는가?
빨간 부분이 추가되었자나! 라는 건 누구라도 다안다.
안그래도 빨개서 눈에 띌텐데...
INFORMAT x DATE7. 의 의미가 무엇인고 하면,
변수 x의 양식이 날짜형 7자리라는 것이다.
한번 돌려보도록 하자.

                                                        SAS 시스템            2007년 02월 20일 화요일 오후 08시40분28초   4

                                                 OBS      x       y     z

                                                  1     10958    34    123
                                                  2     12114    26    190

x값이...참....ㄱ-
아마도 1900년 1월 1일을 기점으로 몇일 지났는가가 아닐까 싶다.
엑셀도 보통 그렇게 되어 있으니까 말이다.
날짜형인지 모른다면 에러가 낫을지도 모르겠다. 우리가 문자열 기호를 쓰지 않았기 때문에, 문자열을 이상하게 생각할 수도 있기 때문이다.


12. RETAIN문

RETAIN의 사전적 의미는 보유하다, 존속하다의 의미이다.
SAS의 중급 수준 이상의 기법인 이 구문은 특히 누적치를 구할때 유용하게 사용된다고 한다.

♥♥♥♥♥
DATA a1; INPUT X @@; CARDS;                                                                                                            
1 2 3 4 5                                                                                                                              
DATA a1; SET a1;                                                                                                                       
RETAIN sumx 0;                                                                                                                         
sumx = sumx + x;                                                                                                                       
PROC PRINT;                                                                                                                            
RUN;
♥♥♥♥♥
                                                        SAS 시스템            2007년 02월 20일 화요일 오후 08시40분28초   5

                                                     OBS    X    sumx

                                                      1     1      1
                                                      2     2      3
                                                      3     3      6
                                                      4     4     10
                                                      5     5     15
♥♥♥♥♥
sumx 변수가 X값을 누적해서 취하는 것을 알 수 있다.

다른 예제를 보도록 하자.
♥♥♥♥♥
DATA a1; INPUT group x y; CARDS;                                                                                                       
1 11 10                                                                                                                                
1 21 20                                                                                                                                
1 31 30                                                                                                                                
1 41 40                                                                                                                                
2 50 50                                                                                                                                
2 100 101                                                                                                                              
3 200 201                                                                                                                              
DATA b1; SET a1;                                                                                                                       
sumx+x;                                                                                                                                
sumy+y;                                                                                                                                
PROC PRINT;                                                                                                                            
DATA b2; SET a1;                                                                                                                       
RETAIN sumx sumy 0;                                                                                                                    
sumx = sumx + x;                                                                                                                       
sumy = sumy + y;                                                                                                                       
PROC PRINT;                                                                                                                            
DATA b3; SET a1;                                                                                                                       
RETAIN gg sumx sumy 0;                                                                                                                 
IF gg ^= group THEN DO; sumx=0; sumy=0; END;                                                                                           
/* IF group = LAG(group) THEN DO; . ; END; */                                                                                          
sumx = sumx + x;                                                                                                                       
sumy = sumy + y;                                                                                                                       
gg = group;                                                                                                                            
PROC PRINT;                                                                                                                            
RUN;
♥♥♥♥♥
                                                        SAS 시스템            2007년 02월 20일 화요일 오후 08시40분28초   6

                                        OBS    group     x      y     sumx    sumy

                                         1       1       11     10      11      10
                                         2       1       21     20      32      30
                                         3       1       31     30      63      60
                                         4       1       41     40     104     100
                                         5       2       50     50     154     150
                                         6       2      100    101     254     251
                                         7       3      200    201     454     452

                                                        SAS 시스템            2007년 02월 20일 화요일 오후 08시40분28초   7

                                        OBS    group     x      y     sumx    sumy

                                         1       1       11     10      11      10
                                         2       1       21     20      32      30
                                         3       1       31     30      63      60
                                         4       1       41     40     104     100
                                         5       2       50     50     154     150
                                         6       2      100    101     254     251
                                         7       3      200    201     454     452

                                                        SAS 시스템            2007년 02월 20일 화요일 오후 08시40분28초   8

                                     OBS    group     x      y     gg    sumx    sumy

                                      1       1       11     10     1      11      10
                                      2       1       21     20     1      32      30
                                      3       1       31     30     1      63      60
                                      4       1       41     40     1     104     100
                                      5       2       50     50     2      50      50
                                      6       2      100    101     2     150     151
                                      7       3      200    201     3     200     201

♥♥♥♥♥
이게 대체 뭘까.. 한 번 보도록 하자.
a1 데이터셋을 만들자. 입력 변수는 group x y 3개이며, 데이터들은 다음과 같다.
(데이터 중략)
b1 데이터셋을 만들자. 입력 변수는 a1과 같다.
sumx에 변수 x의 값을 더해라
sumy에 변수 y의 값을 더해라
출력해라 ( REMAIN을 사용하지 않고 sumx와 sumy 연산을 보는 것 같음)

b2 데이터셋을 만들자. 입력 변수는 a1과 같다.
(RETAIN 함수를 사용하여) sumx sumy 초기값은 0이다.
sumx = sumx + x이다
sumy = sumy + y이다
출력해라. (REMAIN문을 사용하여 sumx와 sumy의 연산을 봄 .. 근데 결과값이 같아 보이는데;;)

b3 데이터셋을 만들자. 입력변수는 a1과 같다.
(RETAIN 함수를 사용하여) gg sumx sumy 변수 초기값은 0이다.
변수 GROUP의 값과 바로 앞 관측치의 변수 GROUP의 값 'GG'를 비교하여
서로 다른경우, 즉 새로운 그룹인 경우 sumx sumy를 0으로 지정한다.  ....이해가 잘 안된다..
sumx = sumx+x이다.
sumy = sumy+y이다.
gg는 group변수의 값이다.
출력해라. 돌려돌려.

이거 솔직히 RETAIN문이 잘 이해가 되지 않는다. 나중에 다시 봐야 할 듯 싶다.


13. MISSING문

입력 데이터 중 숫자형 변수인 경우 특수문자를 Missing 데이터로 간주하고자 하는 경우에 사용한다.
즉, 숫자 넣어야 하는데, 특수한 문자가 영어로 들어가있다면 해당 영어를 '.'으로 바꾸어 버리는 것 같다.

형식
MISSING values;

DATA a1;
MISSING a r;
INPUT id answer;
CARDS;
1001 2
1002 r
1003 1
1004 a
1005 2

입력 데이터에 있는 a, r의 값을 MISSING 처리한다.
그렇다면 MISSING문이 없다면 어찌되는 걸까?
그럴경우 유요하지 않은 데이터로 간주되어버린다.


14. LIST문

SAS log에 입력된 자료를 프린트하고자 하는 경우에 사용한다.

형식
LIST;

뭐야 이게 다야;;;;

DATA a1; INPUT ssn 1-9 #3 w2amt 1-6;
IF w2amt=. THEN LIST;
CARDS;
123456789
hong gildong
356.79
345671234
kim changho
.
;
뭔지 잘 모르겠다. 그냥 list라고 함 쳐볼까...
오류뜬다.. 대체뭐지. 저 문장 실행해도 안되는데...
더 공부를 해야 할 것 같다.


15. OPTION문

SAS 시스템의 DEFAULT 값을 잠정적으로 변환하고자 할 때 사용한다.

형식
OPTIONS OPTON ...;

이건 알 것 같다. 몇몇 옵션들을 거론하면 아마도 기억이 새록새록 피어오를것이다.

FIRST OBS : 데이터셋을 만들 때 몇 번째 자료부터 이용할 것인지 지정.
OBS : 데이터셋에 몇 개의 관측치를 이용할 것인가를 지정.
DATE : SAS 상단에 날짜를 프린트 할 것인가, 하지 않을 것인가를 지정.
NODATE : SAS 결과 상단에 날짜가 프린트 되지 않는다.
LINESIZE=: SAS 결과를 구할 때 결과의 폭을 지정한다.
MISSING=:  MISSING으로 처리하고자 하는 값을 지정.
PAGESIZE=: SAS 결과를 구할 때 한 페이지에 몇 행을 프린트 할 것인가를 지정.

대충 기억이 나는가? 아마도 MISSING 빼고는 4장 배울때쯤에 구경했던 것 같은데...
뒤돌아보는 습관 중요하다.
요새 맨날 이거 파느라, 뒤를 못 돌아봐서 큰일이다.
진도를 빼는 것이 가장 중요한 것이라고 생각하면 안되지만서도, 개강이 다가오니 그게 쉽지많은 않다.
아무튼 오늘 하루도 이렇게 끝냈다.
부족한 것은 또 공부하게 될 일이 있을 것이다.
내일은 또 무엇이 기다리고 있을까...

by Sungjo Park Joe & Soohy 2007.02.20 15:54
SAS
美SAS, 회사도 직원도 신바람나는 행복경영
◆선진기업 핵심인재 육성 현장 / (2) SAS Institute◆

미국 노스캐롤라이나주 캐리에 위치한 SAS(Statistical Analytical Software) 본사에는 근무시간에 사내체육센터에서 농구나 배구를 하는 직원들을 심심찮게 만나볼 수 있다.

본사 규모만 120만평에 달하는 데다 유명 건축가들이 지은 20여 개의 멋스런 건물에서 직원 대부분이 운동화에 청바지를 입고 일하는 모습은 흡사 대학캠퍼스를 옮겨다 놓은 분위기다.

이들 20여 개 건물은 일터는 물론이고 프리스쿨 형식의 데이케어센터부터 유치원, 중고등학교, 출판사, 댄스홀, 헬스케어센터, 체육관 등 각종 놀이시설과 생활시설들이 대부분. 회사의 정식 명칭이 `SAS Institute Inc.`인 것과 무관하지 않다.

SAS는 포천지 선정 `일하고 싶은 회사`에서 매년 IT업계 1위를 차지하고 있다.

노스캐롤라이나 주립대의 농업 데이터 분석 프로젝트에 참여했던 연구자 2명이 1976년 공동 설립한 SAS는 세계 1위 BI(Business Intelligence) 기업이다.

통계 소프트웨어로 출발해 여론조사 분석이나 장단기 경제 예측, 기업 연구개발(R&D) 실험설계 등에 제품을 공급하면서 지난 30년간 지속적인 성장을 거듭해왔다.

연간 매출이 지난해 16억8000만달러, 올해는 20억달러에 이를 것으로 전망된다.

BI사업은 특히 데이터웨어하우스(DW)를 토대로 데이터마이닝(DM), 고객관리(CRM), 리스크관리, 기업성과 관리(CPM) 솔루션 등 기업의 의사결정을 지원하는 분석 소프트웨어를 공급하는 것이라 전문기술과 고급 두뇌가 필요한 분야다.

비상장기업이라 다른 기업들처럼 스톡옵션으로 우수 인재를 붙잡아 둘 수도 없다.

그런데 어떻게 매년 평균 이직률이 5%를 밑도는 것일까.

정진환 SAS 책임컨설턴트는 "한국계 기업으로 전직했다 재입사했다"며 "복지 혜택이 잘 돼 있는 데다 업무 효율을 높일 수 있는 창의적인 조직 문화 때문에 아내가 나보다 더 재입사를 원할 정도였다"고 말했다.

◆ 다양한 복지시설 = 각자 업무시간을 융통성 있게 조정할 수 있도록 플렉시블 타임제(자유근무시간제)를 운영하는 것도 이 회사 특징이다.

근무시간인 오후 2시에 사내 체육관에서 남 눈치 안 보고 운동할 수 있는 이유이기도 하다.

제프 챔버스 HR담당 부사장은 대학교수 출신 창업자인 제임스 굿나이트 회장의 경영원칙이 "가족처럼 편안한 분위기의 회사를 만드는 것"이라고 설명했다.

직원을 가족처럼 대접하면 결국 그 직원도 회사를 가족처럼 생각한다는 얘기다.

매주 수t의 M&M 초콜릿을 직원들에게 제공하는 것으로도 유명한 SAS는 다양한 복지시설들을 운영하고 있다.

특히 스트레스관리 프로그램이나 요가, 에어로빅 등 직원 70%가 이용하는 레크리에이션센터는 완전 무료다.

이 밖에도 심리학자, 영양사, 마사지사, 물리치료사 등이 사내 헬스케어센터에 상주한다.

직원들 가족 주치의도 있어 바로 연락해서 진료를 받을 수 있도록 편의를 제공하고 있다.

◆ 행복경영에 그 비결이 = PR담당 다이안 레녹스는 "아이를 둔 직원은 아침에 회사 내 데이케어센터에 아이를 맡겨놓고 일을 하다가 점심 때 아이와 같이 구내식당에서 식사한다"고 말했다.

데이케어센터는 한 달에 300달러. 다른 기관에 맡기면 그 3배가 넘는 비용을 지불해야 한다.

교사 대 학생 비율은 1대8. 각 반에 25명의 학생이 몬테소리 프로그램에 따라 교육받는다.

이처럼 훌륭한 시설들 때문에 인근 주민들은 SAS 직원이 되는 게 소원이다.

심지어는 아이들 때문에 SAS를 떠나지 못한다고 우스갯소리를 하기도 한다.

다이안은 이 같은 시스템을 글락소에서 벤치마킹하러 오기도 했다고 귀띔했다.

챔버스 부사장은 "직원 복지에 거액을 투자하지만 우수 인재를 뺏꼈을 때 들어가는 돈에 비하면 적은 액수"라며 우수 인재 유출을 막는 비결이 바로 세계적 수준의 복지후생 때문이라고 강조했다.

`펀경영`이란 말이 있다.

일 할 맛나게 만들어 즐겁게 일하게 하자는 얘기다.

펀경영에서 한 발 더 나아가 행복경영을 하고 있는 회사가 바로 SAS다.

경쟁사에 비해 결코 많지 않은 임금을 주면서도 가족친화적 경영으로 직원들의 만족도를 극대화하는 것이야말로 이 회사가 핵심인재 유출 억제라는 IT업계의 고민을 누구보다 잘 해결하고 있는 노하우인 셈이다.



[기획취재팀 = 장광익 기자(런던ㆍ파리) / 김주영 기자(뉴욕ㆍ릴리) / 정욱 기자(도쿄ㆍ나고야)]
< Copyright ⓒ 매일경제. 무단전재 및 재배포 금지 >

by Sungjo Park Joe & Soohy 2007.02.20 14:38
SAS
SAS코리아(대표 조성식 www.sas.com/korea)는 데이터를 효과적으로 활용해 기업의 수익을 개선하고 경영위험을 통제함으로써 기업가치를 극대화하기 위한 비즈니스 인텔리전스(BI) 솔루션에 주력하고 있다.

과거에 많은 기업이 전사자원관리(ERP) 시스템을 도입해 비즈니스 프로세스를 전사적으로 통합하고 데이터를 한곳에 보관함으로써 나름의 효과를 거두었지만, 이제는 축적된 데이터를 효과적으로 분석하면서 경영에 대한 의사결정 지원정보로 어떻게 활용할 것인지에 새로운 관심이 모이고 있어 BI에 대한 관심이 더욱 높아지고 있다.

현재 SAS코리아는 자체 기술로 보유하고 있는 ‘엔터프라이즈 인텔리전스 플랫폼(Enterprise Intelligence Platform: EIP)’을 기반으로 △바젤II △사기 방지 △조기 경보 △ 품질 마이닝 △성과 관리 등 200여 가지의 경영의사 결정 지원 솔루션을 다양한 산업에 모듈 혹은 스위트 방식으로 제공하고 있다.

특히 3년 연속 매출 성장률을 25% 이상 유지하면서 제1 금융권의 바젤II 솔루션 시장에서 최다 구축실적을 올렸다. 또한 국내 최초로 보험사와 은행에 사기방지솔루션(FDS)을 제공했으며, 자금세탁방지솔루션 시장선점을 위한 다양한 마케팅 활동을 펼치는 등 국내 금융업을 위한 BI시장에 선도적인 역할을 해오고 있다.

SAS코리아는 올해도 BI 시장에서 부동의 지위를 확보하기 위해 경쟁사와의 차별화 전략으로 ‘엔터프라이즈 인텔리전스(Enterprise Intelligence)’ 모델을 제시하고 있다.

‘엔터프라이즈 인텔리전스’는 기존 △데이터 통합(Data Integration) △분석용 스토리지(Intelligence Storage) △분석(Analytics) △OLAP의 4가지 의사 결정 지원 툴로 구성된 ‘엔터프라이즈 인텔리전스 플랫폼’을 기반으로, 200여 가지 비즈니스 솔루션과 다양한 산업 솔루션까지 엔드 투 엔드로 유일하게 모두 갖춰진 SAS의 차별화된 BI솔루션 전략이다.

SAS코리아는 ‘엔터프라이즈 인텔리전스’의 경쟁력을 통해 이미 금융 및 제조업계에서 인정받은 리스크 관리, 활동원가기준, 품질마이닝에서의 리더 입지를 더욱 확고히 하는 데 주력할 계획이다.

특히 금융권에서는 사기방지, 자금세탁방지법 등이 주요 이슈로 대두되고, 제조업에서 품질 혁신, 수요예측, 전략경영 등에 대한 산업 고도화 경영의 움직임이 계속 이어질 것으로 예상되는 만큼 산업 전반에 걸쳐서 특화된 솔루션 중심의 영업을 지속적으로 전개해 나갈 계획이다. 또한 툴 기반 영업에서 데이터 통합에도 주력하기 위해 산업별로 전문 세일즈 컨설턴트 인력을 영입 및 재정비하고 있다.

SAS코리아는 또한 2년 전에 인수한 세계적인 유통관리 솔루션 업체인 마켓맥스(MarketMax) 제품을 국내에 적극 소개하여 그 성과도 가시화할 것으로 기대하고 있고, IT거버넌스 및 IT서비스관리(ITSM)시장의 부상을 고려한 솔루션 공급도 본격화한다.

 최희재기자@전자신문, hjchoi@etnews.co.kr



◆인터뷰-조성식 사장

“최근 기업들은 단순한 트렌드 분석을 뛰어넘어 상호 연관된 다양한 요인들로부터 비즈니스 예측에 대한 통찰력을 정제해낼 수 있는 새로운 대안을 필요로 하고 있는데, BI가 바로 그 대안입니다.”

조성식 SAS코리아 사장은 그동안 BI가 일부 선진 경영인의 경영 철학에 국한되어 거론되어 왔지만 이제는 모든 기업의 경영인들에게 있어서 투자 우선 순위로 손꼽히고 있다고 분석했다.

조 사장은 최근 국내에 많은 기업들이 속속 BI시장에 뛰어들고 있는 가운데, 이를 위한 경쟁사와의 차별화 및 마케팅 전략에 대해 “저희 SAS의 비즈니스 인텔리전스 솔루션은 경쟁사들과는 비교 대상이 될 수 없습니다. SAS코리아는 여타 벤더들과 달리 BI의 정의를 한층 확대시킨 ‘차세대 BI 솔루션’을 제시하고 있기 때문입니다”라며 시장 선도 기업 다운 자신감을 피력했다.

비즈니스 인텔리전스 제품을 적극 마케팅 하기 위해 그룹 차원의 효율적인 전사적 비즈니스 인텔리전스 도입을 지원하는 고객센터인 BICC(Business Intelligence Competence Center)를 운영하고, 각종 포럼과 사용자 그룹 지원 프로그램을 실시해 SAS의 엔터프라이즈 인텔리전스 솔루션을 더욱 널리 알리는 데 힘을 쏟을 계획이다.

by Sungjo Park Joe & Soohy 2007.02.20 14:37
SAS

자 설날도 어느덧 막바지에 이르는 지금...
오늘은 7장이다.
가장 중요하다는 DATA, PROC문을 전에 공부했었는데, 오늘은 두번째로 중요한 것이란다.
뭐가 중요한지 어디 구경해보자.

7장의 책 제목은 데이터셋 활용하기이다.
서두에서 얘기하는 것을 보자면 MERGE문, UPDATE문, SET문을 알면 외부 데이터와 연계해서 작업을 처리하는 것이 한층 수월해질 것이라고 한다.
데이터를 따로 활용할 수 있는 것은 중요하다.
뭐 생각하기에 따라서는 SAS 프로그램상에 상주시켜서 계속 쓰면 되지 않느냐 하는 게으른(?) 사람도 있을텐데,
캠코더에서 테이프를 빼지않고 맨날 꽂아서 쓰는 사람이 있을까?
자료와 정보의 활용이라는 것은 누적되면서 가치를 일으키는 것이 많다.
네이버의 지식인을 보라. 변화가 적은 학문일수록, 지식을 찾기 쉬워지고, 공유하기 편해진다.
당장 필요하지 않아도, 필요할 수 있는 자료들은 따로 저장을 해야하고,
이럴때 외부로 자료를 정돈하여 저장하고, 필요시에 꺼내쓸 수 있다면 참 좋을 것이다.

일단 예제문을 보면서 생각해보도록 하자.

♥♥♥♥♥
DATA a1; INPUT x1-x3; CARDS;                                                                                                            12 34 26                                                                                                                               
22 24 37                                                                                                                               
16 23 55                                                                                                                               
PROC PRINT;                                                                                                                            
DATA a2; SET a1;                                                                                                                       
y = (x1+x2)/2;                                                                                                                         
PROC PRINT;                                                                                                                            
PROC MEANS DATA=1;                                                                                                                     
RUN;
♥♥♥♥♥
                                                        SAS 시스템            2007년 02월 19일 월요일 오후 04시30분21초   1

                                                   OBS    x1    x2    x3

                                                    1     12    34    26
                                                    2     22    24    37
                                                    3     16    23    55

                                                        SAS 시스템            2007년 02월 19일 월요일 오후 04시30분21초   2

                                               OBS    x1    x2    x3      y

                                                1     12    34    26    23.0
                                                2     22    24    37    23.0
                                                3     16    23    55    19.5
♥♥♥♥♥
a1 데이터셋을 만든다; 변수는 x1-x3까지 이며; 자료의 내용은 다음과 같다.
12 34 26
22 24 37
16 23 55
데이터셋 a1에 입력된 내용을 출력하자.
a2 데이터셋을 만든다; 변수는 a1 데이터셋과 동일하다;
y = (x1+x2)/2 이다;
데이터셋 a2에 입력된 내용을 출력하자;
데이터셋 a1에 대한 평균값을 구한다.(뒤에 DATA=a1으로 지정해주었기 때문에..a2데이터셋이 아닌것이다)

그렇다면, 지우고 하는 것과 무슨 차이가 있길래? 하는 생각이 들지 않는가? 나만 그런가?
그래서 +_+ 한 번 해보고자 한다.

DATA a1; INPUT x1-x3; CARDS;                                                                                                            12 34 26                                                                                                                               
22 24 37                                                                                                                               
16 23 55                                                                                                                               
PROC PRINT;                                                                                                                            
DATA a2; SET a1;                                                                                                                       
y = (x1+x2)/2;                                                                                                                         
PROC PRINT;                                                                                                                            
PROC MEANS;                                                                                                                            
RUN;

내용을 살짝 바꾸고...

                                                        SAS 시스템            2007년 02월 19일 월요일 오후 04시30분21초   5

                                                      MEANS 프로시저

                         변수    N          평균값        표준편차          최소값          최대값
                         -------------------------------------------------------------------------
                         x1      3      16.6666667       5.0332230      12.0000000      22.0000000
                         x2      3      27.0000000       6.0827625      23.0000000      34.0000000
                         x3      3      39.3333333      14.6401275      26.0000000      55.0000000
                         y       3      21.8333333       2.0207259      19.5000000      23.0000000
                         -------------------------------------------------------------------------
이게 추가되었다. 뭐지?
ㄱ- 아니 똑같다.. 저걸 아까 붙여넣기 안한건가....ㄷㄷㄷ
무슨 차이일까... 대체....아직 이해하기에 내공 부족이다.
부족한 것을 안다고 한다면, 같이 공부하는 사람들이 허탈해할까싶어, 페이스대로 공부공부.
다시해보니 처음 값도 틀리게나온다.
데이터셋이 남아서 연산이 겹쳐버리는건지 원... 아 잊어버려~ 잊어버려~~

난 학과에서 DATABASE 과목을 들어본적이 있다.
다 기억나지는 않지만, 업무에 따른 객채를 잘 정해야 원할한 프로그램이 나온다.
빵집에서는 밀가루가 중요하지 필통이 중요하지 않은 논리다.
필요한 데이터를 필요한 것으로 추출하는 것은, 자료를 활용하는데 있어서 결정적이다.

SAS는 자료를 효율적으로 활용하게끔 도와주는 소프트웨어지만,
결국 사용하는 것은 사람이다.
우리가 어떤 일에 소프트웨어를 사용해야 할지는, 결국 사용자가 생각해서 정해야 한다.
자료를 추출하는 것도 그렇다.
어디에 어떤 자료가 쓰일지 사람이 정해줘야 한다.
....그렇다면, 자료를 어떻게 뽑을것인가? 하는 문제가 생긴다. 그렇지 않은가?
이를 위해서 책은 뭐라고 얘기하는지 들어보도록 하자.

♥♥♥♥♥
DATA a1; INPUT sex $ 1 WEIGHT 3-6 HEIGHT 8-10;                                                                                                 
CARDS;                                                                                                                                         
F 56.3 167                                                                                                                                     
F 45.6 156                                                                                                                                     
M 76.2 176                                                                                                                                     
F 45.9 176                                                                                                                                     
M 76.2 176                                                                                                                                     
;                                                                                                                                              
DATA a2; SET a1; IF sex = 'M';                                                                                                                 
PROC MEANS;                                                                                                                                    
RUN;

♥♥♥♥♥
                                                        SAS 시스템            2007년 02월 19일 월요일 오후 04시50분26초   3

                                                      MEANS 프로시저

                        변수      N          평균값        표준편차          최소값          최대값
                        ---------------------------------------------------------------------------
                        WEIGHT    2      76.2000000               0      76.2000000      76.2000000
                        HEIGHT    2     176.0000000               0     176.0000000     176.0000000
                        ---------------------------------------------------------------------------
♥♥♥♥♥
a1이라는 데이터셋을 만들어라. 입력값은 변수sex는 문자열 1열을 쓰며, WEIGHT는 3-6열 숫자열, HEIGHT 8-10열 숫자열을 쓴다.
데이터값들;
F 56.3 167                                                                                                                                     
F 45.6 156                                                                                                                                     
M 76.2 176                                                                                                                                     
F 45.9 176                                                                                                                                     
M 76.2 176
데이터끝;
a2 데이터셋을 만들어라. a1 데이터셋의 값을 사용한다. 만약 sex가 'M'인 경우;
평균값을 구해라.
돌려돌려;

그래서 M일 경우만, 나머지 변수인 WEIGHT와 HEIGHT의 평균값이 나오게 된 것이다.
조건을 뽑아 내는것이 어려운가?
IF문이 나오면 아래 그 조건에 해당하는 연산이 이루어지는 것은 당연한 수순이다.
만약 M이 아니라 F도 따로 계산하고 싶다면
ELSE라는 문장으로 다음이 추가되지 않을까 싶다.
사실 프로그램이라는 것은 거의 비슷한 룰을 이룬다. 일반사용자가 프로그램에 벽을 느끼면서 스트레스를 받듯이,
프로그래머도 완전히 다른 시스템들로만 세상의 모든 프로그램이 이루어진다면 스트레스에 죽어버리지 않을까?
그리고, 한 프로그램의 시장이 무너져서 다른 프로그램을 공부해야 할때,
완전히 다른 시스템이라면 시장 자체의 경쟁력이 추락하게 될 수도 있다.
아무튼, 이러저러한 이유로, 약간의 독창성에 대한 것이 아니라면, 궂이 다르게 만들지는 않는다.

뒷 부분을 다르게 작성하는 법이 적혀있다.
어제 배운 비교 연산자를 생각하면 이해가 빠를 것 같다^^

DATA a2; SET a1;
IF sex='M' THEN OUTPUT;
PROC MEANS; RUN;

a2 데이터셋을 만들고, 자료는 a1의 변수를 활용한다.
만약 sex 변수의 값이 M이라면 결과를 내겠다;
평균값을 구해라; 돌려돌려;

같은 의미 아닌가? 또 다른 방법도 소개되고 있다.

DATA a2; SET a1;
IF sex ^= 'M' THEN DELETE;
PROC MEANS; RUN;

조금 극단적인 기분이 들지 않는가? DELETE... 저번에 배워서 공감하겠지만, 자료를 지우는 것은 상당히 위험한 일이다. 다른 변수에서 또 얼마나 중요한 결과값들이 기다리고 있을지 모르기 때문이다.

a2 데이터셋을 만들고, 자료는 a1의 변수를 활용한다.
sex 변수의 값이 M이 아니면 지워라;
평균값을 내라; 돌려돌려;

다음 배워볼 것은 SET문이다.
자료를 합치는데 쓰이는 문장이다.

DATA all; SET a1 a2;    ....데이터셋 a1과 a2를 아래위로 합쳐라.

DATA kkk; SET all; IF reg=1;   .... 데이터셋 all 중에서; reg가 1인 경우 kkk로 보내라.

DATA all; MERGE a1 a2; BY reg;   .... 데이터셋 a1과 a2를 reg로 옆으로 합친다.

갑자기 MERGE까지 나오네...ㄷㄷㄷ

형식은 아래와 같다.
DATA 새로운 데이터셋이름; SET 기존 데이터셋 이름(들); 자료변환 등 SAS 프로그램 문장들

예제를 보도록 하자.
♥♥♥♥♥
DATA a1; INPUT x y; CARDS;                                                                                                                     
1 21                                                                                                                                           
2 56                                                                                                                                           
DATA a2; INPUT x y z; CARDS;                                                                                                                   
1 33 11                                                                                                                                        
2 56 21                                                                                                                                        
DATA all; SET a1 a2;                                                                                                                           
PROC PRINT;                                                                                                                                    
RUN;
♥♥♥♥♥
                                                        SAS 시스템            2007년 02월 19일 월요일 오후 04시50분26초   4

                                                   OBS    x     y     z

                                                    1     1    21     .
                                                    2     2    56     .
                                                    3     1    33    11
                                                    4     2    56    21
♥♥♥♥♥
데이터가 합친 것을 알 수 있다.
중요하게 볼 부분은 2번째와 4번째 행 부분이다.
SET문은 데이터를 위 아래로 합치는 것은 알고 있다.
하지만 2번째와 4번째 행은 x와 y의 값이 같다.
값이 동일 할 경우 같은 데이터라고 처리하는 것이 아니라,
독립적으로 처리되는 것을 이해해야 할 것이다.
없는 값들은 '.'(MISSING) 처리 되었음을 볼 수 있다.

♥♥♥♥♥
DATA a1; INPUT id x1 x2; CARDS;                                                                                                                
1 33 44                                                                                                                                        
2 32 34                                                                                                                                        
1 22 44                                                                                                                                        
1 32 67                                                                                                                                        
2 11 34                                                                                                                                        
;                                                                                                                                              
PROC SORT; BY id;                                                                                                                              
DATA b1; SET a1; BY id;                                                                                                                        
IF FIRST.id = 1;                                                                                                                               
PROC PRINT;                                                                                                                                    
RUN;
♥♥♥♥♥
                                                        SAS 시스템            2007년 02월 19일 월요일 오후 04시50분26초   5

                                                   OBS    id    x1    x2

                                                    1      1    33    44
                                                    2      2    32    34

♥♥♥♥♥
a1 데이터셋을 만들어라. 입력값은 변수id x1 x2이다.
자료값들은 다음과 같다;
1 33 44                                                                                                                                        
2 32 34                                                                                                                                        
1 22 44                                                                                                                                        
1 32 67                                                                                                                                        
2 11 34                                                                                                                                        
자료끝;
정렬해라(SORT). id 를 기준으로 말이다;
b1 데이터셋을 만들어라. 입력값은 a1과 같이 한다. id순으로 말이다.
만약 첫 id 값이 1이면 (이게 가장 헛갈리는데, 우리가 보이지 않게 테이블안에 시작값과 끝값이 있다고 한다 변수가 HI라면 HI로 정렬되는 첫 값은 FIRST.HI 값이 1이고, 마지막 HI로 정렬되는 값은 LAST.HI 값이 1이 나온다. 이건 우리가 보는 값이 아닌, 자료 처리를 편하게 하기 위해서 숨겨진 값이니 알고만 있자;)
출력해라;
돌려돌려;

테이블로 나온 내용이 있으니 한번 적어보겠다.
WORK.b1 값의 변화이다.

id   x1   x2   |  first.id    last.id
1    33   44          1           0
1    22   44          0           0
1    32   67          0           1
2    32   34          1           0
2    11   34          0           1
id로 정렬 했을때의 결과이고 오른쪽의 first.id와 last.id 값은 보이지 않는 값이다.

id   x1   x2   |  first.id    last.id
1    33   44          1           0
2    32   34          1           0
first.id값이 1인 값만 추출한 것이다.
그래서 위에 결과값이 그렇게 나온것이다.
그렇다면 last.id로 정렬하면 어찌 될까?

id   x1   x2   |  first.id    last.id
1    32   67          0           1
2    11   34          0           1
요렇게 나오게 될 것이다.
신기하지 않은가? 이어서는 밥 먹고와서 하도록 하겠다.
살짝 졸리네... 식곤오면 큰일인디....

졸리긴 졸리다. 무슨 밥 먹고 정신 차리니 3시간이나 지나는거지..
논것도 아닌데 그것 참...

♥♥♥♥♥
DATA a1; INPUT code1 x y; CARDS;                                                                                                       
1 11 21                                                                                                                                
3 22 56                                                                                                                                
PROC SORT; BY code1;                                                                                                                   
DATA a2; INPUT code1 x y z; CARDS;                                                                                                     
2 33 11 5                                                                                                                              
5 56 21 6                                                                                                                              
3 45  6 7                                                                                                                              
7 76 43 7                                                                                                                              
PROC SORT; BY code1;                                                                                                                   
DATA all; SET a1 a2; BY code1;                                                                                                         
PROC PRINT;                                                                                                                            
RUN;
♥♥♥♥♥
                                                        SAS 시스템            2007년 02월 19일 월요일 오후 08시53분20초   1

                                               OBS    code1     x     y    z

                                                1       1      11    21    .
                                                2       2      33    11    5
                                                3       3      22    56    .
                                                4       3      45     6    7
                                                5       5      56    21    6
                                                6       7      76    43    7
♥♥♥♥♥
가볍게 설명해도 되려나?
위에 데이터와 아래 데이터를 code1으로 정렬해 놓고,
나중에 set으로 합친 것이다.
합치고 다시 code1으로 정렬했다.
뭐 한꺼번에 해도 될텐테 따로따로 하고, 왜 또하는지 모르겠다.
만약 DATA all; SET a1 a2;
요렇게만 쓰면, 어떻게 될까? 그렇다. 정답~

                                                        SAS 시스템            2007년 02월 19일 월요일 오후 08시53분20초   2

                                               OBS    code1     x     y    z

                                                1       1      11    21    .
                                                2       3      22    56    .
                                                3       2      33    11    5
                                                4       3      45     6    7
                                                5       5      56    21    6
                                                6       7      76    43    7

OBS 1~2가 위쪽 데이터, 3~6이 아래쪽 데이터가 된다.
y열 부분이 '.'으로 표기되어 더 알아보기가 쉽지 않은가? ㅋㅋ

좀 긴 문장을 살펴보자. 우리의 능력을 여기까지기 아니지 않는가?

♥♥♥♥♥
DATA a1; INPUT name $ x y; CARDS; /* a1데이터셋, 입력값은 name변수(문자), x, y(각각 숫자), 데이터들(아래) */                           
KIM  5 2                          /* 데이터 입력 시작 */                                                                               
PARK 3 4                                                                                                                               
LEE  2 7                                                                                                                               
CHOI 5 8                                                                                                                               
;                                 /* 데이터 입력 끝 */                                                                                 
PROC PRINT; VAR name x y;         /* name, x, y 변수들에 대해 결과를 출력하라 */                                                       
                                                                                                                                       
DATA b1; SET a1;                  /* b1데이터셋, a1의 변수를 사용한다 */                                                               
IF name='CHOI' OR x > y THEN DELETE; /* 이름이 CHOI거나 x값이 y값보다 크면 해당 자료행을 지워라 */                                     
PROC PRINT; /* 모든 결과를 출력하라 */                                                                                                 
PROC MEANS; /* 모든 평균값을 계산하라 */                                                                                               
                                                                                                                                       
DATA b1; SET a1; /* b1데이터셋, a1의 변수를 사용한다 */                                                                                
lx = LOG(x); /* lx 변수는 LOG(x)의 결과이다 */                                                                                         
cx = COS(X); /* cx 변수는 COS(x)의 결과이다 */                                                                                         
IF x > y THEN xy=1 /* x변수가 y보다 크다면 xy변수는 1이다 */                                                                           
c = 5 * (x < y) + 10 * (x > y); /* 무슨 의미인지...모르겠다; */                                                                        
PROC PRINT; /* 결과를 출력하라 */                                                                                                      
                                                                                                                                       
DATA c1; INPUT x y z    ; CARDS4; /* c1데이터셋, x y z 변수를 입력하겠다. 자료는 4(?)다 */                                             
1   2 4   /* 입력 시작*/                                                                                                               
3   4 6                                                                                                                                
;;;;      /* 입력 끝(4번을 반복하는 것인지, 다른 의미가 있는지는 모르겠다...  */                                                       
PROC PRINT;  /* 출력할 것 */                                                                                                           
                                                                                                                                       
DATA d1 (KEEP=x); SET a1; /* d1 데이터셋 (x를 유지해라??), a1데이터셋 이용 */                                                          
PROC PRINT; /* 출력하라 */                                                                                                             
DATA d1 (DROP=x); SET a1; /* d1 데이터셋 (x를 떨어뜨려라??), a1 데이터셋 이용 */                                                       
PROC PRINT; /* 출력하라 */                                                                                                             
                                                                                                                                       
DATA d1 (KEEP=name x) d2 (KEEP=name y); SET a1; /* d1데이터셋(name과 x 유지) d2데이터셋(name과 y유지), a1데이터셋 사용 */              
PROC PRINT DATA=d1; /*d1 데이터셋 출력 */                                                                                              
PROC PRINT DATA=d2; /*d2 데이터셋 출력 */                                                                                              
RUN; /*돌려돌려 */
♥♥♥♥♥
여기까지인데 이해는 잘 안되지만 생각되는 한도내에서 써봤다. 결과는 어떨까?
♥♥♥♥♥
                                                        SAS 시스템            2007년 02월 19일 월요일 오후 08시53분20초   3

                                                   OBS    name    x    y

                                                    1     KIM     5    2
                                                    2     PARK    3    4
                                                    3     LEE     2    7
                                                    4     CHOI    5    8

                                                        SAS 시스템            2007년 02월 19일 월요일 오후 08시53분20초   4

                                                   OBS    name    x    y

                                                    1     PARK    3    4
                                                    2     LEE     2    7

                                                        SAS 시스템            2007년 02월 19일 월요일 오후 08시53분20초   5

                                                      MEANS 프로시저

                         변수    N          평균값        표준편차          최소값          최대값
                         -------------------------------------------------------------------------
                         x       2       2.5000000       0.7071068       2.0000000       3.0000000
                         y       2       5.5000000       2.1213203       4.0000000       7.0000000
                         -------------------------------------------------------------------------

                                                        SAS 시스템            2007년 02월 19일 월요일 오후 08시53분20초   6

                                                   OBS    name    x    y

                                                    1     PARK    3    4
                                                    2     LEE     2    7

                                                        SAS 시스템            2007년 02월 19일 월요일 오후 08시53분20초   7

                                                         OBS    x

                                                          1     5
                                                          2     3
                                                          3     2
                                                          4     5

                                                        SAS 시스템            2007년 02월 19일 월요일 오후 08시53분20초   8

                                                     OBS    name    y

                                                      1     KIM     2
                                                      2     PARK    4
                                                      3     LEE     7
                                                      4     CHOI    8

                                                        SAS 시스템            2007년 02월 19일 월요일 오후 08시53분20초   9

                                                     OBS    name    x

                                                      1     KIM     5
                                                      2     PARK    3
                                                      3     LEE     2
                                                      4     CHOI    5

                                                        SAS 시스템            2007년 02월 19일 월요일 오후 08시53분20초  10

                                                     OBS    name    y

                                                      1     KIM     2
                                                      2     PARK    4
                                                      3     LEE     7
                                                      4     CHOI    8

♥♥♥♥♥
앞쪽은 이해가 가는데 중간부분부터 이해가 가지 않는다. 동영상 좀 보고 다시 돌아오겠다.
동영상에서는 딱 한 문장으로 설명하고 있다.
"보이시죠? DATA문 PROC문 ,DATA문 PROC문, DATA문 PROC문.... 이게 전형적인 SAS 문입니다."

네... 그렇습니다. 매우 전형적인 SAS 문들이 되겠습니다.
우리도 넘어가도록 하죠..;;

다음에 배울 MERGE문은 이전에 SET문과는 다르게 옆으로 붙이는 것이다.
이름 키
주몽 150
왕건 120

이름 몸무게
주몽 30
왕건 40

이런 두 자료가 있다면 어떻게 해야할까.
SET문을 사용하면 이렇게 될 것이다.
주몽 150
왕건 120
주몽 30
왕건 40

... 뭔소린가 이게..

이럴때 MERGE 문을 사용하면
주몽 150 30
왕건 120 40
이렇게 되는 것이다.
그럼 공부해보도록 하자.

♥♥♥♥♥
DATA a1; INPUT x y; CARDS;                                                                                                             
1 21                                                                                                                                   
2 56                                                                                                                                   
DATA a2; INPUT z @@; CARDS;                                                                                                            
11 22 33                                                                                                                               
;                                                                                                                                      
DATA all; MERGE a1 a2;                                                                                                                 
PROC PRINT;                                                                                                                            
RUN;
♥♥♥♥♥
                                                        SAS 시스템            2007년 02월 19일 월요일 오후 08시53분20초  11

                                                   OBS    x     y     z

                                                    1     1    21    11
                                                    2     2    56    22
                                                    3     .     .    33
♥♥♥♥♥
a1 데이터셋; 입력값은 변수 x y; 자료들;
1 21
2 56
a2 데이터셋; 입력값은 z이고 일렬로 주욱 들어간다;
11 22 33
(실제로 다음 값이라고 생각하면 된다
11
22
33
알겠는가?)
데이터 끝;
모든 데이터셋; a1데이터셋과 a2데이터셋을 합쳐라(옆에다 붙여라)
출력하라;
돌려돌려;
♥♥♥♥♥
결과를 보면 알 수 있듯이, z라는 변수값에 아래로 주욱 값이 붙어서 합쳐진 것을 볼 수 있다.

자 그렇다면 또 궁금증이 생기는데?
만약 아주 만약에, 이런 자료 두개가 만나면 어찌될까?

슈퍼  감자가격
 1         21
 2         56

감자가격   고구마가격
  11              5
  22              6
  33              9

이 두가지를 옆으로 붙이면 어찌될까?
그냥 붙이겠지 생각하기 쉽지만 '감자가격'이라는 변수가 같다.
ㄱ- 이런 경우를 억지로라도 만들어서 돌려보도록 하자.
♥♥♥♥♥
DATA a1; INPUT x y; CARDS;                                                                                                             
1 21                                                                                                                                   
2 56                                                                                                                                   
DATA a2; INPUT y z @@; CARDS;                                                                                                          
11 5 22 6 33 9                                                                                                                         
;                                                                                                                                      
DATA all; MERGE a1 a2;                                                                                                                 
PROC PRINT;                                                                                                                            
RUN;
♥♥♥♥♥
                                                        SAS 시스템            2007년 02월 19일 월요일 오후 08시53분20초  12

                                                    OBS    x     y    z

                                                     1     1    11    5
                                                     2     2    22    6
                                                     3     .    33    9

♥♥♥♥♥
헉! a2 데이터셋에 묻혀버렸다. 원래 이런건가?
아 맞다고 한다. 뒤에 있는 변수가 앞에 있는 변수를 치고 들어온다고 한다.
그럼 안 좋은것 아닌가? 음...

이럴 경우를 위해서 SAS는 또 다른 비책(?)을 가지고 있다고 한다.
만약  x y 변수와 y z 변수로 아까처럼 충돌하면
x y1 y2 z로 피해가게 만든단다. 그 방법을 알아보자.
♥♥♥♥♥
DATA a1; INPUT x y; CARDS;                                                                                                             
1 21                                                                                                                                   
2 56                                                                                                                                   
DATA a2; INPUT y z @@; CARDS;                                                                                                          
11 5 22 6 33 9                                                                                                                         
;                                                                                                                                      
DATA a1; SET a1; RENAME y=y1;                                                                                                          
DATA a2; SET a2; RENAME y=y2;                                                                                                          
DATA all; MERGE a1 a2;                                                                                                                 
PROC PRINT;                                                                                                                            
RUN;
♥♥♥♥♥
                                                        SAS 시스템            2007년 02월 19일 월요일 오후 08시53분20초  13

                                                 OBS    x    y1    y2    z

                                                  1     1    21    11    5
                                                  2     2    56    22    6
                                                  3     .     .    33    9

♥♥♥♥♥
이거 살짝 억지스럽지 않은가? 그냥 위에서 INPUT 값을 바꿔주는게 낫겠다 ㄱ-;
아무튼 RENAME이란 구문으로 변수의 값을 바꿔줄 수 있는게 꼼수였다.
많은 데이터로 인해 어디에 있는 INPUT 구문인지 알 수 없다면 간단하게 손 볼 수 있을 것 같다.

이러니 저러니해도 지금까지의 MERGE문은 장난이란다.
아주! 강.력.한! MERGE 기능은 BY문과 결합했을때 그 위력이 나온다고 하는데...
그 강력함에 취해보자.

♥♥♥♥♥
DATA a1; INPUT sex $ x y @@; CARDS;                                                                                                    
F 1 21  F 4 34  F 5 42                                                                                                                 
M 2 56  M 3 77                                                                                                                         
PROC SORT; BY sex;                                                                                                                     
DATA a2; INPUT sex $ z; CARDS;                                                                                                         
F 11                                                                                                                                   
M 22                                                                                                                                   
;                                                                                                                                      
DATA all; MERGE a1 a2; BY sex;                                                                                                        
PROC PRINT;                                                                                                                            
RUN;
♥♥♥♥♥
                                                        SAS 시스템            2007년 02월 19일 월요일 오후 08시53분20초  14

                                                OBS    sex    x     y     z

                                                 1      F     1    21    11
                                                 2      F     4    34    11
                                                 3      F     5    42    11
                                                 4      M     2    56    22
                                                 5      M     3    77    22

♥♥♥♥♥
뭔가 혼란스럽지 않은가.
어떻게 z값이 저렇게 다 들어갈 수 있을까.
d2부분에서 우리는 성별로 어떤 값을 지정해줬다.
F면 11을, M이면 22를..
같이 MERGE를 시키려고 보니까, F가 하나가 아니다. 다 F는 F다. 그래서 다 11을 붙여줬다.
라고 설명하는 길 밖에는 없겠다. M도 마찬가지.
이건 정말 유용하게 쓸 수 있을 것 같은 느낌이 팍 온다.

책에서는 데이터의 분류코드 체계가 서로 다른 경우 새로운 코드 또는 하나의 일관성 있는 코드로 조정할 필요가 있는데, 이럴 경우 매우 유용하다고 한다.
♥♥♥♥♥
DATA a1; INPUT code1 x y @@;                                                                                                           
CARDS;                                                                                                                                 
11 1 21   21 4 34                                                                                                                      
51 2 56   41 3 77                                                                                                                      
PROC SORT; BY code1;                                                                                                                   
DATA a2; INPUT code1 code2 $;                                                                                                          
CARDS;                                                                                                                                 
11 a1                                                                                                                                  
21 b1                                                                                                                                  
31 c1                                                                                                                                  
61 f1                                                                                                                                  
;                                                                                                                                      
DATA all; MERGE a1 a2; BY code1;                                                                                                       
PROC PRINT;                                                                                                                            
RUN;
♥♥♥♥♥
                                                        SAS 시스템            2007년 02월 19일 월요일 오후 08시53분20초  15

                                             OBS    code1    x     y    code2

                                              1       11     1    21     a1
                                              2       21     4    34     b1
                                              3       31     .     .     c1
                                              4       41     3    77
                                              5       51     2    56
                                              6       61     .     .     f1

♥♥♥♥♥
있는 것은 있게, 없는 것은 없게 정렬이 된다.
개인적으로는 SET문보다 MERGE문이 더 중요하다고 보여진다.


오늘의 마지막 구문. UPDATE문에 대해서 알아보자.
일전에 한 번 등장했었는데 뭐지? 하고 넘어갔던 것 같다.
뭐 공부하다보면 보기 싫어도 하나씩 만나게 된다.
평소에 만나지 못하는 녀석이라만 더 반가워야 하는게 아닐까?
마지막 구문이고 하니 즐겁게 손흔들며 시작해보자. 'ㅡ'/ 할룽~

UPDATE문은 원래 있는 데이터셋에 변회된 부분만을 수정하려 할 때 사용한다.
MERGE문과 유사하지만 반드시 BY문을 사용해야 한단다.
하기사 뭘 UPDATE 하는지는 알아야겠지;;;
MERGE에서는 뒤에 오는 데이터셋의 변수가 MISSING이면 MISSING으로 처리되지만, UPDATE는 원래의 값을 갖는게 다른 점이라고 한다.

형식은 다음과 같다.
DATA 새로운 이름; UPDATE 기존 이름들; BY 변수명;

늘 그렇듯이 이렇게 보면 전혀 감이 안온다.
역시 예문이다. 고고싱.

♥♥♥♥♥
DATA a1; INPUT code1 x y @@;                                                                                                           
CARDS;                                                                                                                                 
11 1 2   21 4 3                                                                                                                        
51 2 5   41 3 7                                                                                                                        
PROC SORT; BY code1;                                                                                                                   
DATA a2; INPUT code1 y z;                                                                                                              
CARDS;                                                                                                                                 
11 1 111                                                                                                                               
21 . 222                                                                                                                               
31 3 333                                                                                                                               
41 4 777                                                                                                                               
71 7 777                                                                                                                               
;                                                                                                                                      
DATA all; UPDATE a1 a2; BY code1;                                                                                                      
PROC PRINT;                                                                                                                            
RUN;
♥♥♥♥♥
                                                        SAS 시스템            2007년 02월 19일 월요일 오후 08시53분20초  16

                                               OBS    code1    x    y     z

                                                1       11     1    1    111
                                                2       21     4    3    222
                                                3       31     .    3    333
                                                4       41     3    4    777
                                                5       51     2    5      .
                                                6       71     .    7    777

♥♥♥♥♥
눈 여겨 볼 점은 code1이 21일때 y변수 값이다. a1 데이터셋에서 3 값인데, a2 데이터셋에서 '.'으로 처리되어 덮여씌워지지 않았다. 결과 값에도 y값이 3으로 나오는 것을 알 수 있다.
색상으로 나타내도록 하겠다.

자 다 끝났다.
오늘 왠지 평소보다 배운게 없어서 섭섭하지 않은가?
아니라고? 그렇지만 뒷 단원에서 나오는 내용을 책에서 살짝 언급하고 있다.
반페이지정도?
뭐 이것도 7장에 나온 내용이니 구경이나 하며 마치도록 하겠다.

프로그램 상에서도 데이터셋을 만들 수 있다고 한다.
+_+ 아니! 그럴수가!! 라는 분도 계실것이고, 데이터셋이 뭐냐고 생각하는 사람도 있을 것이다.
...이렇게 쓰면 알까...
DATA a1;
a1 데이터셋을 만들자.

이해하는가?
새로운 데이터셋을 프로그램 실행하며 만들려면 OUTPUT 이라는 명령어가 필요하다고 한다.
10장에서 다시 언급하겠지만, 기본적인 개념을 알아보자.

♥♥♥♥♥
DATA a1; INPUT sex $ x; CARDS;                                                                                                         
F 1                                                                                                                                    
F 3                                                                                                                                    
F 5                                                                                                                                    
M 2                                                                                                                                    
M 4                                                                                                                                    
;                                                                                                                                      
PROC MEANS; VAR x;                                                                                                                     
OUTPUT OUT=aa1 SUM=sx1; BY sex;                                                                                                        
PROC PRINT; VAR sex sx1;                                                                                                               
RUN;
♥♥♥♥♥
                                                        SAS 시스템            2007년 02월 19일 월요일 오후 08시53분20초  17

---------------------------------------------------------- sex=F ----------------------------------------------------------

                                                      MEANS 프로시저

                                                       분석 변수 : x

                             N          평균값        표준편차          최소값          최대값
                             -----------------------------------------------------------------
                             3       3.0000000       2.0000000       1.0000000       5.0000000
                             -----------------------------------------------------------------


---------------------------------------------------------- sex=M ----------------------------------------------------------

                                                       분석 변수 : x

                             N          평균값        표준편차          최소값          최대값
                             -----------------------------------------------------------------
                             2       3.0000000       1.4142136       2.0000000       4.0000000
                             -----------------------------------------------------------------

                                                        SAS 시스템            2007년 02월 19일 월요일 오후 08시53분20초  18

                                                     OBS    sex    sx1

                                                      1      F      9
                                                      2      M      6

♥♥♥♥♥
OUTPUT OUT=aa1 SUM=sx1; BY sex;
남녀별로 변수 x에 대하여 SAS 데이터셋 'aa1'에 sx1이란 변수명으로 보관한다고 한다.
이게 왜 남녀별로 되는건지는 나도 잘 모르겠다.
아무래도 10장에 가서 이해를 하는게 수월 할 것 같다.

좋은 하루, 그리고 내일도 알찬 하루를 만들도록 하자.

by Sungjo Park Joe & Soohy 2007.02.19 18:01
SAS

자 6장이다..
지금까지 배운것을 열심히 하라는 선생님의 말씀과 함께 노력해보자
SAS와 SPSS의 차이점에 대한 설명이 나온다.
프로그램 활용과 프로그래밍에 익숙하다면 SAS가, 아니라면 SPSS가 편하다고 한다.

DATA문은 SAS 데이터셋을 만들고 PROC문은 해당 SAS 데이터넷을 처리한다.

SAS 프로그램의 구조를 알아보자

DATA a1; INPUT (x y) (1. 2.);
CARDS;
1 2                                                                                         DATA 부분
2 5
3 8
;
PROC PRINT; VAR x y; RUN;                                                     PROC 부분
DATA a2; INPUT x y z; CARDS;
4 5 1.1                                                                                    DATA 부분
5 2 3.2
PROC MEANS; RUN;                                                                PROC 부분
DATA bb; SET a1 a2;                                                                DATA 부분
xsq=SQRT(x);                                                                         자료변형 부분
PROC REG; MODEL y=x xsq;                                                    PROC 부분
PROC PRINT DATA=a2; RUN;

DATA문은 SAS 데이터셋을 만들고 PROC문은 해당 SAS 데이터넷을 처리한다.

간단한 프로그램을 하나 작성해보도록 하자.
♥♥♥♥♥
DATA a1;                                                                                                                               
INPUT x y;                                                                                                                             
CARDS;                                                                                                                                 
1 2                                                                                                                                    
3 4                                                                                                                                    
;                                                                                                                                      
PROC PRINT; VAR x y;                                                                                                                   
RUN;                                                                                                                                  
♥♥♥♥♥
                                                        SAS 시스템            2007년 02월 17일 토요일 오후 02시03분58초   1

                                                       OBS    x    y

                                                        1     1    2
                                                        2     3    4

♥♥♥♥♥
SAS 데이터셋 이름 - 32자 내의 임의의 영문자(A~z,_)나 숫자 사용
SAS 변수명 - 32자 내이며, -(하이픈)은 사용 불가
SAS 변수값 - 숫자형 변수, 문자형 변수, 날짜 및 시간형 변수, 16진수 문자형 변수, 16진수 숫자형 변수

아...잠들었다. 깨어나보니 2시간이나 지났네. 점심을 맛있게 먹어서일까 식곤증이 참...
PROC 문이 무언가 자료를 원하는 형태로 연산해서 돌려주는 것은 알겠다.
PROC문을 2개쓰면 결과도 2개! 3개쓰면 3개!!가 된단다.
출력창에 보면 어제 5과에서 엄청난(?)규모의 프로그램을 돌렸을때도 알 수 있지만,
결과가 여러 카테고리로 나눠져서 나오는 것을 볼 수 있다.
아마도 그것이 PROC문의 갯수라고 생각하면 되겠다.

그렇다면 2개의 PROC문을 한 번 작성해보도록 하자.
(너도 이거 작성하는거 초보자나!! 라고 뭐냐고 말씀하시는 분들이 있으실 것 같은데,
작성하자고 하더라도 어차피 책의 내용을 고대로 따라하는 것이라서 그렇게 생각하지 않았음 좋겠다.

<1개의 데이터에 여러 개 프로시저(PROC 문)을 사용하는 경우>
♥♥♥♥♥
DATA a1;                                                                                                                               
INPUT x y;                                                                                                                             
CARDS;                                                                                                                                 
1 2                                                                                                                                    
3 4                                                                                                                                    
;                                                                                                                                      
PROC MEANS; VAR x y;                                                                                                                   
proc REG; MODEL y=x;                                                                                                                   
RUN;
♥♥♥♥♥
음... REG가 연산 에러가 난다. 왜지...
아무튼 모르겠다... 넘어가자...ㄱ- 하다보면 또 발견될지도...

자 다음에 공부하는 것은 결과가 꼭! 출력되기를 바라면서 해보도록 하자.
변수명을 한글로 표현하는 방법이다.
우리가 보통 출력할때 보면 이렇게 나오지 않는가.
위에서 살짝 가지고 내려오면,
                                                        SAS 시스템            2007년 02월 17일 토요일 오후 02시03분58초   1

                                                       OBS    x    y

                                                        1     1    2
                                                        2     3    4

x, y 이런식으로 나오는데 결과가 한글로 써 있으면 보는 사람도 이해가 빠를 것이다.
위에것을 예로 들자면 철수와 영희는 두 번 과자를 훔쳐먹었는데,
1번째에 철수는 1개를 영희는 2개를 훔쳐먹었고,
2번째에 철수는 3개를 영희는 4개를 훔쳐먹었다는....(ㄱ- 영희는 욕심쟁이...)
아무튼, 이해하기가 쉬울 수 있다.

이 내용을 가지고 코딩을 해보자. 한글 표현은 Label문을 활용하면 된다고 한다.

<변수명을 한글로 표현하기: LABEL문>
♥♥♥♥♥
DATA a1;                                                                                                                               
INPUT x y;                                                                                                                             
LABEL x='변수 1' y='변수 2';                                                                                                           
CARDS;                                                                                                                                 
1 2                                                                                                                                    
3 4                                                                                                                                    
;                                                                                                                                      
PROC PRINT LABEL;                                                                                                                      
RUN;                                                                                                                                   
♥♥♥♥♥
                                                        SAS 시스템            2007년 02월 17일 토요일 오후 04시50분27초   4

                                                           변수    변수
                                                    OBS      1       2

                                                     1       1       2
                                                     2       3       4
♥♥♥♥♥
아까 x y 부분이 변수1 변수2로 바뀐것을 볼 수 있다.
철수하고 영희도 문제 없을 것 같다.
근데, 위는 그렇다고 쳐도, 왼쪽에 1과 2는 어찌 바꾸는거지....
철수 영희 1번째 2번째 이렇게 바꾸면 우리의 가설과 매칭시킬 수 있을 것 같은데...

자 아무튼 우려했던 결과 펑크는 일어나지 않았다.
다행이라는 생각과 함께, 다음 페이지를 보니.. 제목이 '한 단계 복잡한 형태'
그렇다. 이제 우리도 한 단계 진화할 수 있는 자격을 지닌 것이다. (책 제목 멋집니다..조인호 선생님;)
일단 뭐가 복잡해졌는지 코드를 살펴보도록 하자.
♥♥♥♥♥
DATA a1; INPUT x y;                                                                                                                    
x2 = x**2+y;                                                                                                                           
xlog = LOG(x);                                                                                                                         
CARDS;                                                                                                                                 
1 2                                                                                                                                    
3 4                                                                                                                                    
;                                                                                                                                      
PROC PRINT; VAR x y x2 xlog;                                                                                                           
RUN;
♥♥♥♥♥
                                                        SAS 시스템            2007년 02월 17일 토요일 오후 04시50분27초   5

                                              OBS    x    y    x2      xlog

                                               1     1    2     3    0.00000
                                               2     3    4    13    1.09861
♥♥♥♥♥
a1이라는 데이터셋 이름을 만들고, x y를 변수로 입력한다.
x2라는 이름의 변수에는 x의 제곱에 y를 더한것이다. (x**2가 x의 2제곱을 의미한다. 보통 x^2 이런식으로 쓰지 않던가??...암튼 그렇다니 알아두자.)
xlog라는 이름의 변수는 log(x)의 값을 나타낸다.
원시자료를 변형하거나 새로운 변수를 만드려면 등호(=)를 기준으로 좌측에 변수를 우측에 수식을 주면 된다.

그리고 한가지 실수하지 말하야 할 사실은 CARDS라는 데이터가 들어가기 전에, 자료 변형에 대해 모두 언급을 해 줘야 한다는 것이다. 뭐 사람의 생각으로는 자료가 먼저 나와야 연산을 할 수 있는게 아니냐 싶어서 자료 뒤에 써주고 싶겠지만, 일도 그렇지만 방향을 잡은뒤에 일을 시작하면 훨씬 수월하고 빠른 법이다. 또한 코딩전에 개발자들끼리 무언의 룰이라는게 있어야 내가 짠 프로그램을 다른 사람이 자신의 목적에 맞게 수정하기 편한점도 있다. 우리는 어떤 SAS 프로그래머의 코드를 변형시키더라도 CARDS; 앞에 연산 구문들이 있다는 것을 반대로 알 수 있는 것이 아니겠는가..ㅡㅡㅋ

뭔가 장황하게 써 놓았는데 별거 아니다. CARDS; 앞에 자료 변형에 대한 구문을 써주자는 것이다.
강압이 아니다. 아니면 프로그램 오류 난단다 ㄱ-;

우리가 열심히 달려온 3일(ㄱ- ..별로 안되었다... 뭔가 많이 들어간 듯 보였는데...)
몇몇 코드를 보면서 할만 할 것 같은데, 이거 나중에 말도 안되게 어려워지는 것이 아닐까 하는 생각이 든다.
하지만 짧은 인생 살아본 바로는, 무섭다고 한 발자국 나아가지 않으면 거기까지가 내 지식의 한계가 되고,
나보다 한 발자국 더 나아간 사람과 대화를 나눌때면, 그 사람이 나보다 백보는 더 많이 나간 것처럼 느껴진다.
사실은 한 보 차이인데... 지식과 정보란 그런것이다. 아는 것이 힘이다. 고로 우리는 체력이 닿는 한 달려야 한다.

뭔 말하다 오늘 이렇게 장황해 지는거지. 잠자서 약간 히트업 되었나보다.
공부했던 것 중에서 DATA a1; 으로 구문 막 짜다가 DATA b1; 등장하던 것이 있던것 기억할 것이다.
이거 어떻게 쓰는거야? 하는 생각 해 봤으려나;
더 웃긴것은 맨날 DATA b1; 뒤에는 SET a1;이 따라다닌다.
이거 한 번 알아보자. 싫음 말구~

아 참! 그리고 위에서 PROC PRINT; VAR x y x2 xlog; 이렇게 쓰는데 PROC PRINT; 만 써도 결과 값 똑같다.
고로, 뭐가 출력되는지 모를때는 VAR를 붙이지 않고 출력한뒤, 내가 출력하고픈 변수를 선택하는 것도 좋은 방법이라고 생각한다.

DATA a1; INPUT x y;                                                                                                                    
CARDS;                                                                                                                                 
1 2                                                                                                                                    
3 4                                                                                                                                    
;                                                                                                                                      
DATA b1; SET a1;                                                                                                                       
x2 = x**2+y;                                                                                                                           
xlog = LOG(x);                                                                                                                         
PROC PRINT; VAR x y x2 xlog;                                                                                                           
RUN;
♥♥♥♥♥
                                                        SAS 시스템            2007년 02월 17일 토요일 오후 04시50분27초   8

                                              OBS    x    y    x2      xlog

                                               1     1    2     3    0.00000
                                               2     3    4    13    1.09861
♥♥♥♥♥
a1이라는 이름의 데이터셋을 만든다. x y라는 변수가 입력되겠지.
자료는 다음과 같다
1 2
3 4

b1이라는 데이터셋을 만들자. 이 때 데이터셋 a1을 이용한다.
데이터셋 b1에는 x2와 xlog변수와 각각의 수식 결과값이 추가된다.
출력하자.
돌려돌려

대충 이런 분위기다.
왜 같이 쓸 수 있는 것을 따로 나누냐! 라고 반문하는 사람이 있을지도 모르겠다.
하지만 나누는 것도 필요하다.
사랑도 나눠야 가능하고.... 아니 이게 아니라!! (사실 외롭다...ㅠ_ㅠ)
어떤 특정한 필요에 의해서 일시적으로 쓰는 경우가 있을 수 있다.
분식집에서 여러가지 메뉴를 파는데, 어느날 떡볶이와 순대의 매출액만을 보고 싶다고 하자.
저 2개를 위해서 나머지 메뉴들까지 뽑을 필요는 없지 않는가.
이럴때 원 자료만을 활용하는 것이다. 데이터가 작으면 괜찮지만 많아지면 연산에 걸리는 시간도 보통이 아니다.
SAS 통계 패키지로 떡볶이와 순대를 계산하는 사람은 없을 것 아닌가.
(혹 그런 생각으로 배우는 사람이 있다면 엑셀을 공부하는 것이 더 낫다고 생각한다)

여러가지 함수에 대해서는 9장에서 설명된다고 하니까 기대해보면 좋을 것 같다.
가볍게 3가지 정도만 봐볼까?

y=MOD(_N_,4): 관측치의 일련번호 (_N_)를 4로 나눈 나머지를 Y로 한다.
y=INT(X/100): X의 값을 100으로 나눈 몫의 정수 부분을 Y로 한다.
y=X-LAG(x): 데이터 X와 바로 앞 관측치 X와의 차이를 Y로 한다.

MOD는 나머지다. 이 약어는 다른 프로그래밍 언어에서도 많이 나온다. INT도 그렇고..
9 = 4 X 2 + 1 일때, 우리는 몫이 4, 나머지가 1 이라고 한다. (2로 나눴다고 가정)
이럴경우 INT=4, MOD=1로 결과값이 나온다. 엑셀에서도 해봐라. 나오나 안나오나..
엑셀에서 결과값을 얻고 싶다면 A1셀에는 9를, B1셀에는 2를 입력하고 C1셀에 '=INT(A1/B1)'을 D1셀에 '=MOD(A1,B1)이라고 입력하면 될 것이다. 어찌아냐고? 틀릴까봐 해보고 왔다....ㄷㄷㄷ
LAG 함수는 나도 모르는 함수다. 혹 엑셀에 나올까싶어서 두들겨봤더니 '=#NAME'이라고 나온다.
없는 함수 같다. 의미는 위에 써 놓았으니 참고하자.

SAS의 연산자를 알아보자.
일단 산술 연산자를 알아보자. 산술 연산자가 뭐냐고? 덧셈 뺄셈 곱셈 나눗셈....등등
쉽다. 오랜만에 쉬운거 나오니 행복하다.
+: 덧셈   -: 뺄셈   *: 곱셈   /: 나눗셈   **: 지수

그 다음은 비교 연산자이다. 말 그대로 비교다. 네가 크냐, 우린 같냐? 뭐 이런...
= : EQ (같다) - EQual
^= : NE (같지 않다) - Non Equal
> : GT(크다) - GreaT (자이언트가 아닐까 생각했다)
< : LT(작다) - LiTtle
<= : LE(작거나 같다) - Little or Equal
>= : GE(크거나 같다) - Great or Equal
^> : NG(크지 않다) - Non Great
^< : NL(작지 않다) - Non Little

영어 너무 어렵게 보지 말자. 부호가 더 중요할테니...

논리 연산자이다.
&: And    |: Or    ^: Not
쉬운데, Or의 저 부호가 어디 있는지 모르는 사람 있다. 저건 \표시 위에 쌍절곤 같이 생긴 글자로,
쉬프트(Shift)키 + \ 을 누르면 등장한다. 숫자 1이나 영문자 l 등으로 대체 할 수 있다고는 꿈에서라도 생각하지 말자.

기타 연산자 조금이다.
><: 최소값
<>: 최대값
||:
concatenation 이라고 써져있다. 연쇄? 연결? 뭐지 이건; 음... 글자를 이어주는 함수란다.
예를 들어서, DEVICE=ALPHA || MODEL;
ALPHA='IBM'이고 MODEL='3270'인 경우 DEVICE는 'IBM 3270'의 값을 갖는단다.

이제 슬슬 재미있는 것들이 봇물처럼 터지기 시작한다.
일단 DATA STEP의 기본 형태를 보자.

DATA 데이터셋명;
INFILE 외부 파일명;
INPUT 입력 변수명;
기타 DATA STEP에서 사용되는 문장;
(MERGE, SET, UPDATE)

DATA a1;
INFILE 'e:\sastest\sample.dat'
INPUT x y;
SET a1;
다 우리가 예전에 해봤던 문장 아니던가?
그렇다면 MERGE와 UPDATE는 뭘까. MERGE는 합친다는 의미다. 데이터셋을 합친다는건가?
UPDATE는 보통 덮어 씌우는 개념이였던 것 같은데...
아무튼, 나중에 또 나올테니 천천히 보자.

DATA문이다.
우리가 기초적으로 돌렸던 구문들의 명령어가 뒤로 좌악 줄서서 기다리고 있다.
오오.. 은행에서 창구 기다릴때 짜증나지 않는가. 우리가 빨리 배워야 손님 들어온다.
힘껏 달려보자.

형식: DATA [SAS 데이터셋[(옵션들)]]
주의사항: 32자 내의 임의의 영문자 숫자 사용. 특수문자 사용 불가.

1. 전형적인 모습
DATA a1;
작업중에 WORK.a1이라는 이름의 WORK파일이 임시로 생성되며, SAS 종료시 사라진다.

2. DATA _NULL_ 의 형태
DATA _NULL_; SET a1;
대형 워크스테이션이나 공동 작업의 경우 WORK.** 파일이 수도 없이 생기는데, 이때 디스크 공간 부족으로 작업이 중지될 수 있단다. 그래서, WORK.**파일을 생성하지 않고 작업할때 저런 형식을 취한다.

3. 데이터셋 이름이 없는 경우
DATA ; SET a1;
SAS를 실행하는 동안 생겨나는 순서에 따라서 DATA1, DATA2,.... 이름의 SAS 데이터셋이 생성된다고 한다.

4. 데이터셋 이름을 여러 개 지정하는 경우
DATA a1 a2 a3;
저렇게 써도 된단다. 그대의 내공이 출중하다면...
예를 하나 보자면,
DATA b1 b2 b3; SET a1;
IF X=1 THEN OUTPUT b1;
ELSE IF X=2 THEN OUTPUT b2;
ELSE OUTPUT b3;
뭐 이렇게 쓰인단다.

5. 데이터셋 이름이 두 단어로 되는 경우
DATA kkk.a1;
kkk는 라이브러리를 나타내며, 이렇게 하면 SAS 종료 후에도 중간과정이 저장되어있어 다시금 실행할 수 있단다.

6. DATA 문의 응용
이 외에도 DROP, KEEP, LABEL, RENAME, TYPE가 있다.
DATA A1(KEEP X1): 변수 X1만 들어 있는 SAS 데이터셋을 만든다.
DATA A1(DROP X1): 변수 X1을 제거한 SAS 데이터셋을 만든다.

세세하게 신경쓰지말자. 그럼 진도도 못 나갈 뿐더러, 의욕조차 상실하게 되니까.
정말 핵심적으로 공격이 들어올 때, 방어기재를 발휘하면 된다.

CARDS 문과 INFILE 문
CARDS문은 외부 파일을 이용하지 않고 프로그램 내에 직접 입력하는 경우 사용하며,
INFILE문은 반대로 외부 파일을 이용하는 경우에 사용한다.
INFILE문에는 옵션을 사용할 수 있단다... 오옷 +_+!!
일전에 우리가 탭 때문에 자료 못 돌리던거 기억하는가?
일전이라고 무지 옛날이라고 느끼는 것 같은데, 오늘 공부 시작한지 3일째다. ㄱ-+
이렇게 탭을 인식하지 못하는 경우를 위한 옵션이 있다.
EXPANDTABS; 옵션 구문이 그것이다. 한글로 궂이 설명하자면 확장탭들..ㅡ0-
사용법은 다음과 같다.
DATA a1; INFILE "e:\sastest\sample.dat' EXPANDTABS;
이런 식으로 말이다.
진작 가르쳐주지.. 일일이 다 고치느라 아주 죽는 줄 알았.....다.....는.......
아무튼, 그리고 다른 옵션을 살펴보면,
경우에 따라서 어디서부터 어디 까지의 자료를 쓰고 싶은 경우가 있다.
6번째부터 100번째 자료만 이용하고 싶다면 어떻게 할 텐가?
자료 파일을 열어서 5번째 이전과 101번째 이후를 날리고 새 파일을 만들까?
뭐 아주 모르는 경우라면 그것도 나쁘지 않겠지만,
그보다 좋은 방법이 있다.
DATA a1; INFILE 'e:\sastest\sample.dat' FIRSTOBS=6 OBS=100;

OBS가 뭐의 약자일까.. Observation. 즉, 관측이란 뜻의 의미이다.
책에서도 관측치라고 설명하니까 많는 듯 싶다.

INPUT 문
INPUT문은 읽어 들이고자 하는 데이터 변수의 이름과 입력 형식을 나타내는 문장이다.

1. INPUT 문의 형식
DATA a1; INPUT [변수명과 입력형식];
이런 INPUT문은 4가지로 구분될 수 있다는데... 뭘까?

① 자유형식(FREE FORMAT) : 데이터가 1칸 또는 그 이상의 빈칸으로 분리되어 있는 경우 사용. 문자형 변수인 경우 변수명 다음에 $를 붙인다.
INPUT 변수명, [변수명 $];
이거 우리 많이 봤다. 예를 들어 한 번 써보면 기억이 날랑가..

DATA a1; INPUT sex $ weight height;
CARDS;
f 56.3 167
f 45.6 156
m 76.2 176

성별을 나타내는 sex변수는 문자열을 쓰겠다는 것이고 그 다음은 몸무게, 그다음은 키의 변수가 각각 등장한다.

② 변수의 위치를 지정하는 방법: 연속되어 입력된 경우, 변수가 입력된 위치를 지정한다.
예를 들어서 확인하는게 이해가 더 빠를 듯 싶다. 말만 읽으면 나도 뭔소린지 모른다 --;

DATA a1; INPUT sex $ 1 weight 3-6 height 8-10;
CARDS;
f 56.3 167
f 45.6 156
m 76.2 176

sex변수는 1열에, 몸무게는 3에서 6열, 키는 8에서 10열을 사용한다는 뜻이다.
아마도 1열에 1개의 문자, 숫자 혹은 기호가 들어가는게 아닌가 싶다.
참고로 2열과 7열은 공백으로 처리된다.

③ 변수가 차지하는 열의 크기를 지정하는 방법: 열의 위치를 지정하는게 아니라 크기만을 지정하는 방법이다. 이 방법의 경우 X1, X2, X와 같이 연속적인 변수명을 사용하는 경우에 상당히 편리하다고 한다.

DATA a1; INPUT (sex weight height) ($CHAR1. +1 4. +1 3.);
CARDS;
f 56.3 167
f 45.6 156
m 76.2 176

뭐냐 이건. 다행이도 설명이 적혀있다.
일단 ()안에 변수명을 기입한다. 두번째 괄호에 열의 크기가 들어가는데...
처음에는 문자 1칸($char-> character: 문자), 한칸띄고(+1), 4칸(weight의 값이겠지?), 한칸띄고, 3칸(height의 값인듯)의 의미란다.
우리가 확인할 수 있는 것은, 값을 의미하는 경우, 마지막이 '숫자.'으로 끝난다는 것이며, 공백은 +숫자로 처리된다는 것이다. 그리고 이 모든것은 ()괄호로 묶인다.

조금 업그레이드 된 것도 같지만 난해해진 구문도 있다.

DATA a1; INPUT (X1-X3)(2*3. 4.);

무슨 의미인지 감이 온다면, 코딩의 마인드가 있는 사람일 것이다...
일단 앞서와 마찬가지로 앞은 변수명이다. 조금 다르다면 -(하이픈)인데,
맞다. 변수는 3개고 이름이 X1, X2, X3라는 의미이다.
그런데 왜 뒤쪽에 값이 이상하냐.. *는 뭐냐? 의문이 들 것이다.
일단 값은 '숫자.'이다. 그런데 '숫자.'이 두개 뿐이다. 3.과 4.이 그것이다.
머리속에 전구가 반짝반짝 하는가? 그렇다 3. 3. 4. 이라는 뜻이다. 2*는 산술적 의미처럼 두개라는 뜻.
고로 3. 이 두 번 나와서 3. 3. 4. 의 의미가 되는 것이다. 다시 쓰면,

DATA a1; INPUT X1 1-3 X2 4-6 X3 7-10; 이다.

④ 변수의 시작열의 위치(포인터)를 지정하는 방법을 이용한다(@이용): @를 이용하여 변수가 시작하는 열을 지정한 후 해당 변수가 차지하는 크기를 지정하는 방법이다. 갑자기 C언어 배울때 난해했던 포인터 부분이 생각난다. (아니 이 녀석 C언어도 배웠단 말야!!!)라고 생각하시는 분 분명 계실줄로 알지만, 쓰지 않으면 지식이란 자꾸 사라지고 자꾸 쓰면 발전하는 것이다. 말하고픈 요점은, 잘 안쓰고 있다...있다.....있다.......

DATA a1; INPUT sex $ 1 @3 weight 4. @8 height 3.;

음. 이건 대충봐도 느낌이 팍! 온다. 나만 그런가?
변수 sex는 문자열 1열이고, 3열을 시작으로 weight 변수는 4열을 쓴다. 즉 3~6열.
그리고 마지막으로 8열을 시작으로 height 변수는 3열을 쓴다. 즉, 8~10열.
2열 7열은 안쓰이니 공란임에 틀림없다.

이렇게 크게 4가지 방법으로 많이 쓰인다고 한다.

그럼 이거 말고 더 있단 말야? 그래 있다. 나도 모르는 무언가가 있다.
안그래도 기타 형식을 알려주려고 한다. 아니, 같이 배워나가는 것일까.

1) 소숫점이 있는 데이터를 읽는 법

DATA a1; INPUT sex $ 1 weight 3-6 time 8-10 .1;
CARDS;
f 56.3 167
f 45.6 156
m 76.2 176

여기서 우리는 추론할 수 있다. '.' 점의 의미에 대해서 말이다.
우리가 앞서 본 4. 이런것이 열을 나타낸다고 생각했다. 맞는 말인데, 정확히 말하면 값의 출력 양식과도 연관이 되는 것이였구나! 왜냐면, 소수점 표기를 봐라. '.1' 이건 소숫점 1자리로 나타내겠다는 의미의 반증이 아니겠는가. 실제 인풋 데이터를 확인하면 이해할 수 있을 것이다.
뭐? 근데 왜 167이냐고? 나도 쓰고 아닌가 생각했다. 그런데 책에 친절하게 씌여있다.
167은 16.7초임을 표시.
이걸로 되었을까? 의문점이?
쓰기에 따라서는 차라리 앞에처럼 소숫점으로 표기하는게 이해하는데 편할지도 모른다는 생각이 든다.
그럼 3.1 이라고 쓰면 무슨 의미일까?
3열로 표기하고, 소숫점 1자리의 의미로 이해하라 라는 뜻이된다.

2) 데이터가 2행 이상에 걸쳐서 입력되어 있는 경우
SAS의 입력기 창은 오른쪽으로 무한정 가지 않는다. 심지어 메모장도 영원할 것 같은데 끝이 나오더라.
그렇다면 변수가 넘어가버리면, 어쩌지?
생각해보라. 이건 심각한 문제를 만들수도 있다.
1 2 3 4 5 6 7 8 9 10 이런 값을 넣고 싶다고 치자. 물론 변수는 10개고 값이 각각 1개씩이다.
근데 줄이 모잘라서 절반만 넘어갔다.
1 2 3 4 5
6 7 8 9 10
그럼 변수는 어찌 인식할까. 나도 정확히 모르겠다. 왜냐면 6~10번째 변수부분이 없는 값에 대해 오류를 말할지 MISSING 처리할지 모르니까.
아무튼 아래 6 7 8 9 10이 1~5번째 변수의 두번째 값으로 등록되게 될 것이다.
우리가 원하는 것은 그게 아닌디...
이럴때를 위한 것이 있단다. 역시 사람의 경험은 싸이고 싸여 문제 해결을 위한 열쇠를 늘 제공하는 법이다.

DATA a1; INPUT (x1-x3) (3*2.) #2 (y1-y4) (4*6.);

a1 데이터셋이다. x1 x2 x3 변수는 각각 2열씩을 할당받는다.
2행에(#2)있는 CARDS는 y1 y2 y3 y4 변수이며 각각 6열씩 할당받는다.
이런 의미이다. 즉, 2행씩 값을 인식하고 처리하는 것이다.

또 다른 방법이다. 행이 너무나 많은 데이터라면, 각각의 행을 일일이 써주기 귀찮지 않은가. 그래서 등장했다.

DATA a1; INPUT x1 1-2 x2 3-4 x3 5-6 / y1 1-6 y2 7-12 y3 13-18 y4 19-24;
'/'가 다음 행임을 알려주는 것이다.

3) 2개 이상의 데이터를 1줄에 입력하는 경우
자유 형식의 데이터인 경우 @@를 입력하면 된다. @@는 우리가 일전에 봤다. 값을 한 줄로 주욱 때려박을때 썼던 그...것 아닌가.

DATA a1; INPUT x1 x2 x3 x4 @@; CARDS;
1 2 3 4 5 6 7 8 9 10
11 12 13 14

이는 다음과 같이 사용한 경우와 같다.

DATA a1; INPUT x1 x2 x3 x4; CARDS;
1 2 3 4
5 6 7 8
9 10 11 12
13 14

귀찮으면 편할 것 같기는 한데, 내 생각은 그렇다. 사람이 한번에 알아볼 수 없는 코딩 때문에,
배울려는 사람들이 어려움을 느끼는 건 아닐지 하고 말이다.
아래처럼 써주면 대충 감이라도 잡을텐데, 위처럼 써 놓으면...ㄱ-;
뭐 효율성의 문제니까... 넋두리당.

4) 입력변수의 갯수가 많아 변수명과 그 입력형식을 한 줄에 전부 적을 수 없을때.
참.. 점점 극으로 몰고가는 분위기이다.
하지만, 답변은 간단하다. ';' 안쓰면 두줄이건 세줄이건 한줄로 쓰는 거랑 같다. 고로....

DATA a1; INPUT (x1 x2 x3 x4)
(3. +1 3. +1 $CHAR2. +2 2.); 는

DATA a1; INPUT (x1 x2 x3 x4) (3. +1 3. +1 $CHAR2. +2 2.); 와 같다.

자 그럼 8가지 INPUT 예문을 해석해보자. 이것만 안다면 일상 업무의 95%는 문제 없단다.
(1개 틀릴때마다.. 12%씩 일상 업무의 지장을 초래하게 되는건가...ㄱ-)

① DATA A1; INPUT X1 X2 X3 $ X4;
=> A1 데이터셋; 변수는 X1에서 X4까지이며, X3은 문자열이다. 특별히 숫자가 없으므로 빈칸으로 각각의 값을 구분한다.(사실 숫자 없어서 '이거뭐야!!'하고 흠칫했다.. 이러면서 배우는거지..음핫핫)

② DATA A1; INPUT X1 1-3 X2 5-7 X3 $ 9-10 X4 13-14;
=> A1 데이터셋. 계속 A1이니 안써도 이해하시길. X1변수는 1-3열, 4열 공백, X2는 5-7열, 8열 공백, X3 문자열 변수 9-10열, 11-12열 공백, X4 변수 13-14열.

③ DATA A1; INPUT (X1 X2 X3 X4) (3. +1 3. +1 $CHAR2. +2 2.);
=> 변수는 X1~X4까지 4개. X1은 3열 사용, 공백 1칸, X2 3열 사용, 공백 1칸, X3 문자열 2열사용, 공백 2칸, X4 2열사용.

④ DATA A1; INPUT X1 X2 X3 $ X4 @@;
=> X1~X4까지 4개의 변수며 X3은 문자열 변수이다. 자료값이 1자로 주욱 들어가는데 공백을 텀으로 해서 4개씩 끊어서 값을 받아들이면 된다.

⑤ DATA A1; INPUT X1 X2 / X3 X4;
=> 변수는 X1~X4까지 4가지이며, 1행 1,2열 값은 X1 X2의 값이고, 2행 1,2열 값은 X3, X4의 값으로 2행씩 값을 받아들인다.

⑥ DATA A1; INPUT (X1 X2) (3. +1 3.) #2 (X3 X4) (+1 $CHAR2. +2 2.);
=> X1 3열, 1열 공백, X2 3열이고, 2행에 일단 공백 1번 나오고 X3 문자열 2열이고, 공백 2열 후 X4 2열이다.

⑦ DATA A1; INPUT (X1-X3) (2*2. +2 4.);
=> X1변수는 2열 사용 바로 붙여 X2변수가 2열 사용. 2열 공백. X3변수가 4열 사용.

⑧ DATA A1; INPUT @26 X1 1-3;
=> 26열부터 X1변수가 3열을 사용한다. 즉, 26, 27, 28열.

알겠는가? 저거 다 맞느냐고? 모르겠다. 같이 공부했으니 서로 틀린 것은 알지 않는가.
혹 내가 틀렸다면, 답글 달아주기를 바란다. 물론, 누가 이걸 보고 공부할지는 의문이겠지만...
같이 공부하면 좋은것 아니겠는가 음핫핫핫..
(모니터를 바라보며 혼자 이거 치면서 있는지 없는지도 모르는 사람을 향해 끄적거리는 것은 어찌보면 참 불쌍한 일이다... 게다가 아까 네이버에 SAS OBS 라고 검색했더니, SAS 독학모드 1이 검색되었다. 그저께 썼는데!! 두려워진다..)

자 이런 저런 넋두리를 뒤로하고 이제 외부 파일을 가져오고, 외부파일에 저장하는 장이 남았다.
책에서 이미지로 캡쳐되어 있는지라 좀 설명하기 그렇다. 그래도 할 수 있는 것은 아래 쓰도록 하겠다.

외부 파일 이용법 - INFILE문
이건 앞에서도 살짝 해봤다. 기억나는지 볼까?

DATA a1; INFILE 'e:\sastest\sample.dat';

기억나는가? 우리 탭으로 작성해서 프로그램 못 돌릴뻔한거 있지 않은가.
sample.dat 파일에 값을 가져와서 연산을 수행할 수 있는 것이다.
일단 간단하게 작성해서 사용해보자.
메모장을 열고 입력한다
1 2
3 4
그리고 저장해라. 저장이름은 sample1.dat이다.
♥♥♥♥♥
data a1; infile 'e:\sastest\sample1.dat';                                                                                               input x y;                                                                                                                             
x2 = x**2+y;                                                                                                                           
lx = LOG(x);                                                                                                                           
proc print; var x y x2 lx;                                                                                                             
run;
♥♥♥♥♥
                                                        SAS 시스템            2007년 02월 17일 토요일 오후 04시50분27초   9

                                              OBS    x    y    x2       lx

                                               1     1    2     3    0.00000
                                               2     3    4    13    1.09861
♥♥♥♥♥
이렇게 출력된다. 값은 우리가 메모장으로 저장했던 값이 x y 변수에 들어있고, x2와 lx에 연산이 발생한 것을 볼 수 있다.

엑셀에서 가져오는 법도 나온다.
윈도우로 하는 것은 그렇다치고, 명령어로는 이렇게 된다.
개인적으로 오피스 2007을 사용중이라 책에서 말하는 엑셀2000이 없어서 결과값이 어찌될지 모른다.
고로, 책의 내용만 설명하도록 하겠다.

PROC IMPORT OUT=WORK.Aaa   .... WORK.Aaa 데이터셋을 만들겠다.
DATAFILE = "E:\sastest\sample.xls"  <- 쌍따옴표를 쓰는것과 ';'이 없음을 주의
DBMS = EXCEL2000 REPLACE;   ....엑셀 파일을 사용했다.
GETNAMES=NO; ....1행에 변수명이 없다. 보통 맨 위에 이름, 나이, ... 이런식으로 이름 붙이는 엑셀파일 많은데 가져올 파일은 그냥 데이터만 있다는 뜻이다.

FILE문과 PUT문
작업의 최종결과 또는 중간결과 데이터를 저장하는 방법이다.
우리가 아까전에 알아본 것과는 반대되는 내용이라고나 할까.
힘들다고 느낀다면 좋은 소식을 던져주겠다.
책 4장 남았다!!! 우오옹!! 좀 만 더 힘내자. 난 손까지 아프다. ㅠ_ㅠ

책 초반부에 떡하니 써 있는 한 마디.
기억해야 할 점은 "SAS 데이터셋을 외부 파일로 저장한다."는 것이다.
....기억하자.
FILE문과 PUT문은 INFILE과 INPUT문에서 IN만 뺀 것이란다. 이게 도움이 될련지 모르겠지만 음핫핫
아무튼 예시를 보자.

♥♥♥♥♥
DATA a1; INPUT x y;                                                                                                                     
CARDS;                                                                                                                                 
1 2                                                                                                                                    
3 4                                                                                                                                    
;                                                                                                                                      
DATA b1; SET a1;                                                                                                                       
xy = x + y;                                                                                                                            
FILE 'e:\sastest\kkk.dat';                                                                                                             
PUT (x y xy) (2. 3. 5.2);                                                                                                              
RUN;
♥♥♥♥♥
저장된 파일을 열어봤다. (e:\sastest\kkk.dat에 생성되었으며 메모장으로 열은 결과다)
 1  2 3.00
 3  4 7.00
음 잘 되는 것을 알 수 있다. 그것참 신기하네..

FILE문에는 파일이름, LOG, PRINT 등을 지저알 수 있으며, 자세한 건 SAS 메뉴얼을 참조하란다.
PUT문은 FILE문이 없으면 SAS log에 기록되며, 저장될때의 자리등을 지정해준다고 보면 되겠다.

자 마지막이 눈앞이다!!!

시스템 파일로 보관하기
이거 우리가 살짝 해봤다. 단지 적용된 것들을 보지 못해서 아리송할뿐...
♥♥♥♥♥
LIBNAME kkk 'e:\sastest';                                                                                                              
DATA a1; INPUT x y;                                                                                                                    
CARDS;                                                                                                                                 
1 2                                                                                                                                    
3 4                                                                                                                                    
;                                                                                                                                      
DATA kkk.b1; SET a1;                                                                                                                   
xy = x+y;                                                                                                                              
PROC PRINT; VAR x y xy;                                                                                                                
RUN;
♥♥♥♥♥
                                                        SAS 시스템            2007년 02월 17일 토요일 오후 04시50분27초  10

                                                    OBS    x    y    xy

                                                     1     1    2     3
                                                     2     3    4     7
♥♥♥♥♥
활성 라이브러리에 Kkk라는 폴더와 그 안에 B1이라는 데이터셋이 만들어진 것을 확인할 수 있었다.
여기서 LIBNAME이 없으면 시스템 파일이 보관이 안된다(PC-SAS해당)

엑셀로 보관을 하는 방법도 알아봐야겠지?
윈도우로 하는 것은 나도 설명하지 않겠다. 왜냐면 오피스 2007때문에 완존히...ㄱ-
시스템을 무조건 최상으로 맞추는 것이 항상 좋은 것만은 아니다.

PROC EXPORT DATA=WORK.A1
OUTFILE = "E:\sastest\out.xls"
DBMS=EXCEL2000 REPLACE;
RUN;

이러면 결과값이 E:\sastest\out.xls 라는 이름으로 엑셀파일 저장될 것이다.
해보지를 않아서 결과값은 패스.
해 볼 수 없는 거니까 너무 아쉬워하지말고, 오피스 2000을 쓰고 있다면 하고 나에게 결과 좀 알려줬음 한다.
(나도 궁금하다. 배우는 입장인데..)

아, 한 단원 공부하는데 10시간도 넘게 걸린다. 살인적이다.
7과는 또 어찌해...ㅡㅠㅡ;
뭐 독학의 당위성이랄까... 아무튼 오늘도 즐잠. 내일은 차례지내야지 음핫핫핫;

by Sungjo Park Joe & Soohy 2007.02.17 14:56
SAS

아 실론티 한 모금 마시고... 5장으로 고고.
(도서관 음료수 왜 이렇게 비싼거야!!!)

책을 볼까.. 통계학이란 자료를 수집하고, 정리하고, 분석할 뿐만 아니라 그 분석을..토대로 합리적인 의사결정을 할 수 있도록 하는 과학적인....방법이다.
휙~....zzZ..

확실한 문제정의와 확인과 가설과 자료가...필요...

즉!, 문제정의 및 확인 > 가설 > 자료 > 통계기법 적용 > 결과
이런 메커니즘이라는 것이다.

통계는 다른 무엇보다 정확을 요구한다. 결과가 달라지면 해석이 달라지기 때문이다.
그러니까 항상, 다시보는 습관을 가지도록 하장.

일단 부록부터 해보라고 써있다. 통계적인 지식이 없어도 분석하라고 한다. -ㅠㅡ ...시키면 해야지 별 수 있나. 일단 설문지의 내용을 보자.

Ⅰ. 다음은 응답자 본인의 개인적 사항에 대하여 묻습니다. 해당란에 ○표하여 주십시오.

 1. 귀하의 성멸은?
 ① 남자 ( ) ② 여자 ( )

 2. 결혼 여부는?
 ① 미혼 ( ) ② 기혼 ( )

 3. 귀하의 연령은? (   )세

 4. 귀하의 학력은?
 ① 국졸이하 ( )  ② 중졸 또는 중퇴 ( )
 ③ 고졸 또는 고퇴 ( ) ④ 전문대졸 ( )
 ⑤ 대졸 또는 대퇴 ( )

 5. 귀하의 근무경력은?
 ① 1년 이하  ② 1년 이상 ~ 3년 미만
 ③ 3년 이상 ~ 5년 미만 ④ 5년 이상

Ⅱ. 다음은 귀하께서 직장생활을 하면서 평소 느끼고 계시는 사항에 관한 것입니다. 다음의 항목중에서 귀하의 생각과 일치하는 번호에 ( )표하여 주십시오.

 1. 귀하는 지금의 회사에서 근무하는 데 보람과 긍지를 느끼고 있습니까?
 ① 매우 그렇지 않다. ② 그렇지 않다.
 ③ 그저 그렇다.  ④ 그렇다.
 ⑤ 매우 그렇다.

 2. 귀하의 임금보수체계에 만족하십니까?
 ① 매우 그렇지 않다. ② 그렇지 않다.
 ③ 그저 그렇다.  ④ 그렇다.
 ⑤ 매우 그렇다.
 
 3. 귀하의 월 평균 급여약은 얼마나 됩니까? _______만원

Ⅲ. 다음은 여가활동에 관한 사항입니다.

 1. 귀하는 여가를 어떻게 보내고 있습니까?
 ① 독서  ② 스포츠 ③ 영화감상 ④ 낚시
 ⑤ 등산  ⑥ 음악감상 ⑦ 여행  ⑧ 기타 (______)

이 설문지에 대한 자료의 값은 다음과 같다.

M 1 18 2 1 4 5 82 1
F 1 20 3 1 4 5 43 2
F 1 22 3 2 4 4 45 3
F 1 24 3 3 1 2 49 5
F 1 26 5 4 3 3 51 5
F 2 24 3 1 5 5 44 2
F 2 11 3 2 3 5 46 5
F 2 28 4 3 4 4 52 6
F 2 30 5 4 2 2 62 1
M 2 32 4 4 3 3 60 3
M 0 24 5 1 5 5 47 1
M 1 26 3 1 5 5 51 3
M 1 28 3 2 3 4 55 8
M 1 30 5 2 2 2 57 3
M 1 32 5 3 3 3 64 2
M 2 24 3 2 4 5 43 9
M 2 30 3 3 5 5 48 5
M 2 36 3 4 4 4 56 4
M 2 42 5 4 1 2 78 2
M 2 48 4 4 3 3 79 4
F 1 19 2 1 5 5 42 3
F 1 21 3 2 3 4 45 7
F 1 23 3 3 2 3 47 5
F 1 25 4 3 2 2 50 1
F 1 27 5 4 4 5 52 5
F 2 25 3 2 4 5 45 1
F 2 27 3 3 5 4 47 6
F 2 29 4 4 2 3 54 6
F 2 31 5 4 1 2 62 1
F 2 33 4 4 4 5 61 1
M 1 25 3 1 4 5 49 2
M 1 27 3 2 4 4 53 4
M 3 29 3 2 3 3 57 1
M 1 31 5 2 1 2 57 9
M 1 33 4 3 5 5 63 3
M 2 27 3 2 3 5 47 4
M 2 33 3 3 4 4 52 1
M 2 39 5 4 3 3 71 4
M 2 45 5 4 1 2 82 3
M 2 51 3 4 2 3 93 5

치느라고 죽는 줄 알았네.. 인터넷이 안되섬;; 다운을...쿨럭;

설문지 코딩의 내용이다.

코딩위치 변수명  내용
1  SEX  M 남자   F 여자   9 무응답
3  MAR  1 미혼   2 기혼   9 무응답
5-6  AGE  2자리 수(만 나이) 99 무응답
8  EDU  1 국졸이하   2 중졸 또는 중퇴   3 고졸 또는 고퇴   4 전문대졸   5 대졸 또는 대퇴   9 무응답
10  HIS  근무 경력   9 무응답
12  WORK  근무 만족도   9 무응답
14  PAY  보수 만족도   9 무응답
16-18  MONEY  월평균 급여액(단위: 만 원)   99 무응답
20  HOB  1 독서   2 스포츠   3 영화감상   4 낚시   5 등산   6 음악감상   7 여행   8 기타   9 무응답

☞ 조사된 설문지를 전산처리하기 위해서는 우선 코딩과정을 거쳐야 한다.
이때 이에 대한 지침서를 마련하면 전산처리, 업무협의, 그리고 전산처리 후 파일 정리에 편리하다.

이산적인(DISCRETE: 따로따로 분리된) 변수의 경우에는 빈도수를 구한다(PROC FREQ; 를 이용)
연속적인(CONTINUOUS) 변수는 최대, 최소값을 구하여 (PROC MEANS; 를 이용) 범위에 벗어나는지를 체크한다.

/* 데이터 오류 체크 실습 프로그램 */                                                                                                   
♥♥♥♥♥                                                                                                                                       
data a1; infile 'e:\sastest\sample.dat';                                                                                               
input sex $ mar age edu his work pay money hob @@;                                                                                     
proc freq; tables sex mar edu his work pay hob;                                                                                        
proc means; var age money;                                                                                                             
run;                                                                                                                                   
♥♥♥♥♥
그런데 결과값이 안나온다. dat파일이 저장이 잘못되서 그런가..
아무튼 연산을 고쳐서 다 입력되도록 바꿔봤다..
♥♥♥♥♥
data a1;                                                                                                                               
input sex $ mar age edu his work pay money hob @@;                                                                                     
cards;                                                                                                                                 
M      1      18      2      1      4      5      82      1                                                                            
F      1      20      3      1      4      5      43      2                                                                            
F      1      22      3      2      4      4      45      3                                                                            
F      1      24      3      3      1      2      49      5                                                                            
F      1      26      5      4      3      3      51      5                                                                            
F      2      24      3      1      5      5      44      2                                                                            
F      2      11      3      2      3      5      46      5                                                                            
F      2      28      4      3      4      4      52      6                                                                            
F      2      30      5      4      2      2      62      1                                                                            
M      2      32      4      4      3      3      60      3                                                                            
M      0      24      5      1      5      5      47      1                                                                            
M      1      26      3      1      5      5      51      3                                                                            
M      1      28      3      2      3      4      55      8                                                                            
M      1      30      5      2      2      2      57      3                                                                            
M      1      32      5      3      3      3      64      2                                                                            
M      2      24      3      2      4      5      43      9                                                                            
M      2      30      3      3      5      5      48      5                                                                            
M      2      36      3      4      4      4      56      4                                                                            
M      2      42      5      4      1      2      78      2                                                                            
M      2      48      4      4      3      3      79      4                                                                            
F      1      19      2      1      5      5      42      3                                                                            
F      1      21      3      2      3      4      45      7                                                                            
F      1      23      3      3      2      3      47      5                                                                            
F      1      25      4      3      2      2      50      1                                                                            
F      1      27      5      4      4      5      52      5                                                                            
F      2      25      3      2      4      5      45      1                                                                            
F      2      27      3      3      5      4      47      6                                                                            
F      2      29      4      4      2      3      54      6                                                                            
F      2      31      5      4      1      2      62      1                                                                            
F      2      33      4      4      4      5      61      1                                                                            
M      1      25      3      1      4      5      49      2                                                                            
M      1      27      3      2      4      4      53      4                                                                            
M      3      29      3      2      3      3      57      1                                                                            
M      1      31      5      2      1      2      57      9                                                                            
M      1      33      4      3      5      5      63      3                                                                            
M      2      27      3      2      3      5      47      4                                                                            
M      2      33      3      3      4      4      52      1                                                                            
M      2      39      5      4      3      3      71      4                                                                            
M      2      45      5      4      1      2      82      3                                                                            
M      2      51      3      4      2      3      93      5                                                                            
;                                                                                                                                      
proc freq; tables sex mar edu his work pay hob;                                                                                        
proc means; var age money;                                                                                                             
run;                                                                                                                                   
♥♥♥♥♥
                                                        SAS 시스템            2007년 02월 16일 금요일 오후 04시28분31초   1

                                                       FREQ 프로시저

                                                                     누적       누적
                                      sex      빈도      백분율      빈도      백분율
                                      -----------------------------------------------
                                      F            18     45.00          18     45.00
                                      M            22     55.00          40    100.00


                                                                     누적       누적
                                      mar      빈도      백분율      빈도      백분율
                                      -----------------------------------------------
                                        0           1      2.50           1      2.50
                                        1          18     45.00          19     47.50
                                        2          20     50.00          39     97.50
                                        3           1      2.50          40    100.00


                                                                     누적       누적
                                      edu      빈도      백분율      빈도      백분율
                                      -----------------------------------------------
                                        2           2      5.00           2      5.00
                                        3          20     50.00          22     55.00
                                        4           7     17.50          29     72.50
                                        5          11     27.50          40    100.00


                                                                     누적       누적
                                      his      빈도      백분율      빈도      백분율
                                      -----------------------------------------------
                                        1           7     17.50           7     17.50
                                        2          11     27.50          18     45.00
                                        3           9     22.50          27     67.50
                                        4          13     32.50          40    100.00


                                                                     누적       누적
                                     work      빈도      백분율      빈도      백분율
                                     ------------------------------------------------
                                        1           5     12.50           5     12.50
                                        2           6     15.00          11     27.50
                                        3          10     25.00          21     52.50
                                        4          12     30.00          33     82.50
                                        5           7     17.50          40    100.00


                                                                     누적       누적
                                      pay      빈도      백분율      빈도      백분율
                                      -----------------------------------------------
                                        2           8     20.00           8     20.00
                                        3           9     22.50          17     42.50
                                        4           8     20.00          25     62.50
                                        5          15     37.50          40    100.00



                                                        SAS 시스템            2007년 02월 16일 금요일 오후 04시28분31초   2

                                                       FREQ 프로시저

                                                                     누적       누적
                                      hob      빈도      백분율      빈도      백분율
                                      -----------------------------------------------
                                        1           9     22.50           9     22.50
                                        2           5     12.50          14     35.00
                                        3           7     17.50          21     52.50
                                        4           5     12.50          26     65.00
                                        5           7     17.50          33     82.50
                                        6           3      7.50          36     90.00
                                        7           1      2.50          37     92.50
                                        8           1      2.50          38     95.00
                                        9           2      5.00          40    100.00

                                                        SAS 시스템            2007년 02월 16일 금요일 오후 04시28분31초   3

                                                      MEANS 프로시저

                        변수      N          평균값        표준편차          최소값          최대값
                        ---------------------------------------------------------------------------
                        age      40      28.8750000       7.9330128      11.0000000      51.0000000
                        money    40      56.0250000      12.3651444      42.0000000      93.0000000
                        ---------------------------------------------------------------------------
♥♥♥♥♥
각각의 값에 대한 처리상황을 보여준다. 이게 무슨 의미가 있습니까? 하고 묻는 사람이 있다면, 설문지와 결과를 비교해보기 바란다.
일단 다 봤다는 전제하에 보자면,
mar 부분을 보면 0 1 2 3. 4가지로 나눠서 설명된다. mar는 marrage의 약어로써 결혼 여부를 묻는 항목이다.
1은 미혼, 2는 기혼이다. 그럼 0과 3은 뭐지? 그 의문이 오류를 찾았다는 신호다. 일일이 확인하려면 힘드니까 말이다.
또 다른 것을 보자.
hob 부분을 보면 1~9까지 있다. 설문지에서 취미를 묻는 항목인데, 8이 기타이다. 그럼 9는? 정답. 무응답이다.
자료상에서 무응답을 9로 하기로 하고, 입력을 9로 했기에 이런 결과값이 나올 수 있었다.
마지막으로 age를 보자.
총 40명, 평균 28세, 편차는 7.93, 근데 최소값이 11? 최소값이 11이라는 것은, 가장 어린 나이가 11세라는 것이다.
11세에 직장을 다니다니 대단한 아이분(?)이시다.
상식적으로 말이 안되는 내용을 찾아낼 수 있다.

이제 이런 결과들을 어떻게 수정하는가? 책에서는 3가지 방법을 제시한다.
1. 잘못 답변한 관측치 자체를 없애는 방법: 비추. 자료의 수가 많다면 지장이 없지만, 통계에서 자료를 없애는 것은 큰 손실이다.
2. missing 처리 하는 방법: 답이 불분명하거나 또는 조사된 표본수가 많아서 무시해도 별 영향이 없는 경우 missing 처리 한다.
3. 원 설문지를 찾아서 수정하는 방법: 자료가 작으면 상관없지만 많으면 난감해진다. SAS는 코드로 위치를 찾을 수 있게 해준다.

<1번 처리 찾는 방법>
♥♥♥♥♥
data a1;                                                                                                                               
input sex $ mar age edu his work pay money hob @@;                                                                                     
cards;                                                                                                                                 
M      1      18      2      1      4      5      82      1                                                                            
F      1      20      3      1      4      5      43      2                                                                            
F      1      22      3      2      4      4      45      3                                                                            
F      1      24      3      3      1      2      49      5                                                                            
F      1      26      5      4      3      3      51      5                                                                            
F      2      24      3      1      5      5      44      2                                                                            
F      2      11      3      2      3      5      46      5                                                                            
F      2      28      4      3      4      4      52      6                                                                            
F      2      30      5      4      2      2      62      1                                                                            
M      2      32      4      4      3      3      60      3                                                                            
M      0      24      5      1      5      5      47      1                                                                            
M      1      26      3      1      5      5      51      3                                                                            
M      1      28      3      2      3      4      55      8                                                                            
M      1      30      5      2      2      2      57      3                                                                            
M      1      32      5      3      3      3      64      2                                                                            
M      2      24      3      2      4      5      43      9                                                                            
M      2      30      3      3      5      5      48      5                                                                            
M      2      36      3      4      4      4      56      4                                                                            
M      2      42      5      4      1      2      78      2                                                                            
M      2      48      4      4      3      3      79      4                                                                            
F      1      19      2      1      5      5      42      3                                                                            
F      1      21      3      2      3      4      45      7                                                                            
F      1      23      3      3      2      3      47      5                                                                            
F      1      25      4      3      2      2      50      1                                                                            
F      1      27      5      4      4      5      52      5                                                                            
F      2      25      3      2      4      5      45      1                                                                            
F      2      27      3      3      5      4      47      6                                                                            
F      2      29      4      4      2      3      54      6                                                                            
F      2      31      5      4      1      2      62      1                                                                            
F      2      33      4      4      4      5      61      1                                                                            
M      1      25      3      1      4      5      49      2                                                                            
M      1      27      3      2      4      4      53      4                                                                            
M      3      29      3      2      3      3      57      1                                                                            
M      1      31      5      2      1      2      57      9                                                                            
M      1      33      4      3      5      5      63      3                                                                            
M      2      27      3      2      3      5      47      4                                                                            
M      2      33      3      3      4      4      52      1                                                                            
M      2      39      5      4      3      3      71      4                                                                            
M      2      45      5      4      1      2      82      3                                                                            
M      2      51      3      4      2      3      93      5                                                                            
;                                                                                                                                      
seq=_N_;                                                                                                                               
if mar=0 or mar=3 then delete;                                                                                                         
if hop=b or age<13 then delete;                                                                                                        
proc print; var mar age;                                                                                                               
run;                                                                                                                                   
♥♥♥♥♥
delete 명령어가 삭제시키는 것 같고, seq는 몇번째 줄의 데이터인지를 알려준다.

<2번 missing 처리하는 방법>
♥♥♥♥♥
data a1;                                                                                                                               
input sex $ mar age edu his work pay money hob @@;                                                                                     
cards;                                                                                                                                 
M      1      18      2      1      4      5      82      1                                                                            
F      1      20      3      1      4      5      43      2                                                                            
F      1      22      3      2      4      4      45      3                                                                            
F      1      24      3      3      1      2      49      5                                                                            
F      1      26      5      4      3      3      51      5                                                                            
F      2      24      3      1      5      5      44      2                                                                            
F      2      11      3      2      3      5      46      5                                                                            
F      2      28      4      3      4      4      52      6                                                                            
F      2      30      5      4      2      2      62      1                                                                            
M      2      32      4      4      3      3      60      3                                                                            
M      0      24      5      1      5      5      47      1                                                                            
M      1      26      3      1      5      5      51      3                                                                            
M      1      28      3      2      3      4      55      8                                                                            
M      1      30      5      2      2      2      57      3                                                                            
M      1      32      5      3      3      3      64      2                                                                            
M      2      24      3      2      4      5      43      9                                                                            
M      2      30      3      3      5      5      48      5                                                                            
M      2      36      3      4      4      4      56      4                                                                            
M      2      42      5      4      1      2      78      2                                                                            
M      2      48      4      4      3      3      79      4                                                                            
F      1      19      2      1      5      5      42      3                                                                            
F      1      21      3      2      3      4      45      7                                                                            
F      1      23      3      3      2      3      47      5                                                                            
F      1      25      4      3      2      2      50      1                                                                            
F      1      27      5      4      4      5      52      5                                                                            
F      2      25      3      2      4      5      45      1                                                                            
F      2      27      3      3      5      4      47      6                                                                            
F      2      29      4      4      2      3      54      6                                                                            
F      2      31      5      4      1      2      62      1                                                                            
F      2      33      4      4      4      5      61      1                                                                            
M      1      25      3      1      4      5      49      2                                                                            
M      1      27      3      2      4      4      53      4                                                                            
M      3      29      3      2      3      3      57      1                                                                            
M      1      31      5      2      1      2      57      9                                                                            
M      1      33      4      3      5      5      63      3                                                                            
M      2      27      3      2      3      5      47      4                                                                            
M      2      33      3      3      4      4      52      1                                                                            
M      2      39      5      4      3      3      71      4                                                                            
M      2      45      5      4      1      2      82      3                                                                            
M      2      51      3      4      2      3      93      5                                                                            
;                                                                                                                                      
if mar=0 or mar=3 then mar=.;                                                                                                         
if hob=9 then hob=.;                                                                                                        
if age=11 then age=.;                                                                                                                
run;
♥♥♥♥♥
만약 이런 값이 있으면 .(무시) 처리 해라.

<3. 원 설문지를 찾아서 수정하는 방법>
♥♥♥♥♥
data a1;                                                                                                                               
input sex $ mar age edu his work pay money hob @@;                                                                                     
cards;                                                                                                                                 
M      1      18      2      1      4      5      82      1                                                                            
F      1      20      3      1      4      5      43      2                                                                            
F      1      22      3      2      4      4      45      3                                                                            
F      1      24      3      3      1      2      49      5                                                                            
F      1      26      5      4      3      3      51      5                                                                            
F      2      24      3      1      5      5      44      2                                                                            
F      2      11      3      2      3      5      46      5                                                                            
F      2      28      4      3      4      4      52      6                                                                            
F      2      30      5      4      2      2      62      1                                                                            
M      2      32      4      4      3      3      60      3                                                                            
M      0      24      5      1      5      5      47      1                                                                            
M      1      26      3      1      5      5      51      3                                                                            
M      1      28      3      2      3      4      55      8                                                                            
M      1      30      5      2      2      2      57      3                                                                            
M      1      32      5      3      3      3      64      2                                                                            
M      2      24      3      2      4      5      43      9                                                                            
M      2      30      3      3      5      5      48      5                                                                            
M      2      36      3      4      4      4      56      4                                                                            
M      2      42      5      4      1      2      78      2                                                                            
M      2      48      4      4      3      3      79      4                                                                            
F      1      19      2      1      5      5      42      3                                                                            
F      1      21      3      2      3      4      45      7                                                                            
F      1      23      3      3      2      3      47      5                                                                            
F      1      25      4      3      2      2      50      1                                                                            
F      1      27      5      4      4      5      52      5                                                                            
F      2      25      3      2      4      5      45      1                                                                            
F      2      27      3      3      5      4      47      6                                                                            
F      2      29      4      4      2      3      54      6                                                                            
F      2      31      5      4      1      2      62      1                                                                            
F      2      33      4      4      4      5      61      1                                                                            
M      1      25      3      1      4      5      49      2                                                                            
M      1      27      3      2      4      4      53      4                                                                            
M      3      29      3      2      3      3      57      1                                                                            
M      1      31      5      2      1      2      57      9                                                                            
M      1      33      4      3      5      5      63      3                                                                            
M      2      27      3      2      3      5      47      4                                                                            
M      2      33      3      3      4      4      52      1                                                                            
M      2      39      5      4      3      3      71      4                                                                            
M      2      45      5      4      1      2      82      3                                                                            
M      2      51      3      4      2      3      93      5                                                                            
;                                                                                                                                      
data b1; set a1;
if mar=0 or mar=3 or hob=9 or age=11;
proc print; var seq mar hob age;
run;
♥♥♥♥♥
or 붙은 것 봐라...ㄷㄷㄷㄷ
각각에 해당되는 값이 있으면 seq를 앞에 붙여줘서 찾을 수 있게 해달라는 것이다.

왜 결과값을 쓰지 않을까 궁금하게 생각하는 사람이 있을 것이다.
이유인 즉, 연산 결과가 안나온다. 책 내용으로는 뭔가 요로코롬한 결과가 나와야 되는데,
저로코롬한 결과도 안나온다.

아마도 파일에서 읽어야와 하는데, 탭으로 띈 연산을 읽지 못하는 것 같다.
그럼 한 번 탭을 스페이스로 다 바꿔볼까?
그래 밑져야 본전 해보자!!

음 된다.
♥♥♥♥♥
data a1; infile 'e:\sastest\sample.dat';                                                                                               
input sex $ mar age edu his work pay money hob @@;                                                                                     
proc freq; tables sex mar edu his work pay hob;                                                                                        
proc means; var age money;                                                                                                             
run;
♥♥♥♥♥
sample.dat는 메모장으로 이렇게 쳐서 넣고 저장을 sample.dat로 하면 된다.
메모장에 들어가는 내용은 다음과 같다.

M 1 18 2 1 4 5 82 1
F 1 20 3 1 4 5 43 2
F 1 22 3 2 4 4 45 3
F 1 24 3 3 1 2 49 5
F 1 26 5 4 3 3 51 5
F 2 24 3 1 5 5 44 2
F 2 11 3 2 3 5 46 5
F 2 28 4 3 4 4 52 6
F 2 30 5 4 2 2 62 1
M 2 32 4 4 3 3 60 3
M 0 24 5 1 5 5 47 1
M 1 26 3 1 5 5 51 3
M 1 28 3 2 3 4 55 8
M 1 30 5 2 2 2 57 3
M 1 32 5 3 3 3 64 2
M 2 24 3 2 4 5 43 9
M 2 30 3 3 5 5 48 5
M 2 36 3 4 4 4 56 4
M 2 42 5 4 1 2 78 2
M 2 48 4 4 3 3 79 4
F 1 19 2 1 5 5 42 3
F 1 21 3 2 3 4 45 7
F 1 23 3 3 2 3 47 5
F 1 25 4 3 2 2 50 1
F 1 27 5 4 4 5 52 5
F 2 25 3 2 4 5 45 1
F 2 27 3 3 5 4 47 6
F 2 29 4 4 2 3 54 6
F 2 31 5 4 1 2 62 1
F 2 33 4 4 4 5 61 1
M 1 25 3 1 4 5 49 2
M 1 27 3 2 4 4 53 4
M 3 29 3 2 3 3 57 1
M 1 31 5 2 1 2 57 9
M 1 33 4 3 5 5 63 3
M 2 27 3 2 3 5 47 4
M 2 33 3 3 4 4 52 1
M 2 39 5 4 3 3 71 4
M 2 45 5 4 1 2 82 3
M 2 51 3 4 2 3 93 5

탭을 인식 못하다니...ㄷㄷㄷ
아무튼, 이게 되었으니 아까 안되던것도 한 번 해볼 만 하겠는데?
자 해보잣!

♥♥♥♥♥
data a1; infile 'e:\sastest\sample.dat';                                                                                               
input sex $ mar age edu his work pay money hob @@;                                                                                     
seq=_N_;                                                                                                                               
if mar=0 or mar=3 then delete;                                                                                                         
if hob=9 or age<13 then delete;                                                                                                        
proc print; var mar age;                                                                                                               
run;
♥♥♥♥♥
                                                        SAS 시스템            2007년 02월 16일 금요일 오후 06시47분27초   4

                                                     OBS    mar    age

                                                       1     1      18
                                                       2     1      20
                                                       3     1      22
                                                       4     1      24
                                                       5     1      26
                                                       6     2      24
                                                       7     2      28
                                                       8     2      30
                                                       9     2      32
                                                      10     1      26
                                                      11     1      28
                                                      12     1      30
                                                      13     1      32
                                                      14     2      30
                                                      15     2      36
                                                      16     2      42
                                                      17     2      48
                                                      18     1      19
                                                      19     1      21
                                                      20     1      23
                                                      21     1      25
                                                      22     1      27
                                                      23     2      25
                                                      24     2      27
                                                      25     2      29
                                                      26     2      31
                                                      27     2      33
                                                      28     1      25
                                                      29     1      27
                                                      30     1      33
                                                      31     2      27
                                                      32     2      33
                                                      33     2      39
                                                      34     2      45
                                                      35     2      51
♥♥♥♥♥
40개의 자료가 35개로 줄은 것을 볼 수 있다.
눈물난다...ㅡㅜ 하지만 원본에 손상은 가지 않는 것 같다.


두번째는 missing이다.
♥♥♥♥♥
data a1; infile 'e:\sastest\sample.dat';                                                                                               
input sex $ mar age edu his work pay money hob @@;                                                                                     
if mar=0 or mar=3 then mar=.;                                                                                                          
if hob=9 then hob=.;                                                                                                                   
if age<13 then age=.;                                                                                                                  
run;
♥♥♥♥♥
work.a1을 보면 오류가 있는 값마다, 숫자 대신에 . 이 찍혀있는 것을 볼 수 있다.


세번째는 잘못 입력된 자료가 몇번째인지 알려주는 것이다.
♥♥♥♥♥
data a1; infile 'e:\sastest\sample.dat';                                                                                               
input sex $ mar age edu his work pay money hob @@;                                                                                     
data b1; set a1;
seq=_n_;                                                                                                                               
if mar=0 or mar=3 or hob=9 or age=11;                                                                                                  
proc print; var seq mar hob age;                                                                                                       
run;
♥♥♥♥♥
                                                        SAS 시스템            2007년 02월 16일 금요일 오후 06시47분27초   5

                                              OBS    seq    mar    hob    age

                                               1       7     2      5      11
                                               2      11     0      1      24
                                               3      16     2      9      24
                                               4      33     3      1      29
                                               5      34     1      9      31
♥♥♥♥♥
7번 행은 age가 11이기에,
11번행은 mar가 0이기에,
34번은 hob가 9이기에 잘못되었음을 알 수 있다.
수작업으로 이 부분을 고쳐서 자료의 완성도를 높일 수 있다.


자 이제 엄청난 sas 프로그램이 다가온다.
설문지 자료를 분석한 sas 프로그램이 그것이다.
♥♥♥♥♥
/* 설문지의 예를 분석한 SAS 프로그램 */                                                                                                
/* smaple size = 40 */                                                                                                                 
options pagesize=66 nodate; /* 한 페이지에는 66줄이 들어가며 날짜는 출력하지 않는다 */                                                 
data a1; infile 'e:\sastest\sample.new'; /* data명은 a1이고, e드라이브의 sample.new에서 데이터를 읽어온다 */                           
input sex $ mar age edu his work pay money hob @@; /* 각 자료의 열이 의미하는 것은 다음과 같으며 한 줄에 주욱 기록하겠다 */            
if hob=1 or hob=3 or hob=6              then nhob=1; /* 독서, 영화감상, 음악감상은 nhob=1로 묶는다 */                                  
if hob=2 or hob=4 or hob=5 or hob=7     then nhob=2; /* 스포츠, 낚시, 등산, 여행은 nhob=2로 묶는다. 기타는 nhob=.으로 missing 가짐 */  
data b1; set a1; if _n_ <=10; /* a1을 선택하여 관측치의 순서를 나타내기 위한 b1을 보관한다 */                                          
proc print; var sex edu hob work pay money; sum money; /* b1에 들어있는 변수 sex edu hob work pay money와 변수 money의 합계를 프린트*/ 
data a1; set a1; /* a1을 선택하여 */                                                                                                   
proc freq; tables sex mar hob; /* sex, mar, hob에 관한 빈도를 구한다 */                                                                
proc means; /*  a1에 모든 변수에 대한 기술통계량을 구한다. */                                                                          
proc format; /* 명칭을 지정하겠다 */                                                                                                   
value xxxx low-30='young' 31-50='middle' 51-high='old'; /* xxxx라는 이름에 따라 30세이하는 young 31-50 middle 51이상은 old로 표기 */   
proc freq; tables age; format age xxxx; /* age 테이블을 가지고 빈도를 구한다. 명칭은 xxxx에 따른다 */                                  
proc chart; vbar sex; /* 차트를 그린다. 막대그래프를 남녀 분포로 */                                                                    
proc chart; vbar sex/type=precent; /* 상동 */                                                                                          
proc chart; block sex/sumvar=money; /* 남녀별 월 평균 급여액의 합계에 대한 막대그래프를 그린다 */                                      
proc chart; pie sex/sumvar=money; /* 이에대한 원형 그래프를 그린다 */                                                                  
proc plot; plot money * age; /* y축 money, x축 age의 2차원 분포 그래프를 그린다 */                                                     
proc sort; by sex; /* 데이터셋 a1을 변수 sex로 오름차순 정렬한다 */                                                                    
proc means mean std min max range sum var uss css cv stdeer tprt;                                                                      
var money age; by sex;                                                                                                                 
/* 성별 월평균 급여와 나이에 대해 평균값, 최소값, 최대값, 범위, 합계, 부산, 변이계수, 표준오차를 구함 */                               
proc summary print; class sex mar; var pay money; /* 남여별, 결혼유무별 각각에 대한 pay, money의 기술통계량을 구해 산출 */             
proc tabulate; class mar; var money; table mar, money*sum;                                                                             
/* class문제 이정된 변수 mar에 따라 옆 방향으로 money에 대한 기술통계량을, 여기서는 합계를 보고서 양식으로 보기좋게 프린트한다 */      
proc univariate; var work money; /* 변수 work와 money에 대한 기술통계량을 구할 수 있다. */                                             
proc freq; tables sex*nhob/chisq expected;                                                                                             
proc freq; tables mar*nhob/chisq;                                                                                                      
proc freq; tables mar*nhob/nocol chisq; by sex;                                                                                        
/* 남녀별 여가활동 분석 x^2-검정을 행함. 처음엔 각 유목의 기대치를 구하고 행확률은 프린트 하지 않을경우 nocol 옵션을 이용 */           
proc ttest; class sex; var money; /* 남녀별 급여차이가 있는가를 검정하기 위해 두 그룹의 평균치 차이 검정을 하는데 t-검정 적용 */       
proc corr; var age work pay money; /* 변수 age, work, pay, money의 피어슨 상관계수를 구한다 */                                         
proc reg; model money=age; /* 연령이 급여에 미치는 영향을 회귀분석함 */                                                                
run;                                                                                                                                   
♥♥♥♥♥
                                                        SAS 시스템                                                        6

                                     OBS    sex    edu    hob    work    pay    money

                                       1     M      2      1       4      5       82
                                       2     F      3      2       4      5       43
                                       3     F      3      3       4      4       45
                                       4     F      3      5       1      2       49
                                       5     F      5      5       3      3       51
                                       6     F      3      2       5      5       44
                                       7     F      3      5       3      5       46
                                       8     F      4      6       4      4       52
                                       9     F      5      1       2      2       62
                                      10     M      4      3       3      3       60
                                                                                =====
                                                                                 534

                                                        SAS 시스템                                                        7

                                                       FREQ 프로시저

                                                                     누적       누적
                                      sex      빈도      백분율      빈도      백분율
                                      -----------------------------------------------
                                      F            18     45.00          18     45.00
                                      M            22     55.00          40    100.00


                                                                     누적       누적
                                      mar      빈도      백분율      빈도      백분율
                                      -----------------------------------------------
                                        0           1      2.50           1      2.50
                                        1          18     45.00          19     47.50
                                        2          20     50.00          39     97.50
                                        3           1      2.50          40    100.00


                                                                     누적       누적
                                      hob      빈도      백분율      빈도      백분율
                                      -----------------------------------------------
                                        1           9     22.50           9     22.50
                                        2           5     12.50          14     35.00
                                        3           7     17.50          21     52.50
                                        4           5     12.50          26     65.00
                                        5           7     17.50          33     82.50
                                        6           3      7.50          36     90.00
                                        7           1      2.50          37     92.50
                                        8           1      2.50          38     95.00
                                        9           2      5.00          40    100.00

                                                        SAS 시스템                                                        8

                                                      MEANS 프로시저

                        변수      N          평균값        표준편차          최소값          최대값
                        ---------------------------------------------------------------------------
                        mar      40       1.5250000       0.5986095               0       3.0000000
                        age      40      28.8750000       7.9330128      11.0000000      51.0000000
                        edu      40       3.6750000       0.9442810       2.0000000       5.0000000
                        his      40       2.7000000       1.1140133       1.0000000       4.0000000
                        work     40       3.2500000       1.2760114       1.0000000       5.0000000
                        pay      40       3.7500000       1.1712365       2.0000000       5.0000000
                        money    40      56.0250000      12.3651444      42.0000000      93.0000000
                        hob      40       3.6500000       2.2480761       1.0000000       9.0000000
                        nhob     37       1.4864865       0.5067117       1.0000000       2.0000000
                        ---------------------------------------------------------------------------

                                                        SAS 시스템                                                        9

                                                       FREQ 프로시저

                                                                     누적       누적
                                      age      빈도      백분율      빈도      백분율
                                      -----------------------------------------------
                                       11           1      2.50           1      2.50
                                       18           1      2.50           2      5.00
                                       19           1      2.50           3      7.50
                                       20           1      2.50           4     10.00
                                       21           1      2.50           5     12.50
                                       22           1      2.50           6     15.00
                                       23           1      2.50           7     17.50
                                       24           4     10.00          11     27.50
                                       25           3      7.50          14     35.00
                                       26           2      5.00          16     40.00
                                       27           4     10.00          20     50.00
                                       28           2      5.00          22     55.00
                                       29           2      5.00          24     60.00
                                       30           3      7.50          27     67.50
                                       31           2      5.00          29     72.50
                                       32           2      5.00          31     77.50
                                       33           3      7.50          34     85.00
                                       36           1      2.50          35     87.50
                                       39           1      2.50          36     90.00
                                       42           1      2.50          37     92.50
                                       45           1      2.50          38     95.00
                                       48           1      2.50          39     97.50
                                       51           1      2.50          40    100.00

                                                        SAS 시스템                                                       10

                                            빈도

                                            22 +                   *****
                                               |                   *****
                                            21 +                   *****
                                               |                   *****
                                            20 +                   *****
                                               |                   *****
                                            19 +                   *****
                                               |                   *****
                                            18 +       *****       *****
                                               |       *****       *****
                                            17 +       *****       *****
                                               |       *****       *****
                                            16 +       *****       *****
                                               |       *****       *****
                                            15 +       *****       *****
                                               |       *****       *****
                                            14 +       *****       *****
                                               |       *****       *****
                                            13 +       *****       *****
                                               |       *****       *****
                                            12 +       *****       *****
                                               |       *****       *****
                                            11 +       *****       *****
                                               |       *****       *****
                                            10 +       *****       *****
                                               |       *****       *****
                                             9 +       *****       *****
                                               |       *****       *****
                                             8 +       *****       *****
                                               |       *****       *****
                                             7 +       *****       *****
                                               |       *****       *****
                                             6 +       *****       *****
                                               |       *****       *****
                                             5 +       *****       *****
                                               |       *****       *****
                                             4 +       *****       *****
                                               |       *****       *****
                                             3 +       *****       *****
                                               |       *****       *****
                                             2 +       *****       *****
                                               |       *****       *****
                                             1 +       *****       *****
                                               |       *****       *****
                                               --------------------------------
                                                         F           M

                                                              sex

                                                        SAS 시스템                                                       11

                                            백분율

                                            55 +                   *****
                                               |                   *****
                                               |                   *****
                                               |                   *****
                                               |                   *****
                                            50 +                   *****
                                               |                   *****
                                               |                   *****
                                               |                   *****
                                               |                   *****
                                            45 +       *****       *****
                                               |       *****       *****
                                               |       *****       *****
                                               |       *****       *****
                                               |       *****       *****
                                            40 +       *****       *****
                                               |       *****       *****
                                               |       *****       *****
                                               |       *****       *****
                                               |       *****       *****
                                            35 +       *****       *****
                                               |       *****       *****
                                               |       *****       *****
                                               |       *****       *****
                                               |       *****       *****
                                            30 +       *****       *****
                                               |       *****       *****
                                               |       *****       *****
                                               |       *****       *****
                                               |       *****       *****
                                            25 +       *****       *****
                                               |       *****       *****
                                               |       *****       *****
                                               |       *****       *****
                                               |       *****       *****
                                            20 +       *****       *****
                                               |       *****       *****
                                               |       *****       *****
                                               |       *****       *****
                                               |       *****       *****
                                            15 +       *****       *****
                                               |       *****       *****
                                               |       *****       *****
                                               |       *****       *****
                                               |       *****       *****
                                            10 +       *****       *****
                                               |       *****       *****
                                               |       *****       *****
                                               |       *****       *****
                                               |       *****       *****
                                             5 +       *****       *****
                                               |       *****       *****
                                               |       *****       *****
                                               |       *****       *****
                                               |       *****       *****
                                               --------------------------------
                                                         F           M

                                                              sex

                                                        SAS 시스템                                                       12

                                             통계량:합계, 분석:money, 분류:sex

                                                                    ___
                                                                   /_ /|
                                                                  |**| |
                                                      ___         |**| |
                                                     /_ /|        |**| |
                                                    |**| |        |**| |
                                                    |**| |        |**| |
                                                   -|**| |--------|**| |-------
                                                  / |**| |      / |**| |      /
                                                 /  |**| |     /  |**| |     /
                                                /   |**| |    /   |**| |    /
                                               /    |**|/    /    |**|/    /
                                              /             /             /
                                             /      897    /      1344   /
                                            /-------------/-------------/

                                                  F             M

                                                        sex

                                                        SAS 시스템                                                       13

                                             통계량:합계, 분석:money, 분류:sex


                                                     *****************      F
                                              *******                 *******
                                          *****                             *****
                                       ****                                     ****
                                    ****                                            ***
                                  ***                                                 ***
                                **                                                       **
                              **                                                           **
                            **                                                               **
                           **                                                                 **
                         ***                                                                   ***
                        **                                                                       **
                       ** ..                                                                      **
                      **     .                                     897                             **
                     **       ..                                 40.03%                             **
                    **           ..                                                                  **
                    *              . .                                                                *
                   *                  .                                                                *
                  **                   . .                                                             **
                  *                       ..                                                            *
                 **                          .                                                          **
                 *                            ..                                                         *
                 *                               ..                                                      *
                **                                  ..                                                   **
                *                                     .                                                   *
                *                                       ..                                                *
                *                                         .                                               *
                *                                            +  . . .. . .. . .. . .. . .. . .. . .. . .. *
                *                                                                                         *
                *                                                                                         *
                *                                                                                         *
                **                                                                                       **
                 *                                                                                       *
                 *                                                                                       *
                 **                                                                                     **
                  *                                                                                     *
                  **                                                                                   **
                   *                                                                                   *
                    *                                                                                 *
                    **                                                                               **
                     **                             1344                                            **
                      **                           59.97%                                          **
                       **                                                                         **
                        **                                                                       **
                         ***                                                                   ***
                           **                                                                 **
                            **                                                               **
                              **                                                           **
                                **                                                       **
                                  ***                                                 ***
                                    ****                                            ***
                                       ****                                     ****
                                          *****                             *****
                                              *******                 *******
                                              M      *****************



                                                        SAS 시스템                                                       14

                               money*age 의 도표.  범례: A = 1개 관측치, B = 2개 관측치, 등.

 money |
       |
    93 +                                                                                                    A
    92 +
    91 +
    90 +
    89 +
    88 +
    87 +
    86 +
    85 +
    84 +
    83 +
    82 +                     A                                                                A
    81 +
    80 +
    79 +                                                                                             A
    78 +                                                                               A
    77 +
    76 +
    75 +
    74 +
    73 +
    72 +
    71 +                                                                        A
    70 +
    69 +
    68 +
    67 +
    66 +
    65 +
    64 +                                                       A
    63 +                                                         A
    62 +                                                  A A
    61 +                                                         A
    60 +                                                       A
    59 +
    58 +
    57 +                                                A A A
    56 +                                                                A
    55 +                                             A
    54 +                                                A
    53 +                                           A
    52 +                                           A A           A
    51 +                                        B
    50 +                                      A
    49 +                                    A A
    48 +                                                  A
    47 +                                 A  A      B
    46 +    A
    45 +                            A  A      A
    44 +                                    A
    43 +                          A         A
    42 +                        A
       |
       ---+-----------+-----------+-----------+-----------+-----------+-----------+-----------+-----------+-----------+--
         10          15          20          25          30          35          40          45          50          55

                                                               age

                                                        SAS 시스템                                                       15

                                                     SUMMARY 프로시저

                                 관측치
     sex                  mar        수    변수      N          평균값        표준편차          최소값          최대값
     -----------------------------------------------------------------------------------------------------------------
     F                      1         9    pay       9       3.6666667       1.2247449       2.0000000       5.0000000
                                           money     9      47.1111111       3.5862391      42.0000000      52.0000000

                            2         9    pay       9       3.8888889       1.2692955       2.0000000       5.0000000
                                           money     9      52.5555556       7.5516738      44.0000000      62.0000000

     M                      0         1    pay       1       5.0000000               .       5.0000000       5.0000000
                                           money     1      47.0000000               .      47.0000000      47.0000000

                            1         9    pay       9       3.8888889       1.2692955       2.0000000       5.0000000
                                           money     9      59.0000000       9.9624294      49.0000000      82.0000000

                            2        11    pay      11       3.5454545       1.1281521       2.0000000       5.0000000
                                           money    11      64.4545455      16.8603893      43.0000000      93.0000000

                            3         1    pay       1       3.0000000               .       3.0000000       3.0000000
                                           money     1      57.0000000               .      57.0000000      57.0000000
     -----------------------------------------------------------------------------------------------------------------

                                                        SAS 시스템                                                       16

                                        -------------------------------------------
                                        |                            |   money    |
                                        |                            |------------|
                                        |                            |    Sum     |
                                        |----------------------------+------------|
                                        |mar                         |            |
                                        |----------------------------|            |
                                        |0                           |       47.00|
                                        |----------------------------+------------|
                                        |1                           |      955.00|
                                        |----------------------------+------------|
                                        |2                           |     1182.00|
                                        |----------------------------+------------|
                                        |3                           |       57.00|
                                        -------------------------------------------

                                                        SAS 시스템                                                       17

                                                    UNIVARIATE 프로시저
                                                        변수:  work

                                                           적률

                                  N                   40    가중합                     40
                                  평균              3.25    관측치 합                 130
                                  표준편차    1.27601141    분산               1.62820513
                                  왜도        -0.3410181    첨도               -0.8504773
                                  제곱합             486    수정 제곱합              63.5
                                  변동계수    39.2618897    평균의 표준오차    0.20175512


                                                      기본 통계 측도

                                          위치측도                  변이측도

                                      평균     3.250000     표준편차         1.27601
                                      중위수   3.000000     분산             1.62821
                                      최빈값   4.000000     범위             4.00000
                                                            사분위 범위      2.00000


                                                   위치모수 검정: Mu0=0

                                     검정            --통계량---    -------p-값-------

                                     스튜던트의 t    t  16.10864    Pr >  |t|   <.0001
                                     부호            M        20    Pr >= |M|   <.0001
                                     부호 순위       S       410    Pr >= |S|   <.0001


                                                      분위수(정의 5)

                                                   분위수         추정값

                                                   100% 최대값         5
                                                    99%                5
                                                    95%                5
                                                    90%                5
                                                    75% Q3             4
                                                    50% 중위수         3
                                                    25% Q1             2
                                                    10%                1
                                                     5%                1
                                                     1%                1
                                                     0% 최소값         1


                                                         극 관측치

                                             -작은값부터-        --큰값부터-

                                              값   관측치        값   관측치

                                               1       39         5       15
                                               1       34         5       21
                                               1       29         5       22
                                               1       17         5       27
                                               1        3         5       35

                                                        SAS 시스템                                                       18

                                                    UNIVARIATE 프로시저
                                                       변수:  money

                                                           적률

                                  N                   40    가중합                     40
                                  평균            56.025    관측치 합                2241
                                  표준편차    12.3651444    분산               152.896795
                                  왜도        1.34710398    첨도                1.3118782
                                  제곱합          131515    수정 제곱합          5962.975
                                  변동계수    22.0707619    평균의 표준오차    1.95510099


                                                      기본 통계 측도

                                          위치측도                  변이측도

                                      평균     56.02500     표준편차        12.36514
                                      중위수   52.00000     분산           152.89679
                                      최빈값   47.00000     범위            51.00000
                                                            사분위 범위     14.50000


                                                   위치모수 검정: Mu0=0

                                     검정            --통계량---    -------p-값-------

                                     스튜던트의 t    t  28.65581    Pr >  |t|   <.0001
                                     부호            M        20    Pr >= |M|   <.0001
                                     부호 순위       S       410    Pr >= |S|   <.0001


                                                      분위수(정의 5)

                                                   분위수         추정값

                                                   100% 최대값      93.0
                                                    99%             93.0
                                                    95%             82.0
                                                    90%             78.5
                                                    75% Q3          61.5
                                                    50% 중위수      52.0
                                                    25% Q1          47.0
                                                    10%             44.5
                                                     5%             43.0
                                                     1%             42.0
                                                     0% 최소값      42.0


                                                         극 관측치

                                             -작은값부터-        --큰값부터--

                                              값   관측치         값   관측치

                                              42        9         78       29
                                              43       26         79       30
                                              43        1         82       19
                                              44        5         82       39
                                              45       14         93       40

                                                        SAS 시스템                                                       19

                                                       FREQ 프로시저

                                                     sex * nhob 테이블

                                           sex         nhob

                                                  빈도|
                                              기대빈도|
                                                백분율|
                                             행 백분율|
                                           칼럼 백분율|       1|       2|   총합
                                           -----------+--------+--------+
                                           F          |     10 |      8 |     18
                                                      | 9.2432 | 8.7568 |
                                                      |  27.03 |  21.62 |  48.65
                                                      |  55.56 |  44.44 |
                                                      |  52.63 |  44.44 |
                                           -----------+--------+--------+
                                           M          |      9 |     10 |     19
                                                      | 9.7568 | 9.2432 |
                                                      |  24.32 |  27.03 |  51.35
                                                      |  47.37 |  52.63 |
                                                      |  47.37 |  55.56 |
                                           -----------+--------+--------+
                                           총합             19       18       37
                                                         51.35    48.65   100.00

                                                     결측값의 개수 = 3


                                              sex * nhob 테이블에 대한 통계량

                                통계량                        자유도          값      확률
                                ----------------------------------------------------------
                                카이제곱                           1      0.2480    0.6185
                                우도비 카이제곱                    1      0.2483    0.6183
                                연속성 수정 카이제곱               1      0.0285    0.8658
                                Mantel-Haenszel 카이제곱           1      0.2413    0.6233
                                파이 계수                                 0.0819
                                우발성 계수                               0.0816
                                크래머의 V                                0.0819


                                                    Fisher의 정확 검정
                                               ----------------------------
                                               (1,1) 셀 빈도(F)          10
                                               하단측 p값 Pr <= F    0.7956
                                               상단측 p값 Pr >= F    0.4331

                                               테이블 확률 (P)       0.2287
                                               양측 p값 Pr <= P      0.7459

                                                   유효한 표본 크기 = 37
                                                     결측값의 개수 = 3

                                                        SAS 시스템                                                       20

                                                       FREQ 프로시저

                                                     mar * nhob 테이블

                                           mar         nhob

                                                  빈도|
                                                백분율|
                                             행 백분율|
                                           칼럼 백분율|       1|       2|   총합
                                           -----------+--------+--------+
                                                    0 |      1 |      0 |      1
                                                      |   2.70 |   0.00 |   2.70
                                                      | 100.00 |   0.00 |
                                                      |   5.26 |   0.00 |
                                           -----------+--------+--------+
                                                    1 |      7 |      9 |     16
                                                      |  18.92 |  24.32 |  43.24
                                                      |  43.75 |  56.25 |
                                                      |  36.84 |  50.00 |
                                           -----------+--------+--------+
                                                    2 |     10 |      9 |     19
                                                      |  27.03 |  24.32 |  51.35
                                                      |  52.63 |  47.37 |
                                                      |  52.63 |  50.00 |
                                           -----------+--------+--------+
                                                    3 |      1 |      0 |      1
                                                      |   2.70 |   0.00 |   2.70
                                                      | 100.00 |   0.00 |
                                                      |   5.26 |   0.00 |
                                           -----------+--------+--------+
                                           총합             19       18       37
                                                         51.35    48.65   100.00

                                                     결측값의 개수 = 3


                                              mar * nhob 테이블에 대한 통계량

                                통계량                        자유도          값      확률
                                ----------------------------------------------------------
                                카이제곱                           3      2.2773    0.5169
                                우도비 카이제곱                    3      3.0489    0.3842
                                Mantel-Haenszel 카이제곱           1      0.1572    0.6917
                                파이 계수                                 0.2481
                                우발성 계수                               0.2408
                                크래머의 V                                0.2481

                                경고: 셀의 50%가 5보다 적은 기대빈도를 가지고 있습니다.
                                            카이제곱 검정은 올바르지 않을 수 있습니다.

                                                   유효한 표본 크기 = 37
                                                     결측값의 개수 = 3

                                                        SAS 시스템                                                       21

---------------------------------------------------------- sex=F ----------------------------------------------------------

                                                       FREQ 프로시저

                                                     mar * nhob 테이블

                                           mar         nhob

                                                  빈도|
                                                백분율|
                                             행 백분율|       1|       2|   총합
                                           -----------+--------+--------+
                                                    1 |      3 |      6 |      9
                                                      |  16.67 |  33.33 |  50.00
                                                      |  33.33 |  66.67 |
                                           -----------+--------+--------+
                                                    2 |      7 |      2 |      9
                                                      |  38.89 |  11.11 |  50.00
                                                      |  77.78 |  22.22 |
                                           -----------+--------+--------+
                                           총합             10        8       18
                                                         55.56    44.44   100.00


                                              mar * nhob 테이블에 대한 통계량

                                통계량                        자유도          값      확률
                                ----------------------------------------------------------
                                카이제곱                           1      3.6000    0.0578
                                우도비 카이제곱                    1      3.7387    0.0532
                                연속성 수정 카이제곱               1      2.0250    0.1547
                                Mantel-Haenszel 카이제곱           1      3.4000    0.0652
                                파이 계수                                -0.4472
                                우발성 계수                               0.4082
                                크래머의 V                               -0.4472

                                경고: 셀의 50%가 5보다 적은 기대빈도를 가지고 있습니다.
                                            카이제곱 검정은 올바르지 않을 수 있습니다.


                                                    Fisher의 정확 검정
                                               ----------------------------
                                               (1,1) 셀 빈도(F)           3
                                               하단측 p값 Pr <= F    0.0767
                                               상단측 p값 Pr >= F    0.9924

                                               테이블 확률 (P)       0.0691
                                               양측 p값 Pr <= P      0.1534

                                                      표본 크기 = 18

                                                        SAS 시스템                                                       22

---------------------------------------------------------- sex=M ----------------------------------------------------------

                                                       FREQ 프로시저

                                                     mar * nhob 테이블

                                           mar         nhob

                                                  빈도|
                                                백분율|
                                             행 백분율|       1|       2|   총합
                                           -----------+--------+--------+
                                                    0 |      1 |      0 |      1
                                                      |   5.26 |   0.00 |   5.26
                                                      | 100.00 |   0.00 |
                                           -----------+--------+--------+
                                                    1 |      4 |      3 |      7
                                                      |  21.05 |  15.79 |  36.84
                                                      |  57.14 |  42.86 |
                                           -----------+--------+--------+
                                                    2 |      3 |      7 |     10
                                                      |  15.79 |  36.84 |  52.63
                                                      |  30.00 |  70.00 |
                                           -----------+--------+--------+
                                                    3 |      1 |      0 |      1
                                                      |   5.26 |   0.00 |   5.26
                                                      | 100.00 |   0.00 |
                                           -----------+--------+--------+
                                           총합              9       10       19
                                                         47.37    52.63   100.00

                                                     결측값의 개수 = 3


                                              mar * nhob 테이블에 대한 통계량

                                통계량                        자유도          값      확률
                                ----------------------------------------------------------
                                카이제곱                           3      3.7005    0.2957
                                우도비 카이제곱                    3      4.5089    0.2115
                                Mantel-Haenszel 카이제곱           1      0.6451    0.4219
                                파이 계수                                 0.4413
                                우발성 계수                               0.4037
                                크래머의 V                                0.4413

                                경고: 셀의 88%가 5보다 적은 기대빈도를 가지고 있습니다.
                                            카이제곱 검정은 올바르지 않을 수 있습니다.

                                                   유효한 표본 크기 = 19
                                                     결측값의 개수 = 3

                                          경고: 데이터의 14%이(가) 결측값입니다.

                                                        SAS 시스템                                                       23

                                                    The TTEST Procedure

                                                        Statistics

                                Lower CL            Upper CL   Lower CL             Upper CL
Variable   sex              N       Mean     Mean       Mean    Std Dev   Std Dev    Std Dev   Std Err   Minimum   Maximum

money      F               18     46.659   49.833     53.007     4.7893    6.3824     9.5682    1.5044        42        62
money      M               22      54.96   61.091     67.222     10.639    13.829     19.762    2.9483        43        93
money      Diff (1-2)             -18.42   -11.26     -4.096     9.0969    11.131     14.346    3.5377


                                                          T-Tests

                           Variable    Method           Variances      DF    t Value    Pr > |t|

                           money       Pooled           Equal          38      -3.18      0.0029
                           money       Satterthwaite    Unequal      30.8      -3.40      0.0019


                                                   Equality of Variances

                               Variable    Method      Num DF    Den DF    F Value    Pr > F

                               money       Folded F        21        17       4.69    0.0021

                                                        SAS 시스템                                                       24

                                                       CORR 프로시저

                                       4  변수:    age      work     pay      money


                                                       단순 통계량

                변수               N          평균      표준편차            합        최소값        최대값

                age               40      28.87500       7.93301          1155      11.00000      51.00000
                work              40       3.25000       1.27601     130.00000       1.00000       5.00000
                pay               40       3.75000       1.17124     150.00000       2.00000       5.00000
                money             40      56.02500      12.36514          2241      42.00000      93.00000


                                                 피어슨 상관 계수, N = 40
                                             H0: Rho=0 검정에 대한 Prob > |r|

                                               age          work           pay         money

                               age         1.00000      -0.35146      -0.46983       0.76854
                                                          0.0262        0.0022        <.0001

                               work       -0.35146       1.00000       0.86642      -0.42618
                                            0.0262                      <.0001        0.0061

                               pay        -0.46983       0.86642       1.00000      -0.43687
                                            0.0022        <.0001                      0.0048

                               money       0.76854      -0.42618      -0.43687       1.00000
                                            <.0001        0.0061        0.0048

♥♥♥♥♥
책에 나온대로 따라서 명령어를 치고, 주석을 달았다.
뭐가뭔지 모르지만 엄청 쏟아져 나온다.
뭐 걱정하지는 마라. 앞으로 배울 것들을 보여준 것이라니까..
그래도 그렇지.. 이거 정말 통계 몰라도 괜찮은 거 맞아?


일단 단순하게라도 측정 척도와 통계기법의 관계를 알아보자.

① 하나의 변수에 대한 분석 - 기술적 분석
 1. 명목, 서열 척도(질적 분석)
 - 통계량: 비율, 최빈수, 명목산포계수, 4분위, 범위, 첨도, 왜도 등

 2. 구간, 비율 척도(양적 분석)
 - 통계량: 평균, 표준편차, 중위수, 최빈수, 첨도, 왜도 등

② 두 변수들간의 분석
 1. 단변량
  1) 명목/명목(독립변수/종속변수): 카이자승, 빈도분석
  2) 명목/구간: t-검정, 분산분석(ANOVA, F 검정/ 구간척도를 서열척도화하여 카이자승 검정 가능), 회귀분석(Dummy 이용)
  3) 구간/명목: logit 모형, probit 모형
  4) 구간/구간: 상관분석, 회귀분석, 편상관계수

 2. 다변량
  1) 명목/명목: 로그선형모형
  2) 명목/구간: 다변량 분산분석(MANOVA)
  3) 구간/명목: 다변량 회귀분석
  4) 구간/구간: 로지스틱모형, 판별분석
  5) 독립변수, 종속변수 구분이 없는 경우: 주성분 분석, 요인분석, 군집분석

나 참.. 통계 몰라도 되느듯 써놓더니 이제 통계를 부르짖는다...으어어.
그 뒤에는 뭐가 나오냐구? 통계 기법 정리이다.
일단 뒤에서 하나하나 기법과 연산방법이 나오니까 차근차근 보도록 해야겠다.
갑자기 많이 먹으면 체하는 법. 오늘은 여기까지...

by Sungjo Park Joe & Soohy 2007.02.16 21:21
SAS

오늘로 독학 이틀째..
역시나 안개속을 열심히 걸어다니는 느낌이다. 흐흑...

♥♥♥♥♥
/* 시스템 파일을 작성하는 예 */                                                                                                        
                                                                                                                                       
LIBNAME kkk 'e:\sastest';                                                                                                              
DATA a1; INPUT x y;                                                                                                                    
CARDS;                                                                                                                                 
1 2                                                                                                                                    
3 4                                                                                                                                    
;                                                                                                                                      
DATA kkk.b1; SET a1;                                                                                                                   
xy = x+y;                                                                                                                              
PROC PRINT; VAR x y;                                                                                                                   
RUN;                                                                                                                                   
♥♥♥♥♥
                                                        SAS 시스템                                                        1

                                                       OBS    x    y

                                                        1     1    2
                                                        2     3    4

♥♥♥♥♥
라이브러리 이름은 물리적 위치로는 'e\sastest' 폴더에, kkk로 명명한다.
a1이라는 이름의 데이터를 만들고, 입력되는 변수는 x y 두개이다.
자료들
1 2 .. 1번자료 x는 1, y는 2
3 4 .. 2번자료 x는 3, y는 4
자료 끝
kkk.b1이라는 이름의 데이터를 만들자. 변수는 a1에서 셋팅된 것으로 쓴다.
xy는 x에 y를 더한 것이다
출력하자. 변수 x와 y를.
돌려돌려
♥♥♥♥♥


LIBNAME이 뭐지
도움말을 확인해봤다. 아 영어다..ㄱ-;

LIBNAME Function: Windows
LIBNAME 기능: 윈도우즈
--------------------------------------------------------------------------------

Assigns or clears a libref for a SAS data library Category: SAS File I/O 
Windows specifics: behavior of the' ' libref (a space between single quotation marks) 
See: LIBNAME Function in SAS Language Reference: Dictionary 

SAS 데이터 라이브러리 목록을 위한 libref(library referance의 약어인 듯; 라이브러리 영역)을 할당하거나 지운다:
윈도우 환경에서 SAS 파일 I/O(input/output; 입출력):
그 ' '안의 libfef(하나의 인용 마크 사이 공간)을 보고 수행한다:
SAS 언어 참조 내 Libname 기능 : 사전
--------------------------------------------------------------------------------
Syntax 구문
Details 세부사항

--------------------------------------------------------------------------------
 
Syntax 구문
LIBNAME(libref<,SAS-data-library<,engine<,options>>>) 
LIBNAME(libref<,SAS의 데이터 라이브러리<, 엔진<. 옵션>>>)


libref
specifies the libref that is assigned to a SAS data library. Under Windows, the value of libref can be an environment variable.
libref를 조건으로 지정해서 SAS 데이터 라이브러리에 할당한다. 윈도우즈 하에서, libref는 환경 변수로 쓰여질 수 있다.

SAS-data-library
specifies the physical name of the SAS data library that is associated with the libref.
SAS 데이터 라이브러리의 물리적인 이름을 지정하며 libref와 함께 사용된다.

engine
specifies the engine that is used to access SAS files opened in the data library.
엔진을 지정하는 것은 SAS 파일을 데이터 라이브러리속에서 꺼내어 접속한다.

options
names one or more options honored by the specified engine, delimited with blanks.
특별한 엔진에 하나 이상의 옵션의 이름을 사용하며, 공란으로 한계를 정한다.

--------------------------------------------------------------------------------
 
Details 세부사항


If the LIBNAME function returns a 0, then the function was successful. However, you could receive a non-zero value, even if the function was successful.
A non-zero value is returned if an error, warning, or note is produced.
To determine if the function was successful, look through the SAS Log and use the following guidelines:
If a warning or note was generated, then the function was successful.
If an error was generated, then the function was not successful.
Under Windows, if you do not specify a SAS-data-library or if you specify a SAS-data-library
as ' ' (a space between single quotation marks) or '' (no space between single quotation marks), SAS deassigns the libref.

만약 LIBNAME 기능이 0을 반환하면, 기능은 성공적으로 수행된 것이다. 그러나 0이 아닌 값을 반환 받았어도 기능이 성공적으로 수행된다.
0이 아닌 값은 문제점, 경고 또는 노트를 돌려준다.
만약 기능이 성공적으로 수행되었다면, SAS 로그를 훑어보고, 지시를 따라가면 된다:
만약 경고나 노트가 만들어졌을때는 기능이 성공적으로 수행된것이다.
만약 에러가 만들어졌다면 기능은 성공적으로 수행되지 못한 것이다.
윈도우즈 환경 하에서, SAS 데이터 라이브러리를 자세히 쓸 수 없거나, ' '(' ' 사이의 공간) 또는 ''(' ' 사이에 공간 없음) 같은 SAS 데이터 라이브러리에 기술한다면,
SASrk libref를 지정할 수 없는 것이다.

음.. 뭔소린지 모르겠다. 대충 느끼기에는 라이브러리 목록안에 새 목록을 만들거나 지운다는 얘기같다.
우리가 새폴더를 만들거나 폴더 삭제를 하듯이..
기능적으로 0을 반환하면 명령어가 잘 돌아가는 것이고, 0을 반환하지 않고 에러 메시지를 띄우면 잘 찾아서 확인해보라는것 같다.

결과값을 보면, xy에 대한 값은 출력되지 않는다. 우리가 연산을 안한게 아닌데...
이를 출력하기 위해서는 이 문장이 필요하다고 한다.

♥♥♥♥♥
libname kkk 'e:\sastest';                                                                                                              
proc print data=kkk.b1;                                                                                                                
run;
♥♥♥♥♥
                                                        SAS 시스템                                                        5

                                                    OBS    x    y    xy

                                                     1     1    2     3
                                                     2     3    4     7
♥♥♥♥♥
라이브러리 이름 kkk, 위치는 'e:\sastest'에 지정한다;
출력하자. kkk.b1의 데이터를. (kkk.b1에 우리는 xy=x+y를 연산해 주었었다. 그런데, 그냥 이 문장만 쓰면 자동으로 출력해준단 말인가.. 전부 다 나오면, 생략하고 싶은 건 어찌해야 하나..)
돌려돌려;
♥♥♥♥♥

이번에는 라이브러리를 마우스로 손 쉽게 만드는 법을 설명하고 있다.
왼쪽에 탐색기가 '활성 라이브러리' 가리키도록 한다. 거기에 마우스 오른쪽 버튼을 누르고 '새로 만들기'를 클릭한다.

사용자 삽입 이미지

우리가 libname kkk; 'e:\sastest'; 라고 쓴 명령어를 쉽게 만들어 놓았다는 느낌이 들지 않는가.
일단 이름란이 kkk 일꺼고, 엔진은 설정하지 않았지만, 도움말에 있는 것을 보았을 것이다. 아 도움말을 끌고와서 비교해보자.

Syntax 구문
LIBNAME(libref<,SAS-data-library<,engine<,options>>>) 
LIBNAME(libref<,SAS의 데이터 라이브러리<, 엔진<. 옵션>>>)

자 이게 구문인데,
sas-data-library가 kkk에 해당되는 부분이고,
engine이 engine이겠지? 물론 건드리지 않았으니 default일 것이고,
경로가 'e:\sastest'로 썼던거 그 부분일것이고,
옵션은 options 인데, 아는 옵션이 없어서 안 썼으니, 무 옵션으로 처리되었을 것이다.

이렇게 치고 확인을 누르면 활성 라이브러리 창에 kkk2라는 목록이 생긴다. 이름을 이미지와 같이 kkk2로 만들었다면 말이다.

SAS를 시작할 때마다 이런 라이브러리 이름을 지정해줘야 한다. 이걸 자동으로 하고 싶은 사람도 있을 것이다.
SAS가 처음 로더될때 자동적으로 실행되는 명령문을 적어주는 파일이 있단다.
autoexec.sas라는 파일이란다.
메모장에 libname test 'e:\sample' 이라고 치고 sas를 실행한 후 탐색기를 보면 test가 생성된다고 한다.

다시 책으로 돌아가니, 그 다음 배울 부분은 option 창이다.
참고로 지금 있는 과의 내용은 sas 윈도우 사용법이다.

환경을 우리가 사용하기 편하게 customize 할 수 있다고 한다.
F11을 누르고 입력창에다가 options 라고 입력해보자. 짜쟌 옵션이 열린다. +_+
로그와 프로시저 출력>sas 로그와 프로시저 출력으로 가보자.
살짝 살펴볼까?
Date : 1이면 sas 결과 상단에 날짜가 프린트된다. 0이면 물론 안나온다.
Linesize : 130이면 한 줄에 130 글자가 프린트 된다. 난 123으로 되어 있으니..모 123자겠지..ㅋㅋ
Number ; 1로 되어 있으면 프린트 될 때 1페이지부터 시작한다. 0이면 아마도 페이지가 출력되지 않는 것 같다.
Pagesize : 47이면 한 페이지에 47줄이 프린트 된다. 난 66이니 66줄이 프린트 되겠군.. 근데 왜 하필 숫자가.. ㄱ-

참고로 단축키로 창을 끄려면 ctrl+F4이다. 마우스가 귀찮은 나 같은 사람은 알아두면 편하다.
(원래 마우스가 편했는데, 군복무할때 보급병으로 복무하면서 행정일을 많이하다보니... 아마 행정직 병과를 받은 사람은 이해할 수 있을 듯;)

사람에 따라서는 출력을 다양한 방법으로 많이 사용해야 할 지 모른다.
그래서인지는 몰라도, 프로그램문에 options문을 활용해서 이를 처리할 수 있다.
일일이 바꿔주지 않고 프로그램마다 원하는대로 출력 설정을 할 수 있다는 것은 굉장히 편한 것이다. +_+

자 비교비교 해보자.

1) option문을 사용하지 않은 경우
♥♥♥♥♥
data a1; input x y;                                                                                                                    
cards;                                                                                                                                 
1 2                                                                                                                                    
3 4                                                                                                                                    
;                                                                                                                                      
proc print; var x y;                                                                                                                   
run;                                                                                                                                   
♥♥♥♥♥
                                                        SAS 시스템                                                        6

                                                       OBS    x    y

                                                        1     1    2
                                                        2     3    4
♥♥♥♥♥


2) option문을 사용한 경우
♥♥♥♥♥
option date;
data a1; input x y;                                                                                                                    
cards;                                                                                                                                 
1 2                                                                                                                                    
3 4                                                                                                                                    
;                                                                                                                                      
proc print; var x y;                                                                                                                   
run;                                                                                                                                   
♥♥♥♥♥
                                                        SAS 시스템            2007년 02월 16일 금요일 오후 12시12분57초   7

                                                       OBS    x    y

                                                        1     1    2
                                                        2     3    4
♥♥♥♥♥

차이가 보이는가? option date; 라는 문장 하나가 결과 값에서 날짜를 출력하게 만들었다.
책은 날짜를 없애도록 option nodate; 라고 입력하게 되어 있는데, 나는 옵션에 날짜가 꺼져 있게 설정 되어있어서 date문을 입력했다.

자! 유의깊게 본 사람에게 묻는다. 아까전부터 출력 결과에 신경 살짝 쓰이는 것 있지 않은가?
개인적으로 만들면서 살짝 짜증이 밀려오고 있다. 저 출력 페이지숫자, 계속 증가하고 있다!!!!
대체 어찌 줄이는거야!!! 라고 생각이 파도치는데 책에 옵션으로 설명이 나왔다.

한 번 해보자. 짜증 한 큐에 날려보자!
♥♥♥♥♥
option date pageno=1;
data a1; input x y;                                                                                                                    
cards;                                                                                                                                 
1 2                                                                                                                                    
3 4                                                                                                                                    
;                                                                                                                                      
proc print; var x y;                                                                                                                   
run;                                                                                                                                   
♥♥♥♥♥

                                                        SAS 시스템            2007년 02월 16일 금요일 오후 12시12분57초   1

                                                       OBS    x    y

                                                        1     1    2
                                                        2     3    4
♥♥♥♥♥
option date에 pageno=1가 추가되었다.
option date;
option pageno=1;
로 써도 상관은 없겠지만, SAS 프로그램은 한 방에 주욱 쓸 수 있게 처리가 되는 것으로 나타났다.
웹 페이지 디자인 하다보면, embed 문장 같은데 width=500 height=400 이런 식으로 이어 쓰지 않는가. 그런 경우라고 보면 되겠다.
편하다.. ㅡㅅ-.. 므흣..

오 이번엔 조금 어려운 문장이다.
연산에 대해서 조금 배울 수 있으려나.
linesize 옵션에 관한 내용인데, 우린 그 이상을 배워야겠지?

1) Linesize 옵션을 적용하기 전
♥♥♥♥♥
data a1; input x1 @@; cards;                                                                                                           
1 2 3 4 5                                                                                                                              
proc means n mean std min max stderr sum var cv maxdec=3;                                                                              
run;                                                                                                                                   
♥♥♥♥♥
                                                        SAS 시스템            2007년 02월 16일 금요일 오후 12시12분57초   2

                                                      MEANS 프로시저

                                                       분석 변수 : x1

 N         평균값       표준편차         최소값         최대값       표준오차           합계           분산       변동계수
 -------------------------------------------------------------------------------------------------------------------------
 5          3.000          1.581          1.000          5.000          0.707         15.000          2.500         52.705
 -------------------------------------------------------------------------------------------------------------------------
♥♥♥♥♥
일단 구문 해석하기 전에, 이번엔 옵션에 date문을 쓰지 않았는데도 날짜가 나온다. 아마도 date문은 스위치같다고 생각할 수 있는 부분이다.
즉, option date; 라고 쓰면 결과에 날짜는 계속 나오게끔 스위치 on 되는 것이다.
자 분석해볼까.
데이터 이름은 a1이다. (그리고보니 맨날 a1이네..ㄱ-); 입력값은 x1 @@ ...@@가 뭐냐!! ㄷㄷㄷ... 찾아보니 밑에 cards의 값을 일렬로 주욱 써 놨는데,
이런 변수를 한 행씩 입력한 것처럼 인식한다고 한다.
즉, 1 2 3 4 5는 @@를 붙이지 않았다면
1
2
3
4
5
;
이런 식으로 입력해야 한다는 것이다.
proc means(기술통계량을 구한다)
n (총 갯수)
mean (the (arithmetical) MEAN; 평균값)
std(the STandard Deviation; 표준편차)
min(MINimum; 최소값)
max(MAXimum; 최대값)
stderr(STanDard ERRor; 표준편차)
sum(SUM; 합)
var(분산)
cv(Coefficient of Variability; 변동계수)
maxdec=3 (max decimal; 최대 소숫점 3자리...이런 의미같다)
돌려돌려;

proc means로 통계를 구한다고 한 뒤, 뒤에 뭘 붙이는가에 따라 출력하는 결과물이 달라지는 것이다.
연산을 몰라도, 결과가 무엇을 나타내는지에 대한 의미와, 자신이 활용하고자 하는 목적 등을 알 수 있다면 그걸로 된다는 의미다.
계산은 이 녀석이 잘 해줄꺼다. 실수 하지만 말자!

자 다시 책으로 돌아가서, 이 부분에서 보여주고자 하는 것은 linesize에 관한 것이였다.

♥♥♥♥♥
option linesize=130;
data a1; input x1 @@; cards;                                                                                                           
1 2 3 4 5                                                                                                                              
proc means n mean std min max stderr sum var cv maxdec=3;                                                                              
run;                                                                                                                                   
♥♥♥♥♥
                                                        SAS 시스템            2007년 02월 16일 금요일 오후 12시12분57초   2

                                                      MEANS 프로시저

                                                       분석 변수 : x1

 N         평균값       표준편차         최소값         최대값       표준오차           합계           분산       변동계수
 -------------------------------------------------------------------------------------------------------------------------
 5          3.000          1.581          1.000          5.000          0.707         15.000          2.500         52.705
 -------------------------------------------------------------------------------------------------------------------------

                                                            SAS 시스템               2007년 02월 16일 금요일 오후 12시12분57초   3

                                                          MEANS 프로시저

                                                          분석 변수 : x1

N          평균값        표준편차          최소값          최대값        표준오차            합계            분산        변동계수
---------------------------------------------------------------------------------------------------------------------------------
5           3.000           1.581           1.000           5.000           0.707          15.000           2.500          52.705

---------------------------------------------------------------------------------------------------------------------------------
♥♥♥♥♥
위에 결과값은 옵션 적용전이고, 아래는 후의 값이다.
linesize, 즉 줄의 길이가 달라졌다.
아까 살펴본 바로는 내 설정이 123이였으니까, 한 줄에 7자가 늘었다고 보면 되겠다.

음 그럼 이제 출력할때마다 130으로 되는건가..ㄱ- 모르겠네;

다음으로 배울것은 title과 footnote창이다.
이 구문/명령어는 출력을 할때 뭐에 대한 출력인지를 알려주는 기능을 한다.
어디에 설명이 되냐면, title문은 우리가 앞에서 나온 결과값에 'SAS 시스템'이라고 찍힌 부분이고,
footnote는 결과 출력 다 된 아래이다.
해보도록 하자.

< title문/창 >
♥♥♥♥♥
data a1;                                                                                                                               
title "이것은 첫번째 줄입니다";                                                                                                        
title2 "이것은 두번째 줄입니다";                                                                                                       
title3 "이것은 세번째 줄입니다";                                                                                                       
input x y z;                                                                                                                           
cards;                                                                                                                                 
1 2 3                                                                                                                                  
4 5 6                                                                                                                                  
7 8 9                                                                                                                                  
;                                                                                                                                      
proc print;                                                                                                                            
proc means;                                                                                                                            
run;                                                                                                                                   
♥♥♥♥♥
                                                      이것은 첫번째 줄입니다         2007년 02월 16일 금요일 오후 12시12분57초   5
                                                      이것은 두번째 줄입니다
                                                      이것은 세번째 줄입니다

                                                          MEANS 프로시저

                            변수    N          평균값        표준편차          최소값          최대값
                            -------------------------------------------------------------------------
                            x       3       4.0000000       3.0000000       1.0000000       7.0000000
                            y       3       5.0000000       3.0000000       2.0000000       8.0000000
                            z       3       6.0000000       3.0000000       3.0000000       9.0000000
                            -------------------------------------------------------------------------
♥♥♥♥♥
음.. linesize가 130으로 맞춰져버렸다. 역시 스위치의 개념이군...
자 어디에 출력되는지 알겠는가?
F11을 누르고 명령어창에다가 title이라고 쳐보자.
그럼 title 창이 나오게되고, 편집을 할 수 있게 된다.
해보잣!!
근데 지우고서 어찌 실행하는건지 모르겠다... 뭐지뭐지...;;;;; @_@;

<footnote문/창>
♥♥♥♥♥
data a1;                                                                                                                               
footnote "이것은 첫번째 줄입니다";                                                                                                        
footnote2 "이것은 두번째 줄입니다";                                                                                                       
footnote3 "이것은 세번째 줄입니다";                                                                                                       
input x y z;                                                                                                                           
cards;                                                                                                                                 
1 2 3                                                                                                                                  
4 5 6                                                                                                                                  
7 8 9                                                                                                                                  
;                                                                                                                                      
proc print;                                                                                                                            
proc means;                                                                                                                            
run;
♥♥♥♥♥
                                                  이것은 첫번째 줄입니다      2007년 02월 16일 금요일 오후 02시51분32초   6

                                                  이것은 세번째 줄입니다

                                                      MEANS 프로시저

                         변수    N          평균값        표준편차          최소값          최대값
                         -------------------------------------------------------------------------
                         x       3       4.0000000       3.0000000       1.0000000       7.0000000
                         y       3       5.0000000       3.0000000       2.0000000       8.0000000
                         z       3       6.0000000       3.0000000       3.0000000       9.0000000
                         -------------------------------------------------------------------------


























                                                  이것은 첫번째 줄입니다
                                                  이것은 두번째 줄입니다
                                                  이것은 세번째 줄입니다
♥♥♥♥♥
저 아래가서 찍히네.. 즉, 여기가 네가 설정한 페이지의 끝이라는 것이다.
명령어창에 foot 또는 footnote라고 치면, title창과 같은 창이 뜬다. 사용법은 같다.

으어어어.. 3장 끝났다. 4장도 슬슬 공부해보자.. 4장의 제목은 SAS 도움말 이용법이다.
아!! 또 4장을 어찌 하냐고? 이 무슨 나약한 소리인가. 30장까지 있는데, 조금이라도 빨리가서 치우고 쉬면 좋지.
음핫핫핫!!! 그보다 4장은 얼마 안된다. 3장의 절반도 안된다. 하하하!!! 거기다 프로그래밍도 없고, 단지 도움말이 뭔지 설명하는 단원~^^

도움말은 F1을 누르면 나온다.
목차탭에 5가지 내용이 나온다.
- SAS 9 및 9.1의 새로운 기능
- SAS 사용법 배우기
- Using SAS Software in your Operating Environment
- SAS Products
- SAS 사용자 지원 서비스

4번째 SAS Products > SAS/STAT Software 를 선택하면 SAS/STAT에서 지원하는 프로시저 리스트를 볼 수 있다고 한다..
책에서는 8버전에대해 설명하고 난 9버전이라 좀 차이가 있긴 있지만, 뭐 지원은 하겠지 싶다.

SAS 사용법 배우기에 보면 수 많은 샘플들이 있다. 그 중에 하나인 캘린더 샘플을 돌려봤다.
♥♥♥♥♥
/****************************************************************/
 /*          S A S   S A M P L E   L I B R A R Y                 */
 /*                                                              */
 /*    NAME: BPG07R01                                            */
 /*   TITLE: CALENDAR Procedure, Chapter 7                       */
 /* PRODUCT: SAS                                                 */
 /*  SYSTEM: ALL                                                 */
 /*    KEYS: EXAMPLES FROM DOCUMENTATION, SCHEDULE               */
 /*   PROCS: CALENDAR FORMAT SORT                                */
 /*    DATA:                                                     */
 /*                                                              */
 /* SUPPORT:                             UPDATE:                 */
 /*     REF: SAS Procedures Guide, CHAPTER 7                     */
 /*    MISC:                                                     */
 /*                                                              */
 /****************************************************************/
 
options ls=132;
title 'Meals Served in Community Hospital Cafeteria';
options pagesize=60 linesize=132 nodate;
data act;
  input date date7. brkfst lunch dinner;
    cards;
01Dec91       123 234 123
02Dec91       123 234 238
03Dec91       188 188 198
04Dec91       123 183 176
05Dec91       200 267 243
06Dec91       176 165 177
07Dec91       156   . 167
08Dec91       198 143 167
09Dec91       178 198 187
10Dec91       165 176 187
11Dec91       187 176 231
12Dec91       176 187 222
13Dec91       187 187 123
14Dec91       164 187 231
15Dec91       187 165 167
16Dec91       187 198 156
17Dec91       198 187 156
18Dec91       187 165 178
19Dec91       187 176 156
20Dec91       156 211 199
21Dec91       176 156 143
22Dec91       165 167 211
23Dec91       187 176   .
24Dec91       185 167 167
25Dec91       187 178 187
26Dec91       167 156 198
27Dec91       167 239 267
28Dec91       267 287 256
29Dec91       276 243 234
30Dec91       267 287 256
31Dec91       243 231 243
;
 proc calendar;
   start date;
   sum brkfst lunch dinner;
   mean brkfst lunch dinner;
 run;
title 'Summer Planning Calendar:  '
'Julia Q. Wydget, President';
title2 'Better Products Inc.';
data act;
    input date : date7. happen $ 9-36 who $ 38-48 long;
    cards;
01JUL91 Dist. Mtg.                    All          1
02JUL91 Mgrs. Meeting                 District 6   2
03JUL91 Interview                     JW           1
05JUL91 VIP Banquet                   JW           1
08JUL91 Sales Drive                   District 6   5
08JUL91 Trade Show                    Knox         3
11JUL91 Mgrs. Meeting                 District 7   2
11JUL91 Planning Council              Group II     1
12JUL91 Seminar                       White        1
14JUL91 Co. Picnic                    All          1
15JUL91 Sales Drive                   District 7   5
16JUL91 Dentist                       JW           1
17JUL91 Bank Meeting                  1st Natl     1
18JUL91 NewsLetter Deadline           All          1
18JUL91 Planning Council              Group III    1
19JUL91 Seminar                       White        1
22JUL91 Inventors Show                Melvin       3
24JUL91 Birthday                      Mary         1
25JUL91 Planning Council              Group IV     1
25JUL91 Close Sale                    WYGIX Co.    2
;
proc calendar data=act;
  start date;
  dur long;
run;
title  'Summer Planning Calendar:  '
'Julia Q. Wydget, President';
title2  'Better Products Inc.';
title3  'Work and Home Schedule';
data act;
  input date:date7. happen $ 10-34 who $ 35-47 _CAL_ $ long;
  cards;
01JUL91  Dist. Mtg.               All          CAL1   1
02JUL91  Mgrs. Meeting            District 6   CAL1   2
03JUL91  Interview                JW           CAL1   1
05JUL91  VIP Banquet              JW           CAL1   1
06JUL91  Beach trip               family       CAL2   2
08JUL91  Sales Drive              District 6   CAL1   5
08JUL91  Trade Show               Knox         CAL1   3
09JUL91  Orthodontist             Meagan       CAL2   1
11JUL91  Mgrs. Meeting            District 7   CAL1   2
11JUL91  Planning Council         Group II     CAL1   1
12JUL91  Seminar                  White        CAL1   1
14JUL91  Co. Picnic               All          CAL1   1
14JUL91  Business trip            Fred         CAL2   2
15JUL91  Sales Drive              District 7   CAL1   5
16JUL91  Dentist                  JW           CAL1   1
17JUL91  Bank Meeting             1st Natl     CAL1   1
17JUL91  Real estate agent        Family       CAL2   1
18JUL91  NewsLetter Deadline      All          CAL1   1
18JUL91  Planning Council         Group III    CAL1   1
19JUL91  Seminar                  White        CAL1   1
22JUL91  Inventors Show           Melvin       CAL1   3
24JUL91  Birthday                 Mary         CAL1   1
25JUL91  Planning Council         Group IV     CAL1   1
25JUL91  Close Sale               WYGIX Co.    CAL1   2
27JUL91  Ballgame                 Family       CAL2   1
;
data vac;
   input hdate:date7.  holiday $ 11-25 _CAL_ $ ;
   cards;
04JUL91   Independence            CAL1
29JUL91   vacation                CAL2
;
proc calendar data=act holidata=vac;
   calid _CAL_ / output=combine;
   start date ;
   holistart hdate;
   holivar holiday;
   dur long;
 run;
data act;
input date:date7. happen $ 9-36 who $ 38-40 _CAL_ $ 50 -53 long;
cards;
03JUL86 project                      JW          CAL1   3
07JUL86 finish                       JW          CAL1   1
;
title 'The SAS System';
proc calendar data=act  interval=workday;
   sta date;
   dur long;
run;
data act;
input date:date7. happen $ 9-36 who $ 38-40 _CAL_ $ long;
cards;
03JUL86 project                      JW           CAL1   3
07JUL86 finish                       JW           CAL1   1
;
data vac;
  input date:date7.  holiday $ 11-25 _CAL_ $;
cards;
04jul86   Independence          CAL1
 ;
proc calendar data=act holidata=vac interval=workday;
   calid _CAL_  / output=mixed;
   sta date;
   dur long;
   holistart date;
   holivar  holiday;
run;
data act;
input date:date7. happen $ 9-36 who $ 38-40 _CAL_ $ long;
cards;
03JUL86 project                      JW           CAL1   3
07JUL86 finish                       JW           CAL1   1
;
data vac;
input date:date7.  holiday $ 11-25  dur _CAL_ $;
cards;
04jul86   Independence          2         CAL1
   ;
proc calendar data=act holidata=vac interval=workday;
   calid _CAL_  / output=mixed;
   sta date;
   dur long;
   holistart date;
   holivar  holiday;
   holidur dur;
run;
title 'Meals Served in Community Hospital Cafeteria';
data act;
   input date date. brkfst lunch dinner;
   cards;
01Dec91           123 234 123
02Dec91           123 234 238
03Dec91           188 188 198
04Dec91           123 183 176
05Dec91           200 267 243
06Dec91           176 165 177
07Dec91           156   . 167
08Dec91           198 143 167
09Dec91           178 198 187
10Dec91           165 176 187
11Dec91           187 176 231
12Dec91           176 187 222
13Dec91           187 187 123
14Dec91           164 187 231
15Dec91           187 165 167
16Dec91           187 198 156
17Dec91           198 187 156
18Dec91           187 165 178
19Dec91           187 176 156
20Dec91           156 211 199
21Dec91           176 156 143
22Dec91           165 167 211
23Dec91           187 176   .
24Dec91           185 167 167
25Dec91           187 178 187
26Dec91           167 156 198
27Dec91           167 239 267
28Dec91           267 287 256
29Dec91           276 243 234
30Dec91           267 287 256
31Dec91           243 231 243
;
data hol;
   input date: date7. name & $12.;
   cards;
25Dec91 Christmas
;
proc format;
   picture bfmt   other = '999 Brkfst';
   picture lfmt   other = '999 Lunch ';
   picture dfmt   other = '999 Dinner';
   run;
proc calendar data=act holidata=hol;
   start date;
   holistart date;
   holivar name;
   format brkfst bfmt.;
   format lunch  lfmt.;
   format dinner dfmt.;
   sum  brkfst lunch dinner / format=4.0;
   mean brkfst lunch dinner / format=6.2;
   label brkfst = 'Breakfasts Served'
         lunch  = '   Lunches Served'
         dinner = '   Dinners Served';
   run;
title1 'System Performance Summary';
title2 'First National Bank Computer Center';
data bankact;
   input date: date. jobs act cpu;
   cards;
02May88 873 22.1  7.6
03May88 881 23.8 11.7
04May88 940 24.0  7.7
05May88 194  5.3  1.5
06May88 154 17.4  7.1
09May88 807 24   10.5
10May88 829 23.4 10.5
11May88 915 24   10.6
12May88 388 21    6.9
13May88  .   .    .
16May88 806 24.0 10.0
17May88 848 23.6 10.5
18May88 906 23   10.1
19May88 103 23.4 18.7
20May88 103 20.1 20
23May88 729 24    4.9
24May88 652 21.3 12.2
25May88 809 23.8 12.3
26May88 168 15.8 10.7
27May88  85  7    5.6
31May88 100 11.1  1.8
;
proc format;
picture jfmt  . = '000 jobs' (noedit)
        other = '000 jobs';
picture afmt  . = '00.0 act' (noedit)
        other = '00.0 act';
picture cfmt  . = '00.0 cpu' (noedit)
        other = '00.0 cpu';
run;
title3 'Mean Usage per Business Day';
proc calendar data=bankact;
   start date;
   format jobs jfmt.
           act afmt.
           cpu cfmt.;
   sum  jobs act cpu / format = 7.0;
   mean jobs act cpu / format = 6.1;
   label jobs = 'Jobs Run'
          act = 'Active Hours'
          cpu = 'Cpu Hours';
   run;
proc format;
picture jfmt  . = '000 jobs' (noedit)
        other = '000 jobs';
picture afmt  . = '00.0 act' (noedit)
        other = '00.0 act';
picture cfmt  . = '00.0 cpu' (noedit)
        other = '00.0 cpu';
run;
title1 'System Performance Summary';
title2 'First National Bank Computer Center';
title3 'Mean Usage per Day';
proc calendar missing data=bankact meantype=ndays;
   start date;
   format jobs jfmt.
           act afmt.
           cpu cfmt.;
   sum  jobs act cpu / format = 7.0;
   mean jobs act cpu / format = 6.1;
   label jobs = 'Jobs Run Daily'
   act = 'Active Hours' cpu = 'Cpu Hours';
run;
data wellact;
input task $ 1-16 dur 21-30 date datetime. _cal_ $ cost;
cards;
Drill Well          3.50      01JUL85:12:00:00   CAL1   1000
Lay Power Line      3.00      04JUL85:12:00:00   CAL1   2000
Assemble Tank       4.00      05JUL85:08:00:00   CAL1   1000
Build Pump House    3.00      08JUL85:12:00:00   CAL1   2000
Pour Foundation     4.00      11JUL85:08:00:00   CAL1   1500
Install Pump        4.00      15JUL85:14:00:00   CAL1    500
Install Pipe        2.00      19JUL85:08:00:00   CAL1   1000
Erect Tower         6.00      20JUL85:08:00:00   CAL1   2500
Deliver Material    2.00      01JUL85:12:00:00   CAL2    500
Excavate            4.75      03JUL85:08:00:00   CAL2   3500
;
data wellhol;
input date date. holiday $ 11-25 _cal_ $;
cards;
04JUL85   Independence        CAL1
07JUL85   Vacation            CAL2
;
data wellcal;
input _sun_ $ _sat_ $ _cal_ $;
cards;
Holiday Holiday  CAL1
Holiday Halfday  CAL2
;
data wellwor;
input halfday time8.;
cards;
08:00
12:00
;
title 'Well Drilling Cost Summary:  Output=Separate';
proc sort data=wellact;
   by _cal_ date;
run;
proc calendar data=wellact
      holidata=wellhol  caledata=wellcal workdata=wellwor
           datetime legend;
   calid _cal_ / output=separate;
   start date;
   format cost dollar9.2;
   sum cost / format=dollar9.2;
   holistart date;
   holivar holiday;
   outstart Monday;
   outfin Saturday;
run;
title 'Well Drilling Cost Summary:  Output=Combine';
proc sort data=wellact;
   by date;
run;
proc calendar data=wellact
      holidata=wellhol caledata=wellcal workdata=wellwor
           datetime legend;
   calid _cal_ / output=combine;
   start date;
   format cost dollar9.2;
   sum cost / format=dollar9.2;
   holistart date;
   holivar holiday;
   outstart Monday;
   outfin Saturday;
run;
options pagesize=66 linesize=132 nodate ;
title 'Well Drilling Cost Summary:  Output=Mix';
proc sort data=wellact;
   by date;
run;
proc calendar data=wellact
     holidata=wellhol caledata=wellcal workdata=wellwor
          datetime legend;
   calid _cal_ / output=mix;
   start date;
   format cost dollar9.2;
   sum cost / format=dollar9.2;
   holistart date;
   holivar holiday;
   outstart Monday;
   outfin Saturday;
run;
title 'Summer Planning Calendar:  Julia Q. Wydget, President';
title2 'Better Products Inc.';
options pagesize=60 linesize=132 nodate;
data act;
   input date:date7. happen $ 9-36 who $ 37-48 long;
   cards;
01JUL91 Dist. Mtg.                  All          1
02JUL91 Mgrs. Meeting               District 6   2
03JUL91 Interview                   JW           1
05JUL91 VIP Banquet                 JW           1
08JUL91 Sales Drive                 District 6   5
08JUL91 Trade Show                  Knox         3
11JUL91 Mgrs. Meeting               District 7   2
11JUL91 Planning Council            Group II     1
12JUL91 Seminar                     White        1
15JUL91 Sales Drive                 District 7   5
16JUL91 Dentist                     JW           1
17JUL91 Bank Meeting                1st Natl     1
18JUL91 NewsLetter Deadline         All          1
18JUL91 Planning Council            Group III    1
19JUL91 Seminar                     White        1
19JUL91 Co. Picnic                  All          1
22JUL91 Inventors Show              Melvin       3
24JUL91 Birthday                    Mary         1
25JUL91 Planning Council            Group IV     1
25JUL91 Close Sale                  WYGIX Co.    2
;
data hol;
   input date: date7. dur name & $15.;
   cards;
04JUL91  1  Independence
29JUL91  3  Vacation
;
proc calendar data=act holidata=hol;
   start date;
   dur long;
   holistart date;
   holivar name;
   holidur dur;
   outstart Monday;
   outfin Friday;
run;
title 'Well Drilling Work Schedule:  Output=Separate';
proc sort data=wellact;
   by _cal_ date;
   run;
proc calendar data=wellact
      holidata=wellhol
      caledata=wellcal workdata=wellwor datetime;
   calid _cal_ / output=separate;
   start date;
   dur dur;
   format cost dollar9.2;
   holistart date;
   holivar holiday;
   outstart Monday;
   outfin Saturday;
run;
options pagesize=66 linesize=132 nodate ;
title 'Well Drilling Work Schedule:  Output=Combine';
proc sort data=wellact;
   by date;
   run;
proc calendar data=wellact
     holidata=wellhol caledata=wellcal workdata=wellwor datetime;
   calid _cal_ / output=combine;
   start date;
   dur dur;
   format cost dollar9.2;
   holistart date;
   holivar holiday;
   outstart Monday;
   outfin Saturday;
   run;
title 'Well Drilling Work Schedule:  Output=Mix';
proc sort data=wellact;
   by date;
run;
proc calendar data=wellact
     holidata=wellhol caledata=wellcal workdata=wellwor datetime;
   calid _cal_ / output=mix;
   start date;
   dur dur;
   format cost dollar9.2;
   holistart date;
   holivar holiday;
   outstart Monday;
   outfin Saturday;
run;
data acts;
   input sta:date7. act $ 11-30 dur;
   cards;
01JAN88   Start                 0
31DEC88   Finish                0
 ;
data holidays;
   input sta:date7. act $ 11-30 dur;
   cards;
01JAN88   New Year's            1
01APR88   Good Friday           1
30MAY88   Memorial Day          1
04JUL88   Independence Day      1
05SEP88   Labor Day             1
24NOV88   Thanksgiving          2
26DEC88   Christmas             3
 ;
options pagesize=30 linesize=132;
proc calendar data=acts holidata=holidays fill;
   start sta;
   dur dur;
   holistart sta;
   holidur dur;
   holivar act;
run;
♥♥♥♥♥
                                            Meals Served in Community Hospital Cafeteria                                           7

             ----------------------------------------------------------------------------------------------------------
             |                                                                                                        |
             |                                               12월  1991                                               |
             |                                                                                                        |
             |--------------------------------------------------------------------------------------------------------|
             |    일요일    |    월요일    |    화요일    |    수요일    |    목요일    |    금요일    |    토요일    |
             |--------------+--------------+--------------+--------------+--------------+--------------+--------------|
             |       1      |       2      |       3      |       4      |       5      |       6      |       7      |
             |              |              |              |              |              |              |              |
             |          123 |          123 |          188 |          123 |          200 |          176 |          156 |
             |          234 |          234 |          188 |          183 |          267 |          165 |            . |
             |          123 |          238 |          198 |          176 |          243 |          177 |          167 |
             |--------------+--------------+--------------+--------------+--------------+--------------+--------------|
             |       8      |       9      |      10      |      11      |      12      |      13      |      14      |
             |              |              |              |              |              |              |              |
             |          198 |          178 |          165 |          187 |          176 |          187 |          164 |
             |          143 |          198 |          176 |          176 |          187 |          187 |          187 |
             |          167 |          187 |          187 |          231 |          222 |          123 |          231 |
             |--------------+--------------+--------------+--------------+--------------+--------------+--------------|
             |      15      |      16      |      17      |      18      |      19      |      20      |      21      |
             |              |              |              |              |              |              |              |
             |          187 |          187 |          198 |          187 |          187 |          156 |          176 |
             |          165 |          198 |          187 |          165 |          176 |          211 |          156 |
             |          167 |          156 |          156 |          178 |          156 |          199 |          143 |
             |--------------+--------------+--------------+--------------+--------------+--------------+--------------|
             |      22      |      23      |      24      |      25      |      26      |      27      |      28      |
             |              |              |              |              |              |              |              |
             |          165 |          187 |          185 |          187 |          167 |          167 |          267 |
             |          167 |          176 |          167 |          178 |          156 |          239 |          287 |
             |          211 |            . |          167 |          187 |          198 |          267 |          256 |
             |--------------+--------------+--------------+--------------+--------------+--------------+--------------|
             |      29      |      30      |      31      |              |              |              |              |
             |              |              |              |              |              |              |              |
             |          276 |          267 |          243 |              |              |              |              |
             |          243 |          287 |          231 |              |              |              |              |
             |          234 |          256 |          243 |              |              |              |              |
             ----------------------------------------------------------------------------------------------------------

                                            --------------------------------------------
                                            |          |     합계      |     평균      |
                                            |          |               |               |
                                            | brkfst   |          5733 |       184.935 |
                                            | lunch    |          5914 |       197.133 |
                                            | dinner   |          5844 |       194.800 |
                                            --------------------------------------------






                                                       이것은 첫번째 줄입니다
                                                       이것은 두번째 줄입니다
                                                       이것은 세번째 줄입니다

                                       Summer Planning Calendar:  Julia Q. Wydget, President                                       8
                                                        Better Products Inc.

  -------------------------------------------------------------------------------------------------------------------------------
  |                                                                                                                             |
  |                                                          7월  1991                                                          |
  |                                                                                                                             |
  |-----------------------------------------------------------------------------------------------------------------------------|
  |     일요일      |     월요일      |     화요일      |     수요일      |     목요일      |     금요일      |     토요일      |
  |-----------------+-----------------+-----------------+-----------------+-----------------+-----------------+-----------------|
  |                 |        1        |        2        |        3        |        4        |        5        |        6        |
  |                 |                 |                 |                 |                 |                 |                 |
  |                 |                 |                 |                 |                 |                 |                 |
  |                 |                 |                 |                 |                 |                 |                 |
  |                 |                 |                 |+=Interview/JW==+|                 |                 |                 |
  |                 |+Dist. Mtg./All=+|+====Mgrs. Meeting/District 6=====+|                 |+VIP Banquet/JW=+|                 |
  |-----------------+-----------------+-----------------+-----------------+-----------------+-----------------+-----------------|
  |        7        |        8        |        9        |       10        |       11        |       12        |       13        |
  |                 |                 |                 |                 |                 |                 |                 |
  |                 |                 |                 |                 |                 |                 |                 |
  |                 |                 |                 |                 |+Planning Counci+|+=Seminar/White=+|                 |
  |                 |+==================Trade Show/Knox==================+|+====Mgrs. Meeting/District 7=====+|                 |
  |                 |+================================Sales Drive/District 6=================================+|                 |
  |-----------------+-----------------+-----------------+-----------------+-----------------+-----------------+-----------------|
  |       14        |       15        |       16        |       17        |       18        |       19        |       20        |
  |                 |                 |                 |                 |                 |                 |                 |
  |                 |                 |                 |                 |                 |                 |                 |
  |                 |                 |                 |                 |+Planning Counci+|                 |                 |
  |                 |                 |+==Dentist/JW===+|+Bank Meeting/1s+|+NewsLetter Dead+|+=Seminar/White=+|                 |
  |+Co. Picnic/All=+|+================================Sales Drive/District 7=================================+|                 |
  |-----------------+-----------------+-----------------+-----------------+-----------------+-----------------+-----------------|
  |       21        |       22        |       23        |       24        |       25        |       26        |       27        |
  |                 |                 |                 |                 |                 |                 |                 |
  |                 |                 |                 |                 |                 |                 |                 |
  |                 |                 |                 |                 |                 |                 |                 |
  |                 |                 |                 |+=Birthday/Mary=+|+======Close Sale/WYGIX Co.=======+|                 |
  |                 |+===============Inventors Show/Melvin===============+|+Planning Counci+|                 |                 |
  |-----------------+-----------------+-----------------+-----------------+-----------------+-----------------+-----------------|
  |       28        |       29        |       30        |       31        |                 |                 |                 |
  |                 |                 |                 |                 |                 |                 |                 |
  |                 |                 |                 |                 |                 |                 |                 |
  |                 |                 |                 |                 |                 |                 |                 |
  |                 |                 |                 |                 |                 |                 |                 |
  |                 |                 |                 |                 |                 |                 |                 |
  -------------------------------------------------------------------------------------------------------------------------------







                                                       이것은 첫번째 줄입니다
                                                       이것은 두번째 줄입니다
                                                       이것은 세번째 줄입니다

                                       Summer Planning Calendar:  Julia Q. Wydget, President                                       9
                                                        Better Products Inc.
                                                       Work and Home Schedule

           ------------------------------------------------------------------------------------------------------------------------
           |                                                                                                                      |
           |                                                      7월  1991                                                       |
           |                                                                                                                      |
           |----------------------------------------------------------------------------------------------------------------------|
           |     일요일     |     월요일     |     화요일     |     수요일     |     목요일     |     금요일     |     토요일     |
 ----------+----------------+----------------+----------------+----------------+----------------+----------------+----------------|
 |         |                |        1       |        2       |        3       |        4       |        5       |        6       |
 |.........|................|................|................|................|................|................|................|
 | CAL1    |                |                |                |+=Interview/JW=+|**Independence**|                |                |
 |         |                |+Dist. Mtg./All+|+===Mgrs. Meeting/District 6====+|                |+VIP Banquet/JW+|                |
 |.........|................|................|................|................|................|................|................|
 | CAL2    |                |                |                |                |                |                |+Beach trip/fam>|
 |---------+----------------+----------------+----------------+----------------+----------------+----------------+----------------|
 |         |        7       |        8       |        9       |       10       |       11       |       12       |       13       |
 |.........|................|................|................|................|................|................|................|
 | CAL1    |                |                |                |                |+Planning Counc+|+Seminar/White=+|                |
 |         |                |+================Trade Show/Knox=================+|+===Mgrs. Meeting/District 7====+|                |
 |         |                |+==============================Sales Drive/District 6==============================+|                |
 |.........|................|................|................|................|................|................|................|
 |---------+----------------+----------------+----------------+----------------+----------------+----------------+----------------|
 |         |       14       |       15       |       16       |       17       |       18       |       19       |       20       |
 |.........|................|................|................|................|................|................|................|
 | CAL1    |                |                |                |                |+Planning Counc+|                |                |
 |         |                |                |+==Dentist/JW==+|+Bank Meeting/1+|+NewsLetter Dea+|+Seminar/White=+|                |
 |         |+Co. Picnic/All+|+==============================Sales Drive/District 7==============================+|                |
 |.........|................|................|................|................|................|................|................|
 |---------+----------------+----------------+----------------+----------------+----------------+----------------+----------------|
 |         |       21       |       22       |       23       |       24       |       25       |       26       |       27       |
 |.........|................|................|................|................|................|................|................|
 | CAL1    |                |                |                |+Birthday/Mary=+|+=====Close Sale/WYGIX Co.======+|                |
 |         |                |+=============Inventors Show/Melvin==============+|+Planning Counc+|                |                |
 |.........|................|................|................|................|................|................|................|
 | CAL2    |                |                |                |                |                |                |+Ballgame/Famil+|
 |---------+----------------+----------------+----------------+----------------+----------------+----------------+----------------|
 |         |       28       |       29       |       30       |       31       |                |                |                |
 |.........|................|................|................|................|................|................|................|
 | CAL2    |                |****vacation****|                |                |                |                |                |
 |         |                |                |                |                |                |                |                |
 |         |                |                |                |                |                |                |                |
 |         |                |                |                |                |                |                |                |
 ----------------------------------------------------------------------------------------------------------------------------------






                                                       이것은 첫번째 줄입니다
                                                       이것은 두번째 줄입니다
                                                       이것은 세번째 줄입니다

                                                           The SAS System                                                         10

  -------------------------------------------------------------------------------------------------------------------------------
  |                                                                                                                             |
  |                                                          7월  1986                                                          |
  |                                                                                                                             |
  |-----------------------------------------------------------------------------------------------------------------------------|
  |     일요일      |     월요일      |     화요일      |     수요일      |     목요일      |     금요일      |     토요일      |
  |-----------------+-----------------+-----------------+-----------------+-----------------+-----------------+-----------------|
  |                 |                 |        1        |        2        |        3        |        4        |        5        |
  |                 |                 |                 |                 |                 |                 |                 |
  |                 |                 |                 |                 |                 |                 |                 |
  |                 |                 |                 |                 |                 |                 |                 |
  |                 |                 |                 |                 |                 |                 |                 |
  |                 |                 |                 |                 |+=========project/JW/CAL1=========>|                 |
  |-----------------+-----------------+-----------------+-----------------+-----------------+-----------------+-----------------|
  |        6        |        7        |        8        |        9        |       10        |       11        |       12        |
  |                 |                 |                 |                 |                 |                 |                 |
  |                 |                 |                 |                 |                 |                 |                 |
  |                 |                 |                 |                 |                 |                 |                 |
  |                 |+finish/JW/CAL1=+|                 |                 |                 |                 |                 |
  |                 |<project/JW/CAL1+|                 |                 |                 |                 |                 |
  |-----------------+-----------------+-----------------+-----------------+-----------------+-----------------+-----------------|
  |       13        |       14        |       15        |       16        |       17        |       18        |       19        |
  |                 |                 |                 |                 |                 |                 |                 |
  |                 |                 |                 |                 |                 |                 |                 |
  |                 |                 |                 |                 |                 |                 |                 |
  |                 |                 |                 |                 |                 |                 |                 |
  |                 |                 |                 |                 |                 |                 |                 |
  |-----------------+-----------------+-----------------+-----------------+-----------------+-----------------+-----------------|
  |       20        |       21        |       22        |       23        |       24        |       25        |       26        |
  |                 |                 |                 |                 |                 |                 |                 |
  |                 |                 |                 |                 |                 |                 |                 |
  |                 |                 |                 |                 |                 |                 |                 |
  |                 |                 |                 |                 |                 |                 |                 |
  |                 |                 |                 |                 |                 |                 |                 |
  |-----------------+-----------------+-----------------+-----------------+-----------------+-----------------+-----------------|
  |       27        |       28        |       29        |       30        |       31        |                 |                 |
  |                 |                 |                 |                 |                 |                 |                 |
  |                 |                 |                 |                 |                 |                 |                 |
  |                 |                 |                 |                 |                 |                 |                 |
  |                 |                 |                 |                 |                 |                 |                 |
  |                 |                 |                 |                 |                 |                 |                 |
  -------------------------------------------------------------------------------------------------------------------------------







                                                       이것은 첫번째 줄입니다
                                                       이것은 두번째 줄입니다
                                                       이것은 세번째 줄입니다

                                                           The SAS System                                                         11

  -------------------------------------------------------------------------------------------------------------------------------
  |                                                                                                                             |
  |                                                          7월  1986                                                          |
  |                                                                                                                             |
  |-----------------------------------------------------------------------------------------------------------------------------|
  |     일요일      |     월요일      |     화요일      |     수요일      |     목요일      |     금요일      |     토요일      |
  |-----------------+-----------------+-----------------+-----------------+-----------------+-----------------+-----------------|
  |                 |                 |        1        |        2        |        3        |        4        |        5        |
  |                 |                 |                 |                 |                 |                 |                 |
  |                 |                 |                 |                 |                 |                 |                 |
  |                 |                 |                 |                 |                 |                 |                 |
  |                 |                 |                 |                 |                 |                 |                 |
  |                 |                 |                 |                 |+==project/JW===>|**Independence***|                 |
  |-----------------+-----------------+-----------------+-----------------+-----------------+-----------------+-----------------|
  |        6        |        7        |        8        |        9        |       10        |       11        |       12        |
  |                 |                 |                 |                 |                 |                 |                 |
  |                 |                 |                 |                 |                 |                 |                 |
  |                 |                 |                 |                 |                 |                 |                 |
  |                 |+===finish/JW===+|                 |                 |                 |                 |                 |
  |                 |<===========project/JW============+|                 |                 |                 |                 |
  |-----------------+-----------------+-----------------+-----------------+-----------------+-----------------+-----------------|
  |       13        |       14        |       15        |       16        |       17        |       18        |       19        |
  |                 |                 |                 |                 |                 |                 |                 |
  |                 |                 |                 |                 |                 |                 |                 |
  |                 |                 |                 |                 |                 |                 |                 |
  |                 |                 |                 |                 |                 |                 |                 |
  |                 |                 |                 |                 |                 |                 |                 |
  |-----------------+-----------------+-----------------+-----------------+-----------------+-----------------+-----------------|
  |       20        |       21        |       22        |       23        |       24        |       25        |       26        |
  |                 |                 |                 |                 |                 |                 |                 |
  |                 |                 |                 |                 |                 |                 |                 |
  |                 |                 |                 |                 |                 |                 |                 |
  |                 |                 |                 |                 |                 |                 |                 |
  |                 |                 |                 |                 |                 |                 |                 |
  |-----------------+-----------------+-----------------+-----------------+-----------------+-----------------+-----------------|
  |       27        |       28        |       29        |       30        |       31        |                 |                 |
  |                 |                 |                 |                 |                 |                 |                 |
  |                 |                 |                 |                 |                 |                 |                 |
  |                 |                 |                 |                 |                 |                 |                 |
  |                 |                 |                 |                 |                 |                 |                 |
  |                 |                 |                 |                 |                 |                 |                 |
  -------------------------------------------------------------------------------------------------------------------------------







                                                       이것은 첫번째 줄입니다
                                                       이것은 두번째 줄입니다
                                                       이것은 세번째 줄입니다

                                                           The SAS System                                                         12

  -------------------------------------------------------------------------------------------------------------------------------
  |                                                                                                                             |
  |                                                          7월  1986                                                          |
  |                                                                                                                             |
  |-----------------------------------------------------------------------------------------------------------------------------|
  |     일요일      |     월요일      |     화요일      |     수요일      |     목요일      |     금요일      |     토요일      |
  |-----------------+-----------------+-----------------+-----------------+-----------------+-----------------+-----------------|
  |                 |                 |        1        |        2        |        3        |        4        |        5        |
  |                 |                 |                 |                 |                 |                 |                 |
  |                 |                 |                 |                 |                 |                 |                 |
  |                 |                 |                 |                 |                 |                 |                 |
  |                 |                 |                 |                 |                 |                 |                 |
  |                 |                 |                 |                 |+==project/JW===>|**Independence***|                 |
  |-----------------+-----------------+-----------------+-----------------+-----------------+-----------------+-----------------|
  |        6        |        7        |        8        |        9        |       10        |       11        |       12        |
  |                 |                 |                 |                 |                 |                 |                 |
  |                 |                 |                 |                 |                 |                 |                 |
  |                 |                 |                 |                 |                 |                 |                 |
  |                 |**Independence***|+===finish/JW===+|                 |                 |                 |                 |
  |                 |**Independence***|<===========project/JW============+|                 |                 |                 |
  |-----------------+-----------------+-----------------+-----------------+-----------------+-----------------+-----------------|
  |       13        |       14        |       15        |       16        |       17        |       18        |       19        |
  |                 |                 |                 |                 |                 |                 |                 |
  |                 |                 |                 |                 |                 |                 |                 |
  |                 |                 |                 |                 |                 |                 |                 |
  |                 |                 |                 |                 |                 |                 |                 |
  |                 |                 |                 |                 |                 |                 |                 |
  |-----------------+-----------------+-----------------+-----------------+-----------------+-----------------+-----------------|
  |       20        |       21        |       22        |       23        |       24        |       25        |       26        |
  |                 |                 |                 |                 |                 |                 |                 |
  |                 |                 |                 |                 |                 |                 |                 |
  |                 |                 |                 |                 |                 |                 |                 |
  |                 |                 |                 |                 |                 |                 |                 |
  |                 |                 |                 |                 |                 |                 |                 |
  |-----------------+-----------------+-----------------+-----------------+-----------------+-----------------+-----------------|
  |       27        |       28        |       29        |       30        |       31        |                 |                 |
  |                 |                 |                 |                 |                 |                 |                 |
  |                 |                 |                 |                 |                 |                 |                 |
  |                 |                 |                 |                 |                 |                 |                 |
  |                 |                 |                 |                 |                 |                 |                 |
  |                 |                 |                 |                 |                 |                 |                 |
  -------------------------------------------------------------------------------------------------------------------------------







                                                       이것은 첫번째 줄입니다
                                                       이것은 두번째 줄입니다
                                                       이것은 세번째 줄입니다

                                            Meals Served in Community Hospital Cafeteria                                          13

                    --------------------------------------------------------------------------------------------
                    |                                                                                          |
                    |                                        12월  1991                                        |
                    |                                                                                          |
                    |------------------------------------------------------------------------------------------|
                    |   일요일   |   월요일   |   화요일   |   수요일   |   목요일   |   금요일   |   토요일   |
                    |------------+------------+------------+------------+------------+------------+------------|
                    |      1     |      2     |      3     |      4     |      5     |      6     |      7     |
                    |            |            |            |            |            |            |            |
                    | 123 Brkfst | 123 Brkfst | 188 Brkfst | 123 Brkfst | 200 Brkfst | 176 Brkfst | 156 Brkfst |
                    | 234 Lunch  | 234 Lunch  | 188 Lunch  | 183 Lunch  | 267 Lunch  | 165 Lunch  |          . |
                    | 123 Dinner | 238 Dinner | 198 Dinner | 176 Dinner | 243 Dinner | 177 Dinner | 167 Dinner |
                    |------------+------------+------------+------------+------------+------------+------------|
                    |      8     |      9     |     10     |     11     |     12     |     13     |     14     |
                    |            |            |            |            |            |            |            |
                    | 198 Brkfst | 178 Brkfst | 165 Brkfst | 187 Brkfst | 176 Brkfst | 187 Brkfst | 164 Brkfst |
                    | 143 Lunch  | 198 Lunch  | 176 Lunch  | 176 Lunch  | 187 Lunch  | 187 Lunch  | 187 Lunch  |
                    | 167 Dinner | 187 Dinner | 187 Dinner | 231 Dinner | 222 Dinner | 123 Dinner | 231 Dinner |
                    |------------+------------+------------+------------+------------+------------+------------|
                    |     15     |     16     |     17     |     18     |     19     |     20     |     21     |
                    |            |            |            |            |            |            |            |
                    | 187 Brkfst | 187 Brkfst | 198 Brkfst | 187 Brkfst | 187 Brkfst | 156 Brkfst | 176 Brkfst |
                    | 165 Lunch  | 198 Lunch  | 187 Lunch  | 165 Lunch  | 176 Lunch  | 211 Lunch  | 156 Lunch  |
                    | 167 Dinner | 156 Dinner | 156 Dinner | 178 Dinner | 156 Dinner | 199 Dinner | 143 Dinner |
                    |------------+------------+------------+------------+------------+------------+------------|
                    |     22     |     23     |     24     |     25     |     26     |     27     |     28     |
                    |            |            |            |*Christmas**|            |            |            |
                    | 165 Brkfst | 187 Brkfst | 185 Brkfst | 187 Brkfst | 167 Brkfst | 167 Brkfst | 267 Brkfst |
                    | 167 Lunch  | 176 Lunch  | 167 Lunch  | 178 Lunch  | 156 Lunch  | 239 Lunch  | 287 Lunch  |
                    | 211 Dinner |          . | 167 Dinner | 187 Dinner | 198 Dinner | 267 Dinner | 256 Dinner |
                    |------------+------------+------------+------------+------------+------------+------------|
                    |     29     |     30     |     31     |            |            |            |            |
                    |            |            |            |            |            |            |            |
                    | 276 Brkfst | 267 Brkfst | 243 Brkfst |            |            |            |            |
                    | 243 Lunch  | 287 Lunch  | 231 Lunch  |            |            |            |            |
                    | 234 Dinner | 256 Dinner | 243 Dinner |            |            |            |            |
                    --------------------------------------------------------------------------------------------

                                               -------------------------------------
                                               |                   | 합계 |  평균  |
                                               |                   |      |        |
                                               | Breakfasts Served | 5733 | 184.94 |
                                               |    Lunches Served | 5914 | 197.13 |
                                               |    Dinners Served | 5844 | 194.80 |
                                               -------------------------------------






                                                       이것은 첫번째 줄입니다
                                                       이것은 두번째 줄입니다
                                                       이것은 세번째 줄입니다

                                                     System Performance Summary                                                   14
                                                First National Bank Computer Center
                                                    Mean Usage per Business Day

                           ------------------------------------------------------------------------------
                           |                                                                            |
                           |                                 5월  1988                                  |
                           |                                                                            |
                           |----------------------------------------------------------------------------|
                           |  일요일  |  월요일  |  화요일  |  수요일  |  목요일  |  금요일  |  토요일  |
                           |----------+----------+----------+----------+----------+----------+----------|
                           |     1    |     2    |     3    |     4    |     5    |     6    |     7    |
                           |          |          |          |          |          |          |          |
                           |          | 873 jobs | 881 jobs | 940 jobs | 194 jobs | 154 jobs |          |
                           |          | 22.1 act | 23.8 act | 24.0 act |  5.3 act | 17.4 act |          |
                           |          |  7.6 cpu | 11.7 cpu |  7.7 cpu |  1.5 cpu |  7.1 cpu |          |
                           |----------+----------+----------+----------+----------+----------+----------|
                           |     8    |     9    |    10    |    11    |    12    |    13    |    14    |
                           |          |          |          |          |          |          |          |
                           |          | 807 jobs | 829 jobs | 915 jobs | 388 jobs | 000 jobs |          |
                           |          | 24.0 act | 23.4 act | 24.0 act | 21.0 act | 00.0 act |          |
                           |          | 10.5 cpu | 10.5 cpu | 10.6 cpu |  6.9 cpu | 00.0 cpu |          |
                           |----------+----------+----------+----------+----------+----------+----------|
                           |    15    |    16    |    17    |    18    |    19    |    20    |    21    |
                           |          |          |          |          |          |          |          |
                           |          | 806 jobs | 848 jobs | 906 jobs | 103 jobs | 103 jobs |          |
                           |          | 24.0 act | 23.6 act | 23.0 act | 23.4 act | 20.1 act |          |
                           |          | 10.0 cpu | 10.5 cpu | 10.1 cpu | 18.7 cpu | 20.0 cpu |          |
                           |----------+----------+----------+----------+----------+----------+----------|
                           |    22    |    23    |    24    |    25    |    26    |    27    |    28    |
                           |          |          |          |          |          |          |          |
                           |          | 729 jobs | 652 jobs | 809 jobs | 168 jobs |  85 jobs |          |
                           |          | 24.0 act | 21.3 act | 23.8 act | 15.8 act |  7.0 act |          |
                           |          |  4.9 cpu | 12.2 cpu | 12.3 cpu | 10.7 cpu |  5.6 cpu |          |
                           |----------+----------+----------+----------+----------+----------+----------|
                           |    29    |    30    |    31    |          |          |          |          |
                           |          |          |          |          |          |          |          |
                           |          |          | 100 jobs |          |          |          |          |
                           |          |          | 11.1 act |          |          |          |          |
                           |          |          |  1.8 cpu |          |          |          |          |
                           ------------------------------------------------------------------------------

                                                -----------------------------------
                                                |              |  합계   |  평균  |
                                                |              |         |        |
                                                | Jobs Run     |   11290 |  564.5 |
                                                | Active Hours |     402 |   20.1 |
                                                | Cpu Hours    |     191 |    9.5 |
                                                -----------------------------------





                                                       이것은 첫번째 줄입니다
                                                       이것은 두번째 줄입니다
                                                       이것은 세번째 줄입니다

                                                     System Performance Summary                                                   15
                                                First National Bank Computer Center
                                                         Mean Usage per Day

                           ------------------------------------------------------------------------------
                           |                                                                            |
                           |                                 5월  1988                                  |
                           |                                                                            |
                           |----------------------------------------------------------------------------|
                           |  일요일  |  월요일  |  화요일  |  수요일  |  목요일  |  금요일  |  토요일  |
                           |----------+----------+----------+----------+----------+----------+----------|
                           |     1    |     2    |     3    |     4    |     5    |     6    |     7    |
                           |          |          |          |          |          |          |          |
                           | 000 jobs | 873 jobs | 881 jobs | 940 jobs | 194 jobs | 154 jobs | 000 jobs |
                           | 00.0 act | 22.1 act | 23.8 act | 24.0 act |  5.3 act | 17.4 act | 00.0 act |
                           | 00.0 cpu |  7.6 cpu | 11.7 cpu |  7.7 cpu |  1.5 cpu |  7.1 cpu | 00.0 cpu |
                           |----------+----------+----------+----------+----------+----------+----------|
                           |     8    |     9    |    10    |    11    |    12    |    13    |    14    |
                           |          |          |          |          |          |          |          |
                           | 000 jobs | 807 jobs | 829 jobs | 915 jobs | 388 jobs | 000 jobs | 000 jobs |
                           | 00.0 act | 24.0 act | 23.4 act | 24.0 act | 21.0 act | 00.0 act | 00.0 act |
                           | 00.0 cpu | 10.5 cpu | 10.5 cpu | 10.6 cpu |  6.9 cpu | 00.0 cpu | 00.0 cpu |
                           |----------+----------+----------+----------+----------+----------+----------|
                           |    15    |    16    |    17    |    18    |    19    |    20    |    21    |
                           |          |          |          |          |          |          |          |
                           | 000 jobs | 806 jobs | 848 jobs | 906 jobs | 103 jobs | 103 jobs | 000 jobs |
                           | 00.0 act | 24.0 act | 23.6 act | 23.0 act | 23.4 act | 20.1 act | 00.0 act |
                           | 00.0 cpu | 10.0 cpu | 10.5 cpu | 10.1 cpu | 18.7 cpu | 20.0 cpu | 00.0 cpu |
                           |----------+----------+----------+----------+----------+----------+----------|
                           |    22    |    23    |    24    |    25    |    26    |    27    |    28    |
                           |          |          |          |          |          |          |          |
                           | 000 jobs | 729 jobs | 652 jobs | 809 jobs | 168 jobs |  85 jobs | 000 jobs |
                           | 00.0 act | 24.0 act | 21.3 act | 23.8 act | 15.8 act |  7.0 act | 00.0 act |
                           | 00.0 cpu |  4.9 cpu | 12.2 cpu | 12.3 cpu | 10.7 cpu |  5.6 cpu | 00.0 cpu |
                           |----------+----------+----------+----------+----------+----------+----------|
                           |    29    |    30    |    31    |          |          |          |          |
                           |          |          |          |          |          |          |          |
                           | 000 jobs | 000 jobs | 100 jobs |          |          |          |          |
                           | 00.0 act | 00.0 act | 11.1 act |          |          |          |          |
                           | 00.0 cpu | 00.0 cpu |  1.8 cpu |          |          |          |          |
                           ------------------------------------------------------------------------------

                                               -------------------------------------
                                               |                |  합계   |  평균  |
                                               |                |         |        |
                                               | Jobs Run Daily |   11290 |  364.2 |
                                               | Active Hours   |     402 |   13.0 |
                                               | Cpu Hours      |     191 |    6.2 |
                                               -------------------------------------





                                                       이것은 첫번째 줄입니다
                                                       이것은 두번째 줄입니다
                                                       이것은 세번째 줄입니다

                                            Well Drilling Cost Summary:  Output=Separate                                          16

............................................................ _cal_=CAL1 ............................................................

        -------------------------------------------------------------------------------------------------------------------
        |                                                                                                                 |
        |                                                    7월  1985                                                    |
        |                                                                                                                 |
        |-----------------------------------------------------------------------------------------------------------------|
        |      월요일      |      화요일      |      수요일      |      목요일      |      금요일      |      토요일      |
        |------------------+------------------+------------------+------------------+------------------+------------------|
        |         1        |         2        |         3        |         4        |         5        |         6        |
        |                  |                  |                  |***Independence***|                  |                  |
        | Drill Well       |                  |                  | Lay Power Line   | Assemble Tank    |                  |
        |              3.5 |                  |                  |                3 |                4 |                  |
        |        $1,000.00 |                  |                  |        $2,000.00 |        $1,000.00 |                  |
        |------------------+------------------+------------------+------------------+------------------+------------------|
        |         8        |         9        |        10        |        11        |        12        |        13        |
        |                  |                  |                  |                  |                  |                  |
        | Build Pump House |                  |                  | Pour Foundation  |                  |                  |
        |                3 |                  |                  |                4 |                  |                  |
        |        $2,000.00 |                  |                  |        $1,500.00 |                  |                  |
        |------------------+------------------+------------------+------------------+------------------+------------------|
        |        15        |        16        |        17        |        18        |        19        |        20        |
        |                  |                  |                  |                  |                  |                  |
        | Install Pump     |                  |                  |                  | Install Pipe     | Erect Tower      |
        |                4 |                  |                  |                  |                2 |                6 |
        |          $500.00 |                  |                  |                  |        $1,000.00 |        $2,500.00 |
        |------------------+------------------+------------------+------------------+------------------+------------------|
        |        22        |        23        |        24        |        25        |        26        |        27        |
        |                  |                  |                  |                  |                  |                  |
        |                  |                  |                  |                  |                  |                  |
        |                  |                  |                  |                  |                  |                  |
        |                  |                  |                  |                  |                  |                  |
        |------------------+------------------+------------------+------------------+------------------+------------------|
        |        29        |        30        |        31        |                  |                  |                  |
        |                  |                  |                  |                  |                  |                  |
        |                  |                  |                  |                  |                  |                  |
        |                  |                  |                  |                  |                  |                  |
        |                  |                  |                  |                  |                  |                  |
        -------------------------------------------------------------------------------------------------------------------

                                                      ------------------------
                                                      |   범례   |   합계    |
                                                      |          |           |
                                                      | task     |           |
                                                      | dur      |           |
                                                      | cost     | $11500.00 |
                                                      ------------------------





                                                       이것은 첫번째 줄입니다
                                                       이것은 두번째 줄입니다
                                                       이것은 세번째 줄입니다

                                            Well Drilling Cost Summary:  Output=Separate                                          17

............................................................ _cal_=CAL2 ............................................................

        -------------------------------------------------------------------------------------------------------------------
        |                                                                                                                 |
        |                                                    7월  1985                                                    |
        |                                                                                                                 |
        |-----------------------------------------------------------------------------------------------------------------|
        |      월요일      |      화요일      |      수요일      |      목요일      |      금요일      |      토요일      |
        |------------------+------------------+------------------+------------------+------------------+------------------|
        |         1        |         2        |         3        |         4        |         5        |         6        |
        |                  |                  |                  |                  |                  |                  |
        | Deliver Material |                  | Excavate         |                  |                  |                  |
        |                2 |                  |             4.75 |                  |                  |                  |
        |          $500.00 |                  |        $3,500.00 |                  |                  |                  |
        |------------------+------------------+------------------+------------------+------------------+------------------|
        |         8        |         9        |        10        |        11        |        12        |        13        |
        |*****Vacation*****|                  |                  |                  |                  |                  |
        |                  |                  |                  |                  |                  |                  |
        |                  |                  |                  |                  |                  |                  |
        |                  |                  |                  |                  |                  |                  |
        |------------------+------------------+------------------+------------------+------------------+------------------|
        |        15        |        16        |        17        |        18        |        19        |        20        |
        |                  |                  |                  |                  |                  |                  |
        |                  |                  |                  |                  |                  |                  |
        |                  |                  |                  |                  |                  |                  |
        |                  |                  |                  |                  |                  |                  |
        |------------------+------------------+------------------+------------------+------------------+------------------|
        |        22        |        23        |        24        |        25        |        26        |        27        |
        |                  |                  |                  |                  |                  |                  |
        |                  |                  |                  |                  |                  |                  |
        |                  |                  |                  |                  |                  |                  |
        |                  |                  |                  |                  |                  |                  |
        |------------------+------------------+------------------+------------------+------------------+------------------|
        |        29        |        30        |        31        |                  |                  |                  |
        |                  |                  |                  |                  |                  |                  |
        |                  |                  |                  |                  |                  |                  |
        |                  |                  |                  |                  |                  |                  |
        |                  |                  |                  |                  |                  |                  |
        -------------------------------------------------------------------------------------------------------------------

                                                      ------------------------
                                                      |   범례   |   합계    |
                                                      |          |           |
                                                      | task     |           |
                                                      | dur      |           |
                                                      | cost     | $4,000.00 |
                                                      ------------------------





                                                       이것은 첫번째 줄입니다
                                                       이것은 두번째 줄입니다
                                                       이것은 세번째 줄입니다

                                            Well Drilling Cost Summary:  Output=Combine                                           18

             -------------------------------------------------------------------------------------------------------------------
             |                                                                                                                 |
             |                                                    7월  1985                                                    |
             |                                                                                                                 |
             |-----------------------------------------------------------------------------------------------------------------|
             |      월요일      |      화요일      |      수요일      |      목요일      |      금요일      |      토요일      |
   ----------+------------------+------------------+------------------+------------------+------------------+------------------|
   |         |         1        |         2        |         3        |         4        |         5        |         6        |
   |.........|..................|..................|..................|..................|..................|..................|
   | CAL1    | Drill Well       |                  |                  | Lay Power Line   | Assemble Tank    |                  |
   |         |              3.5 |                  |                  |                3 |                4 |                  |
   |         |        $1,000.00 |                  |                  |        $2,000.00 |        $1,000.00 |                  |
   |.........|..................|..................|..................|..................|..................|..................|
   |---------+------------------+------------------+------------------+------------------+------------------+------------------|
   |         |         8        |         9        |        10        |        11        |        12        |        13        |
   |.........|..................|..................|..................|..................|..................|..................|
   | CAL1    | Build Pump House |                  |                  | Pour Foundation  |                  |                  |
   |         |                3 |                  |                  |                4 |                  |                  |
   |         |        $2,000.00 |                  |                  |        $1,500.00 |                  |                  |
   |         |                  |                  |                  |                  |                  |                  |
   |---------+------------------+------------------+------------------+------------------+------------------+------------------|
   |         |        15        |        16        |        17        |        18        |        19        |        20        |
   |.........|..................|..................|..................|..................|..................|..................|
   | CAL1    | Install Pump     |                  |                  |                  | Install Pipe     | Erect Tower      |
   |         |                4 |                  |                  |                  |                2 |                6 |
   |         |          $500.00 |                  |                  |                  |        $1,000.00 |        $2,500.00 |
   |         |                  |                  |                  |                  |                  |                  |
   |---------+------------------+------------------+------------------+------------------+------------------+------------------|
   |         |        22        |        23        |        24        |        25        |        26        |        27        |
   |         |                  |                  |                  |                  |                  |                  |
   |         |                  |                  |                  |                  |                  |                  |
   |         |                  |                  |                  |                  |                  |                  |
   |         |                  |                  |                  |                  |                  |                  |
   |         |                  |                  |                  |                  |                  |                  |
   |---------+------------------+------------------+------------------+------------------+------------------+------------------|
   |         |        29        |        30        |        31        |                  |                  |                  |
   |         |                  |                  |                  |                  |                  |                  |
   |         |                  |                  |                  |                  |                  |                  |
   |         |                  |                  |                  |                  |                  |                  |
   |         |                  |                  |                  |                  |                  |                  |
   |         |                  |                  |                  |                  |                  |                  |
   -----------------------------------------------------------------------------------------------------------------------------







                                                       이것은 첫번째 줄입니다
                                                       이것은 두번째 줄입니다
                                                       이것은 세번째 줄입니다

                                            Well Drilling Cost Summary:  Output=Combine                                           19

                                                 ----------------------------------
                                                 |         |   범례   |   합계    |
                                                 |.........|..........|...........|
                                                 | DEFAULT | task     |           |
                                                 |         | dur      |           |
                                                 |         | cost     |     $0.00 |
                                                 |.........|..........|...........|
                                                 | CAL1    | task     |           |
                                                 |         | dur      |           |
                                                 |         | cost     | $11500.00 |
                                                 |.........|..........|...........|
                                                 | CAL2    | task     |           |
                                                 |         | dur      |           |
                                                 |         | cost     | $4,000.00 |
                                                 |=========|==========|===========|
                                                 |         | task     |           |
                                                 |         | dur      |           |
                                                 |         | cost     | $15500.00 |
                                                 ----------------------------------



















                                                       이것은 첫번째 줄입니다
                                                       이것은 두번째 줄입니다
                                                       이것은 세번째 줄입니다

                                              Well Drilling Cost Summary:  Output=Mix                                             20

        -------------------------------------------------------------------------------------------------------------------
        |                                                                                                                 |
        |                                                    7월  1985                                                    |
        |                                                                                                                 |
        |-----------------------------------------------------------------------------------------------------------------|
        |      월요일      |      화요일      |      수요일      |      목요일      |      금요일      |      토요일      |
        |------------------+------------------+------------------+------------------+------------------+------------------|
        |         1        |         2        |         3        |         4        |         5        |         6        |
        |                  |                  |                  |***Independence***|                  |                  |
        | Deliver Material |                  | Excavate         | Lay Power Line   | Assemble Tank    |                  |
        |                2 |                  |             4.75 |                3 |                4 |                  |
        |          $500.00 |                  |        $3,500.00 |        $2,000.00 |        $1,000.00 |                  |
        |------------------+------------------+------------------+------------------+------------------+------------------|
        |         8        |         9        |        10        |        11        |        12        |        13        |
        |                  |                  |                  |                  |                  |                  |
        | Build Pump House |                  |                  | Pour Foundation  |                  |                  |
        |                3 |                  |                  |                4 |                  |                  |
        |        $2,000.00 |                  |                  |        $1,500.00 |                  |                  |
        |------------------+------------------+------------------+------------------+------------------+------------------|
        |        15        |        16        |        17        |        18        |        19        |        20        |
        |                  |                  |                  |                  |                  |                  |
        | Install Pump     |                  |                  |                  | Install Pipe     | Erect Tower      |
        |                4 |                  |                  |                  |                2 |                6 |
        |          $500.00 |                  |                  |                  |        $1,000.00 |        $2,500.00 |
        |------------------+------------------+------------------+------------------+------------------+------------------|
        |        22        |        23        |        24        |        25        |        26        |        27        |
        |                  |                  |                  |                  |                  |                  |
        |                  |                  |                  |                  |                  |                  |
        |                  |                  |                  |                  |                  |                  |
        |                  |                  |                  |                  |                  |                  |
        |------------------+------------------+------------------+------------------+------------------+------------------|
        |        29        |        30        |        31        |                  |                  |                  |
        |                  |                  |                  |                  |                  |                  |
        |                  |                  |                  |                  |                  |                  |
        |                  |                  |                  |                  |                  |                  |
        |                  |                  |                  |                  |                  |                  |
        -------------------------------------------------------------------------------------------------------------------

                                                      ------------------------
                                                      |   범례   |   합계    |
                                                      |          |           |
                                                      | task     |           |
                                                      | dur      |           |
                                                      | cost     | $14500.00 |
                                                      ------------------------









                                                       이것은 첫번째 줄입니다
                                                       이것은 두번째 줄입니다
                                                       이것은 세번째 줄입니다

                                       Summer Planning Calendar:  Julia Q. Wydget, President                                      21
                                                        Better Products Inc.

-----------------------------------------------------------------------------------------------------------------------------------
|                                                                                                                                 |
|                                                            7월  1991                                                            |
|                                                                                                                                 |
|---------------------------------------------------------------------------------------------------------------------------------|
|         월요일          |         화요일          |         수요일          |         목요일          |         금요일          |
|-------------------------+-------------------------+-------------------------+-------------------------+-------------------------|
|            1            |            2            |            3            |            4            |            5            |
|                         |                         |                         |******Independence*******|                         |
|                         |                         |                         |                         |                         |
|                         |                         |                         |                         |                         |
|                         |                         |                         |                         |                         |
|                         |                         |                         |                         |                         |
|                         |                         |+=====Interview/JW======+|                         |                         |
|+====Dist. Mtg./All=====+|+============Mgrs. Meeting/District 6=============+|                         |+====VIP Banquet/JW=====+|
|-------------------------+-------------------------+-------------------------+-------------------------+-------------------------|
|            8            |            9            |           10            |           11            |           12            |
|                         |                         |                         |                         |                         |
|                         |                         |                         |                         |                         |
|                         |                         |                         |                         |                         |
|                         |                         |                         |                         |                         |
|                         |                         |                         |+Planning Council/Group +|+=====Seminar/White=====+|
|+==============================Trade Show/Knox==============================+|+============Mgrs. Meeting/District 7=============+|
|+====================================================Sales Drive/District 6=====================================================+|
|-------------------------+-------------------------+-------------------------+-------------------------+-------------------------|
|           15            |           16            |           17            |           18            |           19            |
|                         |                         |                         |                         |                         |
|                         |                         |                         |                         |                         |
|                         |                         |                         |                         |                         |
|                         |                         |                         |                         |                         |
|                         |                         |                         |+Planning Council/Group +|+====Co. Picnic/All=====+|
|                         |+======Dentist/JW=======+|+=Bank Meeting/1st Natl=+|+NewsLetter Deadline/All+|+=====Seminar/White=====+|
|+====================================================Sales Drive/District 7=====================================================+|
|-------------------------+-------------------------+-------------------------+-------------------------+-------------------------|
|           22            |           23            |           24            |           25            |           26            |
|                         |                         |                         |                         |                         |
|                         |                         |                         |                         |                         |
|                         |                         |                         |                         |                         |
|                         |                         |                         |                         |                         |
|                         |                         |                         |                         |                         |
|                         |                         |+=====Birthday/Mary=====+|+==============Close Sale/WYGIX Co.===============+|
|+===========================Inventors Show/Melvin===========================+|+Planning Council/Group +|                         |
|-------------------------+-------------------------+-------------------------+-------------------------+-------------------------|
|           29            |           30            |           31            |                         |                         |
|********Vacation*********|********Vacation*********|********Vacation*********|                         |                         |
|                         |                         |                         |                         |                         |
|                         |                         |                         |                         |                         |
|                         |                         |                         |                         |                         |
|                         |                         |                         |                         |                         |
|                         |                         |                         |                         |                         |
|                         |                         |                         |                         |                         |
-----------------------------------------------------------------------------------------------------------------------------------


                                                       이것은 첫번째 줄입니다
                                                       이것은 두번째 줄입니다
                                                       이것은 세번째 줄입니다

                                           Well Drilling Work Schedule:  Output=Separate                                          22

............................................................ _cal_=CAL1 ............................................................

  -------------------------------------------------------------------------------------------------------------------------------
  |                                                                                                                             |
  |                                                          7월  1985                                                          |
  |                                                                                                                             |
  |-----------------------------------------------------------------------------------------------------------------------------|
  |       월요일       |       화요일       |       수요일       |       목요일       |       금요일       |       토요일       |
  |--------------------+--------------------+--------------------+--------------------+--------------------+--------------------|
  |          1         |          2         |          3         |          4         |          5         |          6         |
  |                    |                    |                    |****Independence****|                    |                    |
  |                    |                    |                    |                    |                    |                    |
  |                    |                    |                    |                    |+Assemble Tank/$1,0>|                    |
  |                    |                    |                    |                    |+Lay Power Line/$2,>|                    |
  |+====================Drill Well/$1,000.00====================>|                    |<Drill Well/$1,000.+|                    |
  |--------------------+--------------------+--------------------+--------------------+--------------------+--------------------|
  |          8         |          9         |         10         |         11         |         12         |         13         |
  |                    |                    |                    |                    |                    |                    |
  |                    |                    |                    |                    |                    |                    |
  |+===========================Build Pump House/$2,000.00============================+|                    |                    |
  |<=============================Assemble Tank/$1,000.00=============================+|                    |                    |
  |<=======Lay Power Line/$2,000.00========+|                    |+=======Pour Foundation/$1,500.00=======>|                    |
  |--------------------+--------------------+--------------------+--------------------+--------------------+--------------------|
  |         15         |         16         |         17         |         18         |         19         |         20         |
  |                    |                    |                    |                    |                    |                    |
  |                    |                    |                    |                    |                    |                    |
  |                    |                    |                    |                    |                    |                    |
  |+=========================================Install Pump/$500.00=========================================+|                    |
  |<=================Pour Foundation/$1,500.00==================+|                    |+Install Pipe/$1,00>|                    |
  |--------------------+--------------------+--------------------+--------------------+--------------------+--------------------|
  |         22         |         23         |         24         |         25         |         26         |         27         |
  |                    |                    |                    |                    |                    |                    |
  |                    |                    |                    |                    |                    |                    |
  |                    |                    |                    |                    |                    |                    |
  |+========================================Erect Tower/$2,500.00=========================================>|                    |
  |<========Install Pipe/$1,000.00=========+|                    |                    |                    |                    |
  |--------------------+--------------------+--------------------+--------------------+--------------------+--------------------|
  |       &nb