Hi there!
Consider the following problem:
TableA:
I would like to select the first rows that the sum of values is equal 10. Therefore, the output is:
Someone know how to do this in DATA SET or PROC SQL?
Thanks 🙂
Like this?
data HAVE;
input ID VALUE;
datalines;
1 3
2 5
4 14
5 5
run;
data WANT;
set HAVE;
SUM+VALUE;
if SUM>=10 then do;
VALUE+-SUM+10;
output;
stop;
end;
else output;
run;
ID | VALUE | SUM |
---|---|---|
1 | 3 | 3 |
2 | 5 | 8 |
4 | 2 | 22 |
data have;
input id value;
datalines;
1 3
2 5
3 2
4 14
5 5
;
data _null_;
if _N_ = 1 then do;
if 0 then set have;
declare hash h(dataset:'have(obs=0)',ordered:'y');
h.defineKey('id');
h.defineData('id','value');
h.defineDone();
end;
set have;
_value+value;
h.add();
if _value>=10 then do;h.output(dataset:'want');stop;end;
run;
Like this?
data HAVE;
input ID VALUE;
datalines;
1 3
2 5
4 14
5 5
run;
data WANT;
set HAVE;
SUM+VALUE;
if SUM>=10 then do;
VALUE+-SUM+10;
output;
stop;
end;
else output;
run;
ID | VALUE | SUM |
---|---|---|
1 | 3 | 3 |
2 | 5 | 8 |
4 | 2 | 22 |
data _null_;
if _N_ = 1 then do;
if 0 then set have;
declare hash h(dataset:'have(obs=0)',ordered:'y');
h.defineKey('id');
h.defineData('id','value');
h.defineDone();
end;
set have;
_k=_value;_value+value;
if _value<=10 then h.add();
else if _value=10 then do;h.output(dataset:'want');stop;end;
else if _value>10 then do;value=value-_k-1;h.add();h.output(dataset:'want');stop;end;
run;
Thanks for help me guys 🙂
Now, I want to develop a new step. Consider this example:
TABLE 01:
I want the declare a variable X that is sum VALUES if CLASS = A. Therefore, X = 10
Then will run the code with variable X:
data _null_;
if _N_ = 1 then do;
if 0 then set have;
declare hash h(dataset:'have(obs=0)',ordered:'y');
h.defineKey('id');
h.defineData('id','value');
h.defineDone();
end;
set have;
_k=_value;_value+value;
if _value<=X then h.add();
else if _value=X then do;h.output(dataset:'want');stop;end;
else if _value>X then do;value=value-_k-1;h.add();h.output(dataset:'want');stop;end;
run;
Can you guys help to develop the first step, plz?
Thanks 🙂
Join us for SAS Innovate April 16-19 at the Aria in Las Vegas. Bring the team and save big with our group pricing for a limited time only.
Pre-conference courses and tutorials are filling up fast and are always a sellout. Register today to reserve your seat.
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.