통수정의 성장기

SAS_데이터 가공 및 처리[OUT,RANK,STANDARD,SORT,PRINT,FORMAT,CONTENTS] 본문

SAS통계프로그래밍

SAS_데이터 가공 및 처리[OUT,RANK,STANDARD,SORT,PRINT,FORMAT,CONTENTS]

jinijinhee 2022. 6. 21. 22:03

<목차>

  1. OUT 데이터 셋의 이용
  2. 순위의 계산 : RANK 프로시저
  3. 표준화 : STANDARD 프로시저
  4. 데이터셋의 정렬 : SORT 프로시저
  5. 데이터셋의 출력 : PRINT 프로시저
  6. 사용자 출력 포맷의 작성 : FORMAT프로시저
  7. 개체와 변수의 자리바꿈 : TRANSPOSE프로시저
  8. 데이터셋의 관리 : CONTENTS 프로시저
  9. 출력결과 및 로그의 저장 : PRINTO 프로시저

OUT 데이터 셋의 이용

PROC MEANS DATA=mysas.htwt NOPRINT;
	CLASS gender dept;
	VAR age height weight;
	OUTPUT OUT=mysas.htwt_m1
		MEAN(age height weight)=mean_a mean_h mean_w
		SUM(age height weight)=sum_a sum_h sum_w;
RUN;

 CLASS변수 sex와 dept 자료의 값에 따른 변수 age, height, weigh의 평균을 계산

 OUTPUT 명령문에 의해 이 평균값들로 구성된 새로운 데이터셋 mean_out을 생성

 새로운 데이터셋의 이름은 OUT=옵션으로 지정하며, 저장하고자 하는 통계량을 statistickeyword= 형태로 지정 (UNIVARIATE 또는 SUMMARY 프로시저에서도 이와 동일)

  • MEANS 프로시저의 옵션
    •  NWAY 옵션 : 자동변수 _TYPE_이 3인 6개의 데이터만 데이터셋으로 저장
    •  NOPRINT 옵션 : MEANS 프로시저의 결과를 OUTPUT 윈도우에 출력하지 않도록 지정
  • SUMMARY 프로시저
    • : MEANS 프로시저와 거의 유사한 기능 
      •  주로 계산된 기술통계량들에 의해 새로운 데이터셋을 생성하기 위해서 사용
      •  PRINT 옵션을 사용하지 않으면 결과를 출력하지 않음
PROC SUMMARY DATA=mysas.htwt NWAY;
	CLASS dept;
	VAR age height weight;
	OUTPUT OUT=height_m MEAN(height weight)=mean_h mean_w; 
RUN;

순위의 계산 : RANK 프로시저

  • RANK 프로시저
  •  하나 또는 그 이상의 숫자변수에 대한 순위(rank) 계산 (가장 작은 값을 순위 1로 계산)
  •  원래변수의 값들 대신 이들 순위를 포함하는 새로운 SAS 데이터셋을 생성
  •  일반적인 사용형식
PROC RANK DATA=mysas.htwt OUT=rank_hw TIES=LOW;
	VAR age height weight;
	RANKS r_age r_height r_weight;
RUN;

 VAR : 순위를 계산하는 변수 지정

 RANKS : VAR에 지정한 변수에 대응하는 순위변수 생성 (VAR의 변수와 개수 일치)

  • PROC RANK 옵션
    •  OUT=new-SAS-data-set : 계산된 순위들을 저장할 새로운 데이터셋 이름을 지정
    •  OUT=옵션 생략하면, 기존의 데이터셋이 이 프로시저의 수행결과로 얻어지는 데이터 셋으로 대체됨.
    •  TIES=옵션 : 둘 이상의 개체가 같은 순위를 가질 때 그 개체들에 순위를 주는 기준을 지정
    •  MEAN(순위들의 평균), HIGH(순위들 중 높은 값), LOW(순위들 중 낮은 값) 중 선택
    •  DESCENDING 옵션 : 가장 큰 값을 순위 1로 계산
    •  RANKS 명령문 : 기존의 변수를 그대로 유지한 상태에서 새로운 순위변수들을 생성
    •  GROUP=g 옵션 : 순위 대신 백분위수, 십분위수, 사분위수 등과 같이 전체 자료를 g등분 하였을 때의 등위값을 구하고자 하는 경우 사용

표준화 : STANDARD 프로시저

PROC STANDARD DATA=mysas.htwt OUT=stand_hw REPLACE;
	VAR height weight;
