변수 조합의 빈도를 구하는 경우의 질문이 많다.
항상 말하지만 통계분석은 책이나 인터넷 등 강의를 듣고 틀에 짜여진 분석 코드에 변수만 넣어서 돌리고 해석하면 문제가 되지 않는다. 문제는 그 분석용 데이터 정제과정은 누가 가르쳐주지도 않고 그 때 상황에 맞게 본인이 창의적으로 해결해야 하는 부분인 것이다. 이와 같은 작업이 능숙하게 단축되면 전체적인 통계작업이 매우 많이 단축된다.
이번 내용은 칼럼이 2개가 있는 상황에서 이 두가지 칼럼을 붙여서 조합의 빈도를 구하고 싶은데 추가 조건이 칼럼을 붙였을때 앞뒤칼럼의 순서를 바꾸어서 일치하는 건이 있으면 그것은 동일건으로 본다는 것이다.
내용 자체는 매우 단순하다. 칼럼 두개의 조합을 보는데 앞뒤 변경시 동일한게 있으면 동일건으로 보고 빈도를 구한다는 것이다.
var1과 var2 두개의 변수에 각 관측값들이 있다고 가정하자.
이 두개의 변수 조합의 빈도분석을 실시하고 싶은데 예를들어 조합이 AB인경우와 BA인 경우도 같은 건으로 판단한다는 조건을 원한다면 아래와 같이 작업을 할 수가 있다.
먼저 ID나 KEY값 개념 변수를 생성하고, 행렬변환 작업을 통해 데이터를 키값별로 세로로 데이터를 변환시킨다. 그리고 key값 별로 칼럼을 정렬을 하고 다시 행렬변환작업을 해주는데 주의할 것은 이과정 사이에 var1과 var2가 고정값이기 때문에 정렬을 한 후 다시 행렬변환을 시켜도 원래와 같은 값으로 돌아가는 문제가 생긴다. 그러므로 NAME OF FORMER VARIABLE라벨이 붙은 _NAME_ 변수를 제거한 뒤에 정렬후 다시 FIRST. 구문을 이용해 키별로 순서를 매긴 후에 다시 행렬 변환을 하는 개념이다.
그리고 마지막으로 두 변수를 합쳐서 조합을 만들어 빈도분석을 실시하면 변수의 앞뒤 순서가 바뀐경우도 같은건으로 판단하는 조합에 대한 빈도분석 결과를 만들어 낼 수가 있다.
아래의 사진과 프로그램 명령어를 참고하면 쉽게 이해할 수 있을 것이다.
아래는 TEST라는 데이터셋을 샘플로 시작하여 그 단계 과정을 하나하나 보여주는 사진이다.
프로그램 명령어
data test;
input var1$ var2$;
cards;
A B
B A
A B
A D
K C
K E
C K
;
RUN;
DATA TEST1;
RETAIN KEY;
SET TEST;
RETAIN KEY 0;
KEY+1;
RUN;
PROC TRANSPOSE DATA=TEST1 OUT=TEST2;
BY KEY;
VAR VAR1 VAR2;
RUN;
PROC SORT DATA=TEST2 OUT=TEST3; BY KEY COL1; RUN;
DATA TEST4;
SET TEST3;
BY KEY;
IF FIRST.KEY=1 THEN NUM=0;
NUM+1;
DROP _NAME_;
RUN;
PROC TRANSPOSE DATA=TEST4 OUT=TEST5;
BY KEY;
ID NUM;
VAR COL1;
RUN;
DATA TEST6;
SET TEST5;
CONCATENATE=COMPRESS(_1||_2);
RUN;
PROC FREQ DATA=TEST6 NOPRINT;
TABLES CONCATENATE/OUT=TEST7;
RUN;
www.kdrg.co.kr 김진휘
'SAS' 카테고리의 다른 글
[SAS] sas proc means 기초통계량 결과 데이터 작업 응용 방법 (0) | 2018.10.19 |
---|---|
[SAS] SAS 숫자 날짜 변환 input, put, format 이용방법 (1) | 2018.10.15 |
[SAS] 기하평균 및 표준편차 적용시 round error 해결 방법 (0) | 2017.02.09 |
[SAS] sas9.4 results viewer 누적형식 수정방법 (0) | 2017.02.07 |
[SAS] SAS의 PROC GLM 구문의 출력결과를 ODS OUTPUT으로 뽑아내는 방법 (0) | 2015.03.30 |
댓글