로그인   |  회원가입  |  사이트맵  |  Contact Us
  아이디 저장하기
 
홈 > 참여마당 > Question & Answer
[SAS 프로그래밍] 시간순서를 고려한 쌍(pair) 개수 세기 2018.03.02
조상균 209 1
http://www.mysas.co.kr/SAS_club/b_answer.asp?b_no=7623&gotopage=1&con=subject&keyword=&cmd=content&bd_no=6&gubun=

안녕하세요? SAS 초보자입니다.

며칠동안 고민해봐도 방향이 잡히지 않아 부득이 질문을 드립니다.

 

예제 첨부파일에는 고객 100명의 구매내역이 저장되어 있습니다.

예를들어 고객4(c004)같은 경우에 처음에 D제품을 구매하고 그 다음에 C, 그리고 마지막으로 A를 구매하였습니다.

제가 해야하는 작업은 일종의 pair 를 찾는 작업입니다.(마치 고등학교 때 확률통계를 처음 배우는 학생들이 하듯이 일일히 세는 작업입니다) 고객4는 D->C->A순으로 제품을 구매하였고, 시간순으로 구매한 2개 쌍은 D->C, D->A, C->A이렇게 3가지가 나옵니다(3C2=3). 만약 고객5에 대해서 이런 계산을 해준다면 C->D 1개 밖에 나오지 않을 것입니다(2C2 = 1).

이와같은 쌍(pair)을 고객 옆에 기록해두려고 하는데

예)

C004 : D->C, D->A, C->A

C005 : C->D

 

어떻게 해야할지 잘모르겠습니다. select명령어로 특정 변수가 조건을 만족하는 데이터를 뽑아 새로운 데이터를 만들수는 있지만(예: 고객4를 추출) 이 명령어는 기존 데이터셋에서 조건에 맞는 데이터만 필터링 시키는 방법이라기 보다는 아예 새로운 데이터셋을 만드는 것이라 생각되는데요, 저는 100명의 고객(실제로는 훨씬 더 많은 사람)에 대해서 일일히 이 작업을 해야하고 이 때마다 사람 한 명 당 하나의 데이터셋을 만드는것은 지나치다는 생각이 들었습니다. 어떤 기법을 활용하면 제게 주어진 과제를 해낼 수 있을지 조언해주실 수 있을까요?

 

제가 엑셀 vba는 조금 사용해보았는데 SAS는 진짜 생초보라 감이 잡히지 않아서 질문드립니다.

읽어주신 모든 분들께 감사드립니다.  

 
  Data_SASquestion.xlsx
example.PNG
다운로드 수 | 4
    
MYSAS 시샵   [2018/03/05 11:11]
안녕하세요.

proc transpose를 사용하여 한 ID 당 구매한 물건을 가로로 시간순서로 이어붙이면 가능할 것 같습니다.
combination을 따져서 변수를 만들어야하는 수고가 있지만 원하는 데이터셋은 만들 수 있습니다.
다음의 코드를 참고해주세요 (데이터 a는 올려주신 엑셀파일입니다).

proc transpose data=a out=b;
by cnum;
var product;
run;

data b1;
set b;
if col2='' then prod1=catt(col1);

else if col3='' then prod1=catt(col1"->"col2);

else if col4='' then do;
prod1=catt(col1"->"col2);
prod2=catt(col1"->"col3);
prod3=catt(col2"->"col3);
end;

else if col4^='' then do;
prod1=catt(col1"->"col2);
prod2=catt(col1"->"col3);
prod3=catt(col1"->"col4);
prod4=catt(col2"->"col3);
prod5=catt(col2"->"col4);
prod6=catt(col3"->"col4);
end;
run;
조상균   [2018/03/05 11:24]
답변 감사드립니다. 위 코드를 기반으로 제가 좀 더 고민해보면서 만들어야겠습니다!
 
 work library 변경시 오류
 SAS테이블 key값 확인 관련 질문입니다.