@Ramin1 wrote: Thanks a lot, @ballardw. If I want to get observations who have scores of 0 and successive scores also 0 (output only for successive scores) then does this logic work? For instance, for the data in this question, I want to select id score year 02 0 2003 03 0 2014 03 0 2015 Can you please explain, how your code selects the successive observations?
The code for the original question examines each value of score and when the condition was met then a flag variable is set to indicate it was found. The Retain means that flag is kept until a new Id is encountered. The Output, writing to the data set, only occurs when the conditions of the flag variable Startseq indicates a prior score of 0 had been encountered for the Id and the current value is 2.
This new question is only somewhat related. The difference is that since you asking about "successive" values then you need to COUNT the number of 0 scores and only output when the number of 0 scores is greater than 1.
One way:
data want2;
set have;
by id;
retain zerocount;
if first.id then zerocount=0;
if score=0 then zerocount+1;
if score=0 and zerocount>1 then output;
run;
Similar us of the By Id and the First. to reset the counter. Note that Zerocount+1 adds 1 to previous value, which would be 0 until a score of 0 is encountered. Then output only when the count is more than 1 and is the score you want.
Next question on this line you should show what you have attempted before asking. If you get odd results be prepared to show your code from the LOG, meaning what was actually submitted along with all the notes, warnings or errors generated. If posting Log text open a text box on the forum using the </> and paste the text. It will look like the boxes with the code I posted. The text box is important for Log text because SAS often places diagnostic information in the log but the main message windows will reformat the text moving characters and possibly making that diagnostic information less useful.
... View more