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 🙂
April 27 – 30 | Gaylord Texan | Grapevine, Texas
Walk in ready to learn. Walk out ready to deliver. This is the data and AI conference you can't afford to miss.
Register now and lock in 2025 pricing—just $495!
Still thinking about your presentation idea? The submission deadline has been extended to Friday, Nov. 14, at 11:59 p.m. ET.
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.