Q. Write the data step that creates a variable that should have the number of animals that are 200 kg or heavier than 200 kg.
My Ans - This code is not giving me desired results. Any modification on what is the issue ASAP will be of great help.
data animal_weight;
input animals $ weight;
datalines;
dog 19
cat 14
mice 0.25
camel 575
pigeon 0.57
cow 475
goat 18
fish 4
horse 450
donkey 330
monkey 23
lion 580
rat 0.69
rabbit 2.5
Pig 235
crow 1.8
;
run;
data sum; set animal_weight;
count=0;
array animl(*)_numeric_;
do i = 1 to 16;
if animl(i) >= 200 then count + animl(i);
proc print data=sum;
end;
run;
quit;
Revise the notion of implicit looping in the data step. This would work:
data over200;
set animal_weight end=done;
count + (weight >= 200);
if done then output;
keep count;
run;
Explain the role of each statement to deserve a good mark.
Your first step creates a table where each animal holds one row;
You cannot use array to deal with different rows;
You can use an array only to deal with a set of variables in the same row.
Next code will do what you ask:
data want;
set animal_weight end=eof;
retain count sum_weight 0;
if weight GE 200 then do;
sum_weight = sum(of sum_weight , weight);
count+1;
end;
if eof then put sum_weight= count=;
run;
I'm heavily biased toward using a DATA step, but I would switch for this task:
proc sql;
select count(*) from animal_weight where weight >= 200;
quit;
SAS Innovate 2025 is scheduled for May 6-9 in Orlando, FL. Sign up to be first to learn about the agenda and registration!
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.