RUN;
  • PROC STANDARD 옵션
    •  OUT=옵션 생략 : 새로운 자료의 값으로 기존의 데이터셋을 대체(RANK, STANDARD 프로시저 등 )
    •  REPLACE 옵션 : 결측값에 대해서 그 변수의 평균값으로 대치
    •  REPLACE 옵션과 MEAN=옵션을 함께 사용 : 결측값은 이 옵션에 주어진 값으로 대치

데이터셋의 정렬 : SORT 프로시저

: 하나 또는 그 이상의 BY 변수에 의해서 데이터셋을 정렬

PROC SORT DATA=mysas.htwt OUT=new_htwt;
	BY age;
RUN;

* 해당 변수 앞에 descending 다 써줘야함. 아님 안써준건 오름차순~ ;
PROC SORT DATA=mysas.htwt OUT=new_htwt;
	BY dept DESCENDING height;
RUN;

* 중복제거 : NODUPKEY;  
PROC SORT DATA=mysas.htwt OUT=new_htwt1 NODUPKEY;
	BY dept DESCENDING height;
RUN;

 BY : BY 문장에서 지정한 변수에 의해 오름차순(ASCENDING)으로 정렬, DESCENDIG를 지정할 경우에는 내림차순으로 정렬.

 OUT : SORT 절차에 의해 순서화된 자료를 OUT 문장에서 지정한 새로운 SAS 데이터셋으로 저장.

 정렬상태를 확인하기 위해서는 PRINT 프로시저나 VIEWTABLE 윈도우를 이용

 

  • PROC SORT 옵션
    •  NODUPKEY 옵션 : 데이터를 정렬한 후에 데이터셋 내의 BY변수들에 대해서 자료값이 동일한 개체가 있을 경우 중복되는 개체를 제거(no duplicate key) (즉, BY 변수들의 값이 모두 같은 경우 하나의 개체만을 남긴다)
    •  NODUPRECS 옵션 : 데이터셋 내의 모든 변수들에 대해서 자료값이 동일한 개체가 있을 경우 이런 중복되는 개체를 제거(no duplicate records) (즉, 모든 변수들의 값이 동일한 경우 하나의 개체만을 남긴다)

데이터셋의 출력 : PRINT 프로시저

PROC SORT DATA=mysas.htwt;
	BY dept ;
RUN;

PROC PRINT DATA=mysas.htwt LABEL;
	LABEL name='이름' gender='성별' age='나이' height='키(cm)' weight='몸무게(kg)';
	BY dept;
    pageby dept;
    SUM height weight;
RUN;

 BY : BY 변수의 각 수준별로 데이터셋의 내용을 나누어 출력

 PAGEBY : 지정된 PAGEBY 변수나, BY 변수의 값이 변화할 때마다 새로운 페이지에 출력

 SUM : 지정된 변수들의 합을 출력

 SUMBY : 지정된 SUMBY 변수나, BY 변수의 값이 변화할 때마다 그 변수의 합을 출력

 VAR : 지정된 변수들만 출력

 

  • PROC PRINT 옵션
    •  N : 개체의 수를 출력, BY 명령문이 있을 경우에는 BY 변수의 각 수준별 개체의 수도 출력.
    •  UNIFORM : 각 변수의 값들을 모든 페이지에서 동일한 열(column)에 출력
    •  이 옵션을 생략하면, 각 페이지에 가능한 많은 변수와 개체들을 출력하여, 각 페이지에 출력되는 변수의 열이 다를 수 있음
    •  ROUND : FORMAT 명령문에 지정된 소수점 자릿수까지 반올림
    •  FORMAT 문이 없는 경우 : 디폴트로서 소수점 이하 두 자리까지 인쇄
    •  SUM 또는 SUMBY 명령문에 지정된 변수들의 합을 계산하기 전에 반올림
    •  LABEL : 레이블이 붙여져 있는 변수들은 변수 이름 대신에 레이블을 출력
    •  BY 변수에 대한 각 수준별 레이블은 출력, SUM 명령문에 대한 것은 출력되지 않음.

사용자 출력 포맷의 작성 : FORMAT프로시저

나만의 형식 가능.

IF THEN 없이도 출력값 변경 통해 변수를 그룹핑 하거나 다른값으로 변경 가능

    ① 문자형 변수의 값을 다른 문자 문자열로 출력(예: YES를 Y로 출력)

    ② 숫자형 변수의 값을 그룹핑하여 그룹값을 부여(예:10~19세를 10대로 출력)

