data temp;
input group x;
cards;
1 23
1 34
1 5
1 15
2 78
2 92
2 45
2 89
2 34
2 76
3 31
4 23
4 12
;
run;
data cusum;
set temp;
by group;
if first.group then total=0;
total+x;
if total >= 35 then flag='Y';
run;
How to reset the total equal to x once the threshold is reached.
In the above example,id 1 reaches threshold (>=35) after second iteration(23+34).
so I would want the flag='Y at that record only and then for third iteration total must be equal to x and then cumulative addition
must be performed. the thrid and foruth iteration values of total must 5 and 20
Depending upon what you actually want, you may only have to add one extra condition to your if statement:
data cusum;
set temp;
by group;
if first.group or total >= 35 then total=0;
total+x;
if total >= 35 then flag='Y';
run;
Hiya, try:
data cusum;
set temp;
by group;
if first.group then total=0;
total+x;
if total >= 35 then do ;
flag='Y';
total = 0 ;
end ;
run;
It is setting total to 0 at the threshold.but I want the total to be actual total and the next observation should be equal to value of x
Try:
data cusum (drop = A B) ;
set temp;
by group;
if first.group then A=0;
A+x;
if A >= 35 then do ;
flag='Y';
B = A ;
A = 0 ;
end ;
total = sum(A,B) ;
run;
Thanks Steve.
Thanks Art. I tried and works.
Are you ready for the spotlight? We're accepting content ideas for SAS Innovate 2025 to be held May 6-9 in Orlando, FL. The call is open until September 25. Read more here about why you should contribute and what is in it for you!
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.