문제
아래의 샘플 데이터에서, 나는 적어도 3 개월 연속 상태에 대한 상태를 발생하는 경우, ID 및 SEQ에 의한 계정을 식별하려고 노력하고 있습니다.나는 잠시 동안 이것을 망쳐 놓았으며, 나는 그것을 다루는 방법을 확실히하지 않습니다.
샘플 데이터 :
ID SEQ STATUS_DATE
11111 1 01/01/2014
11111 1 02/10/2014
11111 1 03/15/2014
11111 1 05/01/2014
11111 2 01/30/2014
22222 1 06/20/2014
22222 1 07/15/2014
22222 1 07/16/2014
22222 1 08/01/2014
22222 2 02/01/2014
22222 2 09/10/2014
.
내가 반환 해야하는 것 :
ID SEQ STATUS_DATE
11111 1 01/01/2014
11111 1 02/10/2014
11111 1 03/15/2014
22222 1 06/20/2014
22222 1 07/15/2014
22222 1 07/16/2014
22222 1 08/01/2014
.
어떤 도움도 감사 할 것입니다.
해결책
여기에 하나의 방법이 있습니다.
data have;
input ID SEQ STATUS_DATE $12.;
datalines;
11111 1 01/01/2014
11111 1 02/10/2014
11111 1 03/15/2014
11111 1 05/01/2014
11111 2 01/30/2014
22222 1 06/20/2014
22222 1 07/15/2014
22222 1 07/16/2014
22222 1 08/01/2014
22222 2 02/01/2014
22222 2 09/10/2014
;
run;
data grouped (keep = id seq status_date group) groups (keep = group2);
set have;
sasdate = input(status_date, mmddyy12.);
month = month(sasdate);
year = year(sasdate);
pdate = intnx('month', sasdate, -1);
if lag(year) = year(sasdate) and lag(month) = month(sasdate) then group+0;
else if lag(year) = year(pdate) and lag(month) = month(pdate) then count+1;
else do;
group+1;
count = 0;
end;
if count = 0 and lag(count) > 1 then do;
group2 = group-1;
output groups;
end;
output grouped;
run;
data want (keep = id seq status_date);
merge grouped groups (in=a rename=(group2=group));
by group;
if a;
run;
.
기본적으로 나는 그들이 연속적으로 동일한 그룹의 숫자를 관찰 한 다음 2 개 이상의 관찰이있는 그룹 수 그룹이있는 데이터 세트를 생성합니다.그런 다음 두 개의 데이터 세트를 병합하고 두 번째 데이터 세트에있는 관찰자만이 2 개 이상의 관찰이있는 것입니다.
다른 팁
어때요.그러나 sort 을 원하는 것을 원할 수 있습니다.
data want;
do _n_ = 1 by 1 until(last.id);
set survey;
by id;
if _n_ <=3 then output;
end;
run;
. 제휴하지 않습니다 StackOverflow