DATA Step, Macro, Functions and more

Urgent | What is wrong in my code? Using SAS 9.4

Reply
Learner
Posts: 1

Urgent | What is wrong in my code? Using SAS 9.4

[ Edited ]

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;

Respected Advisor
Posts: 4,925

Re: Urgent | What is wrong in my code? Using SAS 9.4

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.

PG
Trusted Advisor
Posts: 1,570

Re: Urgent | What is wrong in my code? Using SAS 9.4

[ Edited ]

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;

Super User
Posts: 5,511

Re: Urgent | What is wrong in my code? Using SAS 9.4

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;

Ask a Question
Discussion stats
  • 3 replies
  • 247 views
  • 0 likes
  • 4 in conversation