Help using Base SAS procedures

Obtaining minimum value by group when condition is met

Reply
Regular Contributor
Posts: 217

Obtaining minimum value by group when condition is met

Hi everyone.

I'm wondering how can I generate the variable final given I have the dataset with variable id, flag and total more elegantly than what I've done(below)?

Thank you very much and happy Easter!

     id      flag     total    final

       1         0         4       3

       1         .         4        3

       1         .         4        3

       1         1         4       3

       2         1         2        2

       2         .         2         2

       3         .         5         2

       3         1         5        2

       3         0         5        2

       3         0         5        2

       3         0         5        2

       4         .         1         1

       5         .         2         2

       5         .         2         2

My code is:

data b;

  set a;

  by id;

  retain total2 0;

  if first.id then total2=total;

  if flag=0 then total2=total2-1;

run;

proc sql;

select *, min(total2) as final

from b

group by id;

quit;

Super Contributor
Posts: 543

Re: Obtaining minimum value by group when condition is met

How about this:

proc sql;

    select *,sum(flag ne 0) as final2

    from a

    group by id;

quit;

Smiley Happy

Good luck!

Anca.

PS: and if you want a table, then add the

proc sql;
     create table your_table as

    select *,sum(flag ne 0) as final2

    from a

    group by id;

quit;

Ask a Question
Discussion stats
  • 1 reply
  • 176 views
  • 1 like
  • 2 in conversation