Help using Base SAS procedures

Subsetting previous observations if a criteria is met

Reply
New Contributor
Posts: 2

Subsetting previous observations if a criteria is met

I am dealing with real time data from an indoor air monitor.  When the monitor runs out of alcohol, the machine reads 0.  I am interested in creating a subset of my data that only includes the "0" observations and the preceding 30 observations. 

 

I think I may be able to do this with some form of an IF/THEN statement before OUTPUT, but I am unsure.  Maybe something like this?

 

DATA library.air_30;
SET library.air;
IF concentration=0 then OUTPUT *previous 30 observations* library.air_30;
RUN; 

Can anyone offer some help with this?  Thanks in advance.

Super User
Posts: 23,663

Re: Subsetting previous observations if a criteria is met

Posted in reply to taylormblack

Maybe reverse the order of your data and then it becomes a bit easier to look forward rather than backwards?

 


@taylormblack wrote:

I am dealing with real time data from an indoor air monitor.  When the monitor runs out of alcohol, the machine reads 0.  I am interested in creating a subset of my data that only includes the "0" observations and the preceding 30 observations. 

 

I think I may be able to do this with some form of an IF/THEN statement before OUTPUT, but I am unsure.  Maybe something like this?

 

DATA library.air_30;
SET library.air;
IF concentration=0 then OUTPUT *previous 30 observations* library.air_30;
RUN; 

Can anyone offer some help with this?  Thanks in advance.


 

 

Super User
Posts: 6,751

Re: Subsetting previous observations if a criteria is met

[ Edited ]
Posted in reply to taylormblack

It should be relatively straightforward, such as:

 

data want;

set have;

by concentration notsorted;

if concentration=0 and first.concentration;

do recnum = max(1, _n_ - 30) to _n_;

   set have point=recnum;

   output;

end;

run;

 

However, what happens in real life when the alcohol runs out?  (I know, the party's over, and everyone goes home.)  Could you have several observations in a row that have concentration=0?  Would you be retrieving some observations over and over again?

 

******************** EDITED in light of new information.

New Contributor
Posts: 2

Re: Subsetting previous observations if a criteria is met

Posted in reply to taylormblack
Hahaha, unfortunately the party ends and the machine keeps reading “0” until we refill the alcohol cartridge. So yes, I guess I would have a lot of duplicates. Is there a way to just subset the first “0” observation and the 30 preceding?

Thank you so much for your help with this. I am still getting the hang of SAS.
Ask a Question
Discussion stats
  • 3 replies
  • 90 views
  • 0 likes
  • 3 in conversation