BookmarkSubscribeRSS Feed
rtniblett15
Calcite | Level 5

Hello all. 

I am running a pig study and am trying to get SAS to output a dataset which requires the following:

the first time each animal reaches 136 kg before 200 d of age. I could just go with the 200 d mark, however, with weight fluctuation, an animal may meet the criteria x number of days before. I have attached a datastep of the data with each of the codes that I have tried. I have tried using the data step, proc sql, and proc summary, to no avail. I can get a list of all the times each animal (giltid) reaches the critera(avgwtkg>=136 and ageontest<=200), but I want something similar to the first. utilized in the data step. 

I am looking for results which include all variables in the main set, but the key info would be:

 

Giltid:223307 avgwtkg:136.321 ageontest:193

Giltid:223308 avgwtkg:136.02 ageontest: 188 

 

and so on...

 

 

data esfe2200dwt;
set esfe2visitestrus;
by giltid avgwtkg;
first.avgwtkg=avgwtkg;
if (ageontest<=200) and (first.avgwtkg>=136) then output;
run;
proc sql ;
select distinct(giltid) as giltid, avgwtkg, ageontest
from esfe2visitestrus
distinct where avgwtkg>=136 and ageontest<=200;
proc summary data=esfe2visitestrus nway;
class giltid feedlevel pg600 entrydate;
where avgwtkg>=136 and ageontest<=200;
id _all_;
output out=test200dwt ;
run;

 

Thank you for your time and consideration.

2 REPLIES 2
Patrick
Opal | Level 21

Below should work for you

/* option 1 */
proc sort data=esfe2visitestrus out=inter;
  by giltid ageontest avgwtkg;
run; 
data want_1;
  set inter;
  by giltid ageontest avgwtkg;
  retain selected_flg;
  if first.giltid then selected_flg=0;
  if selected_flg=0 and avgwtkg>=136 then
    do;
      output;
      selected_flg=1;
    end;
  drop selected_flg;
run;

/* option 2 */
proc sql;
  create table want_2 as
  select *
  from esfe2visitestrus
  where avgwtkg>=136
  group by giltid
  having min(ageontest)=ageontest
  ;
quit;

 

rtniblett15
Calcite | Level 5

Thank you! Option 1 has one obs that is over 200 d of age. Option 2 still has every gilt obs with a weight over 136 kg like before.

 

SAS Innovate 2025: Save the Date

 SAS Innovate 2025 is scheduled for May 6-9 in Orlando, FL. Sign up to be first to learn about the agenda and registration!

Save the date!

How to Concatenate Values

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.

SAS Training: Just a Click Away

 Ready to level-up your skills? Choose your own adventure.

Browse our catalog!

Discussion stats
  • 2 replies
  • 428 views
  • 0 likes
  • 2 in conversation