Help using Base SAS procedures

Proc Expand - MovAve - numeric precision

Reply
Frequent Contributor
Posts: 92

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);

RUN;

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

-8.67362E-18

-3.1984E-18

-8.2038E-18

-3.79471E-18

-9.1073E-18

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;

util_MEAN3=max(0,util_MEAN3);

run;

Frequent Contributor
Posts: 92

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,041

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

Respected Advisor
Posts: 4,930

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.

PG

PG
Ask a Question
Discussion stats
  • 3 replies
  • 274 views
  • 0 likes
  • 3 in conversation