2012-09-25 5 views
-1

J'ai les données suivantes avec enregistrement multiple d'un seul patient.sélectionnez des lignes spécifiques dans 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 

Je veux extraire les patients avec des enregistrements au jour 1; si le jour 1 et le jour 2 sont disponibles et jour1 jour2 et jour3 tous disponibles. et à travers autre. toute aide de sas.

+2

si @ vasja de réponse n'est pas ce que vous voulez, vous pourriez peut-être montrer ce que la sortie réussie ressemble. –

Répondre

0

Sans duplicités sur ID - niveau de jour vous pouvez simplement sauter le dernier jour:

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

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

Que voulez-vous faire avec ID duplicité - record jour à une autre date (s)?

0

Je pense que c'est exactement ce qui a été demandé dans le PO. Je ne sais pas si c'est vraiment ce que vous voulez, mais cela nécessite d'autres éclaircissements.

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; 

Résultats:

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 
Questions connexes