변수 조합의 빈도를 구하는 경우의 질문이 많다.

항상 말하지만 통계분석은 책이나 인터넷 등 강의를 듣고 틀에 짜여진 분석 코드에 변수만 넣어서 돌리고 해석하면 문제가 되지 않는다. 문제는 그 분석용 데이터 정제과정은 누가 가르쳐주지도 않고 그 때 상황에 맞게 본인이 창의적으로 해결해야 하는 부분인 것이다. 이와 같은 작업이 능숙하게 단축되면 전체적인 통계작업이 매우 많이 단축된다.

이번 내용은 칼럼이 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.sasbigdata.com 김진휘

www.sasbigdata.co.kr 김진휘

www.kdrg.co.kr 김진휘

※글에 대한 여러분 생각을 남겨 주세요. 소중하게 의견 감사드려요!
  1. John.Won 2017.06.15 00:54  댓글주소  수정/삭제  댓글 남기기

    안녕하세요, 최근에 이 블로그를 접하게 되어 많은 도움을 받고 있는 회사원입니다.
    제가 업무를 하다가 궁금해서요. 충분히 가능할것 같은데 제가 지식이 부족하여 방법을 모르겠네요. 매크로로 변수명을 만드는 법이 궁금한데요. 변수명들을 제가 정한게 아니라 바꾸기도 그렇고 매번 치기는 복잡해서요.

    예를 들면 변수명이 complexvariablename 이라 했을때

    %let aaa = complexvariablename 이라고 설정한 다음에 complexvariablename_Num complexvariablename_Char complexvariablename_1 등의 변수를 위의 aaa를 이용해 만들고 싶습니다. 혹시 도와주실수 있으신지요.
    감사합니다.