프로시저 단계에서 지정된 포맷은 해당 프로시저를 수행하는 동안에만 영향 줌.

 

사용방법

    VALUE : 변수 값을 출력하는 데 사용할 형식을 지정 (※ 문자형 출력형식 “$”를 붙임)

    VALUE 명령문에서 범위 지정

            ①a <- b : a보다 크고 b보다 작거나 같다 (최소값 : low)

            ②A -< b : a보다 크거나 같고 b보다 작다

            ③A – b : 는 a보다 크거나 같고 b보다 작거나 같다 (최대값 : high)

    library=옵션 : 라이브러리와 카탈로그를 생성하여 영구화 가능

PROC FORMAT LIBRARY=mysas.p_format;
	VALUE $jobname 'A' = '전문직'
						   'B' = '사무직'
						   'C' = '일용직';
	VALUE agegroup low -< 30 = '30미만'
				            30 -< 40 = '30<=,<40'
							40 - high = '40이상';
	VALUE prefer      1 = '매우좋아함'
							2 = '좋아함'
							3 = '싫어함'
							4 = '매우 싫어함';
RUN;

OPTIONS FMTSEARCH=(mysas.p_format);

DATA mysas.prefer;
	INPUT job $ age coffee drink @@;
	LABEL job='직업';
	FORMAT job $jobname. age agegroup. ;
CARDS;
A 45 1 4 A 39 1 3 A 56 1 3 B 33 2 3 B 42 3 2
B 28 3 3 B 37 2 2 C 52 4 1 C 21 3 1 C 37 4 2
;
RUN;


개체와 변수의 자리바꿈 : TRANSPOSE프로시저

데이터셋에 있는 개체를 변수로, 변수를 개체로 바꾸어 놓은 새로운 SAS 데이터셋을 생성

 

 VAR : TRANSPOSE 될 변수를 지정.

 ID : 새로운 데이터셋에서 변수 이름으로 사용될 변수를 지정.

 BY : BY 변수들의 각 수준을 한 그룹으로 하여 개체와 변수의 위치를 바꿈.

  • PROC TRANSPOSE 옵션
    •  OUT=SAS-data-set : TRANSPOSE 한 후의 결과를 저장하는 데이터 셋을 지정
    •  PREFIX=name : OUTPUT dataset에 transpose된 변수의 prefix를 지정.
    •  NAME=name : TRANSPOSE된 변수의 NAME을 지정. 만약 지정이 되지 않을 경우 DEFAULT는 NAME 로 지정.
    •  LABEL=name : TRANSPOSE 된 변수의 LABEL을 지정.
    •  LET : Input Dataset내에 있는 ID 변수의 DUPLICATE값을 인정.

데이터셋의 관리 : CONTENTS 프로시저

데이터셋이 생성된 날짜와 시간, 개체와 변수의 개수, 변수의 이름 및 형태 등과 같이 데이터셋에 관한 전반적인 내용을 출력

PROC CONTENTS DATA=mysas.htwt OUT=contout varnum;
RUN;
  • PROC CONTENTS 옵션
    •  OUT=옵션에 의해 SAS 데이터셋으로 저장
    •  출력결과는 변수의 사전순(alphabetical order)으로 출력
    •  VARNUM : 데이터 세트의 논리적 순서대로 변수 목록을 출력

출력결과 및 로그의 저장 : PRINTO 프로시저

출력 윈도우 또는 로그윈도우의 내용을 외부 파일로 저장하고자 할때 사용

 

 PRINT=‘filename’ : 출력결과가 저장될 경로(폴더)와 파일 이름을 지정

 LOG=‘filename’ : 로그가 저장될 경로(폴더)와 파일 이름을 지정

 NEW : 출력결과나 로그가 저장될 때 기존의 내용을 삭제하고 새로 저장되도록 지정.

 

NEW 옵션을 생략하면 기존의 내용에 새로운 내용이 추가됨.

PROC PRINTTO PRINT='C:\\SAS_Programming\\SAS_Data\\output.txt'
                       LOG='C:\\SAS_Programming\\SAS_Data\\log.txt' NEW;
RUN;

PROC FREQ DATA=mysas.htwt;
	TABLES gender dept;
RUN;

PROC PRINTTO;
RUN;

 두번째 PRINTTO 프로시저 : 첫번째 PRINTTO 프로시저의 설정을 해제

Comments