I have the following table that cumulate value along the day by id and when the treshold (-150) is exceeded i need a flag and keep it until last.id
ID | value | cumulative_value | flag |
1 | 35 | 35 | 0 |
1 | 35 | 70 | 0 |
1 | 100 | 170 | 0 |
1 | -110 | 60 | 0 |
1 | 35 | 95 | 0 |
2 | 15 | 15 | 0 |
2 | 35 | 50 | 0 |
2 | -130 | -80 | 0 |
3 | 40 | 40 | 0 |
3 | -125 | -85 | 0 |
3 | -90 | -175 | 1 |
3 | 35 | -140 | 1 |
3 | 35 | -105 | 1 |
3 | 35 | -70 | 1 |
I've tried a lot of lag and retains structures but it doesn't work.
A straightforward approach could work as follows:
data want;
set have;
by id;
retain flag;
if first.id then flag=0;
if cumulative_value < -150 then flag=1;
run;
This assumes you know how to get the cumulative value (or perhaps it is already in your data.) If you need to compute it along the way, here's a modification that would do that:
data want;
set have;
retain flag;
if first.id then do;
flag=0;
cumulative_value=0;
end;
cumulative_value + value;
if cumulative_value < -150 then flag=1;
run;
A straightforward approach could work as follows:
data want;
set have;
by id;
retain flag;
if first.id then flag=0;
if cumulative_value < -150 then flag=1;
run;
This assumes you know how to get the cumulative value (or perhaps it is already in your data.) If you need to compute it along the way, here's a modification that would do that:
data want;
set have;
retain flag;
if first.id then do;
flag=0;
cumulative_value=0;
end;
cumulative_value + value;
if cumulative_value < -150 then flag=1;
run;
Worked perfectly!! Just made a change and included "by id":
data want;
set have;
by id;
retain flag;
if first.id then do;
flag=0;
cumulative_value=0;
end;
cumulative_value + value;
if cumulative_value < -150 then flag=1;
run;
thanks
Registration is now open for SAS Innovate 2025 , our biggest and most exciting global event of the year! Join us in Orlando, FL, May 6-9.
Sign up by Dec. 31 to get the 2024 rate of just $495.
Register now!
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.