Help using Base SAS procedures

Proc Expand - MovAve - numeric precision

Frequent Contributor
Posts: 93

Proc Expand - MovAve - numeric precision

I can view variable UTIL as 0. Before this, I use UTIL=round(a/b,0.0001) to calculate UTIL.

And then I use proc expand as below:

PROC EXPAND data=trade_util out=trade_util1;

  ID misdate;

  BY customer;

  CONVERT util=util_MEAN3  / transformout=(movave 3 lag 1);


Do anyone know why for moving average of 3 zeros, I get numbers like






I follow it up with code like this, but how can I avoid this extra step? It has something to do with numeric precision.

data work.trade_util1;

set work.trade_util1;



Frequent Contributor
Posts: 93

Re: Proc Expand - MovAve - numeric precision

Would anyone know the reason for the mov average mean to be such small numbers?

Super User
Posts: 10,784

Re: Proc Expand - MovAve - numeric precision

Not sure if it could work. Make UTIL be a small length .

length UTIL 3 ;

and why not use INT() ?

Xia Keshan

Esteemed Advisor
Posts: 5,532

Re: Proc Expand - MovAve - numeric precision

I thing proc expand is geared for speed and skips the numerical precautions that are common in other procedures. You will have to follow the procedure call with a datastep to round() or fuzz() output values. If only for display, numerical formats will do the rounding for you.


Ask a Question
Discussion stats
  • 3 replies
  • 3 in conversation