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.
Don't miss out on SAS Innovate - Register now for the FREE Livestream!
Can't make it to Vegas? No problem! Watch our general sessions LIVE or on-demand starting April 17th. Hear from SAS execs, best-selling author Adam Grant, Hot Ones host Sean Evans, top tech journalist Kara Swisher, AI expert Cassie Kozyrkov, and the mind-blowing dance crew iLuminate! Plus, get access to over 20 breakout sessions.
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.