Help using Base SAS procedures

Conditionally remove summary rows in Proc Report

Accepted Solution Solved
Reply
Frequent Learner
Posts: 1
Accepted Solution

Conditionally remove summary rows in Proc Report

I would like to remove the average row when the mean for the total column is 0. For e.g. in the output below I want to delete the average row for Name = X since the average of Total column is 0.

 

Averages are calcuated as follows -

define a / analysis mean 'a' style={tagattr='format:###,###,##0.00'};
define b / analysis mean 'b' style={tagattr='format:###,###,##0.00'};
define c / analysis mean 'c' style={tagattr='format:###,###,##0.00'};
define total / analysis mean 'total' style={tagattr='format:###,###,##0.00'};

 

break after Name;

 

DateNameabcTotal
02/11/2017X0.000.000.000.00
02/18/2017X0.000.000.000.00
 Average0.000.000.000.00
02/11/2017Y45.000.007.5045.00
02/18/2017Y45.000.004.0045.00
02/25/2017Y43.000.005.0043.00
03/04/2017Y21.000.002.0021.00
 Average38.500.004.6338.50

 

Thanks for your help.


Accepted Solutions
Solution
‎04-05-2017 02:50 PM
Super User
Super User
Posts: 7,392

Re: Conditionally remove summary rows in Proc Report

Whilst you may be able to do this in compute blocks, I tend to find it easier to get a dataset looking right before reporting it out. Easier to QC, and work with.  So two steps:

proc report data=... out=want;
...
run;

data want;
  set want;
  if name="Average" and total=0 then delete;
run;

/* Now we actually report it out */
proc report data=want;
...
run;

Of ourse you don't need to use proc report, you could use other procedures.

View solution in original post


All Replies
Solution
‎04-05-2017 02:50 PM
Super User
Super User
Posts: 7,392

Re: Conditionally remove summary rows in Proc Report

Whilst you may be able to do this in compute blocks, I tend to find it easier to get a dataset looking right before reporting it out. Easier to QC, and work with.  So two steps:

proc report data=... out=want;
...
run;

data want;
  set want;
  if name="Average" and total=0 then delete;
run;

/* Now we actually report it out */
proc report data=want;
...
run;

Of ourse you don't need to use proc report, you could use other procedures.

☑ This topic is SOLVED.

Need further help from the community? Please ask a new question.

Discussion stats
  • 1 reply
  • 147 views
  • 0 likes
  • 2 in conversation