2012-09-25 1 views
-1

단일 환자의 다중 기록과 함께 다음 데이터가 있습니다.SAS에서 특정 행을 선택하십시오.

ID      date   day  result 
BELF000000084785 20111110 1 164 
BELF000000084785 20111202 2 172 
BELF000016833470 20070122 2 226 
BELF000016833470 20070522 3 398 
BELF000016959442 20080429 1 242 
BELF000016959442 20080820 1 126 
BELF000016959442 20090225 2 302 
BELF000016959442 20090424 2 320 
BELF000017061714 20080626 1 152 
BELF000017801424 20110803 1 298 
BELF000017801424 20110913 2 252 
BELF000017801424 20111022 3 234 
BELF000024405407 20080218 1 232 
BELF000024405407 20080318 2 190 
BELF000024405410 20070122 3 380 
BELF000024405410 20070218 1 506 
BELF000024405410 20070320 2 480 
BELF000024405410 20070626 3 346 
BELF000024408114 20070423 1 296 
BELF000024408114 20070711 3 294 

1 일째 기록에서 환자를 추출하고 싶습니다. 하루 1 일과 2 일 둘 다 사용할 수 있고 하루 1 일 2 일과 3 일 모두 사용할 수있는 경우 그리고 멀리 다른. 어떤 sas 도움. -

ID에 duplicities없이
+2

@ vasja의 대답은 당신이 원하는없는 경우는, 어쩌면 당신은 성공적인 출력의 모습을 보여줄 수 있습니다. –

답변

0

그냥 최신 하루 건너 뛸 수있는 일의 수준 :

proc sort data=sample; 
by ID day; 
run; 

data result; 
set sample; 
by ID; 
if not last.ID then output; 
run; 

당신이 duplicite ID로 수행 할 작업 - 일의 기록을 다른 날짜 (들)에?

0

나는 이것이 OP에서 요구 된 바를 정확하게 생각한다. 실제로 그게 네가 원하는 것인지는 모르겠지만 그게 더 명확히해야한다.

data have; 
informat date YYMMDD8.; 
format ID $17.; 
input ID $ date day result ; 
datalines; 
BELF000000084785 20111110 1 164 
BELF000000084785 20111202 2 172 
BELF000016833470 20070122 2 226 
BELF000016833470 20070522 3 398 
BELF000016959442 20080429 1 242 
BELF000016959442 20080820 1 126 
BELF000016959442 20090225 2 302 
BELF000016959442 20090424 2 320 
BELF000017061714 20080626 1 152 
BELF000017801424 20110803 1 298 
BELF000017801424 20110913 2 252 
BELF000017801424 20111022 3 234 
BELF000024405407 20080218 1 232 
BELF000024405407 20080318 2 190 
BELF000024405410 20070122 3 380 
BELF000024405410 20070218 1 506 
BELF000024405410 20070320 2 480 
BELF000024405410 20070626 3 346 
BELF000024408114 20070423 1 296 
BELF000024408114 20070711 3 294 
;;;; 
run; 

data want; 
do _n_ = 1 by 1 until (last.ID); 
set have; 
by ID notsorted; 
if first.ID then do; 
    lastday=0; 
    done=0; 
end; 
if (first.ID) and (day ne 1) then lastday=-99; 
else if day ne lastday+1 then done=1; 
else if not done then lastday=day; 
end; 
do _n_ = 1 by 1 until (last.ID); 
set have; 
by ID notsorted; 
if first.ID then curday=0; 
curday+1; 
if curday le lastday then output; 
end; 
run; 

결과 :

Obs  ID  date day result 
1 BELF000000084785 18941 1 164 
2 BELF000000084785 18963 2 172 
3 BELF000016959442 17651 1 242 
4 BELF000017061714 17709 1 152 
5 BELF000017801424 18842 1 298 
6 BELF000017801424 18883 2 252 
7 BELF000017801424 18922 3 234 
8 BELF000024405407 17580 1 232 
9 BELF000024405407 17609 2 190 
10 BELF000024408114 17279 1 296