Economics & Deeplearning

관측치끼리 비교하는 문. 본문

SAS/SAS 질문과 답변

관측치끼리 비교하는 문.

이슈카 2016. 2. 21. 12:58

안녕하세요 사스라는게 변수끼리 지지고 볶고 하는건데 관측치 끼리 비교할려니까 잘 안되네요. 도움을 주시면 감사하겠습니다. 


일단 제가 가지고 있는 데이터는


주민번호 별로 날짜가 최근것부터 좍 있습니다. 

예를들면


20130809

20130731

20130615

20130601

20130410

..


이렇게 있다고 치면 가장 최근것은 무조건 keep하고 그 다음것과 비교해서 30일 초과만 keep하고 아니면 버리는 것입니다. 그래서 그 keep한것에서 다시 시작하면서 비교하는것인데 위에예를 제가 해보면

20130809 ---> keep

20130731 ---> 20130809와 비교해서 30일이 초과가 안되었기 때문에 drop

20130615 ---> 다시 20130809와 비교해서 30일 초과기 때문에 keep

20130601 ---> 20130615와 비교해 30일 초과 아니기 때문에 drop

20130410 ---> 다시 20130615와 비교해서 30일 초과기 때문에 keep 이런식으로 나가는건데 


고수님들 도움 부탁드리겠습니다 ㅠ. 제가 해봣던 방법은 lag로 해봤는데 하다보니까 너무 무식한 방법이더라구요 ㅋㅋ 도움 부탁드리겠습니다!

================================================================================


data temp;
input id $ date yymmdd8.;
cards;
a 20130809
a 20130731
a 20130615
a 20130601
a 20130410
b 20140102
b 20131212
b 20131201
b 20130812
b 20130630
;run;
proc sort data=temp;
by id;
run;

data temp2;
set temp;
by id;
retain date2find;
if first.id then do;
output;
date2find=date-30;
end;
if date =< date2find then do;output;
date2find=date-30;
end;
drop date2find;
format date yymmdd8.;
run;

proc print;run;


http://stackoverflow.com/questions/14818339/sas-keeping-observations-that-have-a-specified-date-interval
예제가 있길래 그냥 따라 만들었습니다.

그냥 보셔도 이해하시겠지만 설명을 드리자면, 첫번째 id의 첫번째 값은 무조건 남기고,
date2find라고 기준값을 만들어줍니다. 기준값은 8월9일에서 30일을 뺀 날짜가 되고 이와 비교하여 보다 작은 경우만 남기고 다시 그 날짜에서 30일을 뺀 날자를 date2find로 다시 만들어주어 계속 반복하게 하는 것입니다.
retain을 써주는 이유는 30일 초과가 아닌 경우엔 비교를 위한 기준값을 같게 해주기 위함입니다.



Comments