Hello all,
I currently have a data file looks like:
ID | Year | Var A |
1 | 2000 | 0 |
1 | 2001 | 0 |
1 | 2002 | 1 |
1 | 2003 | 0 |
2 | 2000 | 0 |
2 | 2001 | 1 |
2 | 2002 | 1 |
2 | 2003 | 1 |
2 | 2004 | 0 |
3 | 2001 | 0 |
3 | 2002 | 0 |
3 | 2003 | 1 |
3 | 2004 | 0 |
3 | 2005 | 1 |
3 | 2006 | 0 |
What I need is excluding observations with Var A = 0 prior to the first time when Var A = 1 by the group ID. So the outcome of the data needs to look like:
ID | Year | Var A |
1 | 2002 | 1 |
1 | 2003 | 0 |
2 | 2001 | 1 |
2 | 2002 | 1 |
2 | 2003 | 1 |
2 | 2004 | 0 |
3 | 2003 | 1 |
3 | 2004 | 0 |
3 | 2005 | 1 |
3 | 2006 | 0 |
How can I code it? Thank you.
data have;
input ID Year Var_A;
datalines;
1 2000 0
1 2001 0
1 2002 1
1 2003 0
2 2000 0
2 2001 1
2 2002 1
2 2003 1
2 2004 0
3 2001 0
3 2002 0
3 2003 1
3 2004 0
3 2005 1
3 2006 0
;
data want;
__k=0;
do until(last.id);
set have;
by id;
if Var_A=1 then __k=1;
if __k then output;
end;
drop _:;
run;
data have;
input ID Year Var_A;
datalines;
1 2000 0
1 2001 0
1 2002 1
1 2003 0
2 2000 0
2 2001 1
2 2002 1
2 2003 1
2 2004 0
3 2001 0
3 2002 0
3 2003 1
3 2004 0
3 2005 1
3 2006 0
;
data want;
__k=0;
do until(last.id);
set have;
by id;
if Var_A=1 then __k=1;
if __k then output;
end;
drop _:;
run;
SAS Innovate 2025 is scheduled for May 6-9 in Orlando, FL. Sign up to be first to learn about the agenda and registration!
Learn how use the CAT functions in SAS to join values from multiple variables into a single value.
Find more tutorials on the SAS Users YouTube channel.
Ready to level-up your skills? Choose your own adventure.