Ma table a des observations de premier plan et de fuite que j'essaie de supprimer. Je souhaite supprimer les lignes qui arrivent avant chaque événement de «début» et après chaque événement «fin» pour chaque groupe. La table ressemble au ci-dessous:
3 Réponses :
Un moyen de faire est
Je suis sorti de manière simple mais sera limitée par la taille de données réelle.
data have; input Time Group Event $ Value ; datalines; 1 1 NA 0 2 1 NA 0 3 1 Begin 1.1 4 1 NA 1.2 5 1 NA 1.3 6 1 End 1.4 7 1 NA 0 1 2 NA 0 2 2 Begin 1.1 3 2 NA 1.2 4 2 End 1.3 5 2 NA 1.4 ; run; proc sort data = have; by group time; run; data have1; set have; count + 1; by group; if first.group then count = -100; if event = 'Begin' then count = 0; if event = 'End' then count = 100; if count < 0 or count >100 then delete; run;
sur la présomption selon laquelle les données entrantes sont déjà triées et qu'il existe des gammes zéro ou plus bornées en série de commencer à se terminer dans chaque groupe:
data want; do until (last.group); set have; by group time; if event = 'Begin' then _keeprow = 1; if _keeprow then output; if event = 'End' then _keeprow = 0; end; drop _keeprow; end;