=========================================================================
Date: Thu, 18 Jul 2002 16:11:48 -0500
Reply-To: Kevin Myers <KevinMyers@AUSTIN.RR.COM>
Sender: "SAS(r) Discussion" <SAS-L@LISTSERV.UGA.EDU>
From: Kevin Myers <KevinMyers@AUSTIN.RR.COM>
Subject: Re: Division by Zero/Missing Value Errors
Content-Type: text/plain; charset="iso-8859-1"
I've had the same needs that Jim discusses here on many occasions, and for
similar reasons, and I'll bet lots of other folks out there have too. We
ought to make a suggestion along these lines for the SASware ballot. My
$.02 worth.
Kevin A. Myers
Myers Engineering
Round Rock, Texas
----- Original Message -----
From: "Jim" <jlinck@UGA.EDU.NOSPAM>
Newsgroups: bit.listserv.sas-l
To: <SAS-L@LISTSERV.UGA.EDU>
Sent: Thursday, July 18, 2002 3:51 PM
Subject: Re: Division by Zero/Missing Value Errors
> Yes, the macro is the solution I am using (offered by another user
> off-line). I was really hoping there was a "switch" in SAS that would
allow
> one to turn this type of error off (w/o ignoring all error reporting).
> Thanks,
> Jim
>
> "Dale McLerran" <stringplayer_2@YAHOO.COM> wrote in message
> news:20020718200640.49383.qmail@web21101.mail.yahoo.com...
> > Jim,
> >
> > I am certain that Shiling Zang was arguing against setting _error_=0.
> > Only marginally different would be to set OPTIONS ERRORS=0. I
> > believe that you do have to code the syntax which checks for valid
> > denominator before executing the division. If you have a lot of
> > strict assignment statements which should be checked for valid
> > denominator, then you could write a macro to subtitute the appropriate
> > code so that you don't have to do the tedium. That is, if you have
> > statements like
> >
> > z = y / x;
> >
> > then the macro
> >
> > %macro divide(result,num,denom);
> > if &denom>.Z & &denom^=0 then &result = &num/&denom;
> > %mend;
> >
> > would reduce your coding effort. Within a datastep, all you would
> > need do is invoke the macro as shown below:
> >
> > %divide(z,y,x)
> >
> >
> > This is only marginally more expensive in terms of your coding
> > effort than coding z=y/x. Note that macro variables NUM and DENOM
> > could be functions. There might be some macro quoting which is
> > required to avoid errors for some functions. Other than this, I
> > don't believe that there is anything you can do to ensure not getting
> > division by zero/missing errors.
> >
> > Dale
> >
> >
> > --- Jim <jlinck@UGA.EDU.NOSPAM> wrote:
> > > I don't like that solution. I don't want errors=0 set because I only
> > > want
> > > to stop this particular kind of error. And actually the code to stop
> > > it is
> > > slightly more complicated that the code you wrote (due to missing
> > > values),
> > > and it is this code I am trying to avoid.
> > > Thanks,
> > > Jim
> > > "shiling zhang" <shiling99@yahoo.com> wrote in message
> > > news:feab3d5d.0207181105.64f960d1@posting.google.com...
> > > > Though you can set _error_=0 to maneuver it, I still think it
> > > should
> > > aviod.
> > > > Especially, when you have a great deal of calculation volume, it is
> > > a good
> > > > to use
> > > >
> > > > if xyz ne 0 then zyx=1/xyz;
> > > >
> > > > See the log file below.
> > > >
> > > > ****************************************
> > > > 7020 data t1;
> > > > 7021 do i=1 to 1e7;
> > > > 7022 x=mod(i,3);
> > > > 7023 output;
> > > > 7024 end;
> > > > 7025 run;
> > > >
> > > > NOTE: The data set WORK.T1 has 10000000 observations and 2
> > > variables.
> > > > NOTE: DATA statement used:
> > > > real time 17.56 seconds
> > > > cpu time 17.11 seconds
> > > >
> > > >
> > > > 7026
> > > > 7027 data _null_;
> > > > 7028 set t1;
> > > > 7029 y=i/x;
> > > > 7030 run;
> > > >
> > > > NOTE: Division by zero detected at line 7029 column 7.
> > > > i=3 x=0 y=. _ERROR_=1 _N_=3
> > > > NOTE: Division by zero detected at line 7029 column 7.
> > > > i=6 x=0 y=. _ERROR_=1 _N_=6
> > > > NOTE: Division by zero detected at line 7029 column 7.
> > > > i=9 x=0 y=. _ERROR_=1 _N_=9
> > > > NOTE: Division by zero detected at line 7029 column 7.
> > > > i=12 x=0 y=. _ERROR_=1 _N_=12
> > > > NOTE: Division by zero detected at line 7029 column 7.
> > > > i=15 x=0 y=. _ERROR_=1 _N_=15
> > > > NOTE: Division by zero detected at line 7029 column 7.
> > > > i=18 x=0 y=. _ERROR_=1 _N_=18
> > > > NOTE: Division by zero detected at line 7029 column 7.
> > > > i=21 x=0 y=. _ERROR_=1 _N_=21
> > > > NOTE: Division by zero detected at line 7029 column 7.
> > > > i=24 x=0 y=. _ERROR_=1 _N_=24
> > > > NOTE: Division by zero detected at line 7029 column 7.
> > > > i=27 x=0 y=. _ERROR_=1 _N_=27
> > > > NOTE: Division by zero detected at line 7029 column 7.
> > > > i=30 x=0 y=. _ERROR_=1 _N_=30
> > > > NOTE: Division by zero detected at line 7029 column 7.
> > > > i=33 x=0 y=. _ERROR_=1 _N_=33
> > > > NOTE: Division by zero detected at line 7029 column 7.
> > > > i=36 x=0 y=. _ERROR_=1 _N_=36
> > > > NOTE: Division by zero detected at line 7029 column 7.
> > > > i=39 x=0 y=. _ERROR_=1 _N_=39
> > > > NOTE: Division by zero detected at line 7029 column 7.
> > > > i=42 x=0 y=. _ERROR_=1 _N_=42
> > > > NOTE: Division by zero detected at line 7029 column 7.
> > > > i=45 x=0 y=. _ERROR_=1 _N_=45
> > > > NOTE: Division by zero detected at line 7029 column 7.
> > > > i=48 x=0 y=. _ERROR_=1 _N_=48
> > > > NOTE: Division by zero detected at line 7029 column 7.
> > > > i=51 x=0 y=. _ERROR_=1 _N_=51
> > > > NOTE: Division by zero detected at line 7029 column 7.
> > > > i=54 x=0 y=. _ERROR_=1 _N_=54
> > > > NOTE: Division by zero detected at line 7029 column 7.
> > > > i=57 x=0 y=. _ERROR_=1 _N_=57
> > > > NOTE: Division by zero detected at line 7029 column 7.
> > > > ERROR: Limit set by ERRORS= option reached. Further errors of this
> > > type
> > > > will not be printed.
> > > > i=60 x=0 y=. _ERROR_=1 _N_=60
> > > > NOTE: Mathematical operations could not be performed at the
> > > following
> > > > places. The results of the operations have been set to missing
> > > values.
> > > > Each place is given by: (Number of times) at (Line):(Column).
> > > > 3333333 at 7029:7
> > > > NOTE: There were 10000000 observations read from the data set
> > > WORK.T1.
> > > > NOTE: DATA statement used:
> > > > real time 1:52.94
> > > > cpu time 1:49.28
> > > >
> > > >
> > > > 7031
> > > > 7032 data _null_;
> > > > 7033 set t1;
> > > > 7034 y=i/x;
> > > > 7035 _error_=0;
> > > > 7036 run;
> > > >
> > > > NOTE: Division by zero detected at line 7034 column 7.
> > > > NOTE: Division by zero detected at line 7034 column 7.
> > > > NOTE: Division by zero detected at line 7034 column 7.
> > > > NOTE: Division by zero detected at line 7034 column 7.
> > > > NOTE: Division by zero detected at line 7034 column 7.
> > > > NOTE: Division by zero detected at line 7034 column 7.
> > > > NOTE: Division by zero detected at line 7034 column 7.
> > > > NOTE: Division by zero detected at line 7034 column 7.
> > > > NOTE: Division by zero detected at line 7034 column 7.
> > > > NOTE: Division by zero detected at line 7034 column 7.
> > > > NOTE: Division by zero detected at line 7034 column 7.
> > > > NOTE: Division by zero detected at line 7034 column 7.
> > > > NOTE: Division by zero detected at line 7034 column 7.
> > > > NOTE: Division by zero detected at line 7034 column 7.
> > > > NOTE: Division by zero detected at line 7034 column 7.
> > > > NOTE: Division by zero detected at line 7034 column 7.
> > > > NOTE: Division by zero detected at line 7034 column 7.
> > > > NOTE: Division by zero detected at line 7034 column 7.
> > > > NOTE: Division by zero detected at line 7034 column 7.
> > > > NOTE: Division by zero detected at line 7034 column 7.
> > > > NOTE: Division by zero detected at line 7034 column 7.
> > > > NOTE: Division by zero detected at line 7034 column 7.
> > > > NOTE: Division by zero detected at line 7034 column 7.
> > > > NOTE: Division by zero detected at line 7034 column 7.
> > > > NOTE: Division by zero detected at line 7034 column 7.
> > > > NOTE: Division by zero detected at line 7034 column 7.
> > > > NOTE: Division by zero detected at line 7034 column 7.
> > > > NOTE: Division by zero detected at line 7034 column 7.
> > > > NOTE: Division by zero detected at line 7034 column 7.
> > > > NOTE: Division by zero detected at line 7034 column 7.
> > > > NOTE: Division by zero detected at line 7034 column 7.
> > > > NOTE: Division by zero detected at line 7034 column 7.
> > > > NOTE: Division by zero detected at line 7034 column 7.
> > > > NOTE: Division by zero detected at line 7034 column 7.
> > > > NOTE: Division by zero detected at line 7034 column 7.
> > > > NOTE: Division by zero detected at line 7034 column 7.
> > > > NOTE: Division by zero detected at line 7034 column 7.
> > > > NOTE: Division by zero detected at line 7034 column 7.
> > > > NOTE: Division by zero detected at line 7034 column 7.
> > > > NOTE: Division by zero detected at line 7034 column 7.
> > > > NOTE: Division by zero detected at line 7034 column 7.
> > > > NOTE: Division by zero detected at line 7034 column 7.
> > > > NOTE: Division by zero detected at line 7034 column 7.
> > > > NOTE: Division by zero detected at line 7034 column 7.
> > > > NOTE: Division by zero detected at line 7034 column 7.
> > > > NOTE: Division by zero detected at line 7034 column 7.
> > > > NOTE: Division by zero detected at line 7034 column 7.
> > > > NOTE: Division by zero detected at line 7034 column 7.
> > > > NOTE: Division by zero detected at line 7034 column 7.
> > > > NOTE: Division by zero detected at line 7034 column 7.
> > > > NOTE: Division by zero detected at line 7034 column 7.
> > > > NOTE: Division by zero detected at line 7034 column 7.
> > > > NOTE: Division by zero detected at line 7034 column 7.
> > > > NOTE: Division by zero detected at line 7034 column 7.
> > > > NOTE: Division by zero detected at line 7034 column 7.
> > > > NOTE: Division by zero detected at line 7034 column 7.
> > > > NOTE: Division by zero detected at line 7034 column 7.
> > > > NOTE: Division by zero detected at line 7034 column 7.
> > > > NOTE: Division by zero detected at line 7034 column 7.
> > > > NOTE: Division by zero detected at line 7034 column 7.
> > > > NOTE: Division by zero detected at line 7034 column 7.
> > > > NOTE: Division by zero detected at line 7034 column 7.
> > > > NOTE: Division by zero detected at line 7034 column 7.
> > > > NOTE: Division by zero detected at line 7034 column 7.
> > > > NOTE: Division by zero detected at line 7034 column 7.
> > > > NOTE: Division by zero detected at line 7034 column 7.
> > > > NOTE: Division by zero detected at line 7034 column 7.
> > > > NOTE: Division by zero detected at line 7034 column 7.
> > > > NOTE: Division by zero detected at line 7034 column 7.
> > > > NOTE: Division by zero detected at line 7034 column 7.
> > > > NOTE: Division by zero detected at line 7034 column 7.
> > > > NOTE: Division by zero detected at line 7034 column 7.
> > > > NOTE: Division by zero detected at line 7034 column 7.
> > > > NOTE: Division by zero detected at line 7034 column 7.
> > > > NOTE: Division by zero detected at line 7034 column 7.
> > > > NOTE: Division by zero detected at line 7034 column 7.
> > > > NOTE: Division by zero detected at line 7034 column 7.
> > > > NOTE: Division by zero detected at line 7034 column 7.
> > > > NOTE: Division by zero detected at line 7034 column 7.
> > > > NOTE: Division by zero detected at line 7034 column 7.
> > > > NOTE: Division by zero detected at line 7034 column 7.
> > > > NOTE: Division by zero detected at line 7034 column 7.
> > > > NOTE: Division by zero detected at line 7034 column 7.
> > > > NOTE: Division by zero detected at line 7034 column 7.
> > > > NOTE: Division by zero detected at line 7034 column 7.
> > > > NOTE: Division by zero detected at line 7034 column 7.
> > > > NOTE: Division by zero detected at line 7034 column 7.
> > > > NOTE: Division by zero detected at line 7034 column 7.
> > > > NOTE: Division by zero detected at line 7034 column 7.
> > > > NOTE: Division by zero detected at line 7034 column 7.
> > > > NOTE: Division by zero detected at line 7034 column 7.
> > > > NOTE: Division by zero detected at line 7034 column 7.
> > > > NOTE: Division by zero detected at line 7034 column 7.
> > > > NOTE: Division by zero detected at line 7034 column 7.
> > > > NOTE: Division by zero detected at line 7034 column 7.
> > > > NOTE: Division by zero detected at line 7034 column 7.
> > > > NOTE: Division by zero detected at line 7034 column 7.
> > > > NOTE: Division by zero detected at line 7034 column 7.
> > > > NOTE: Division by zero detected at line 7034 column 7.
> > > > NOTE: Division by zero detected at line 7034 column 7.
> > > > NOTE: Over 100 NOTES, additional NOTES suppressed.
> > > > NOTE: Division by zero detected at line 7034 column 7.
> > > > NOTE: Mathematical operations could not be performed at the
> > > following
> > > > places. The results of the operations have been set to missing
> > > values.
> > > > Each place is given by: (Number of times) at (Line):(Column).
> > > > 3333333 at 7034:7
> > > > NOTE: There were 10000000 observations read from the data set
> > > WORK.T1.
> > > > NOTE: DATA statement used:
> > > > real time 1:46.06
> > > > cpu time 1:44.59
> > > >
> > > >
> > > > 7037
> > > > 7038 data _null_;
> > > > 7039 set t1;
> > > > 7040 if x ne 0 then y=i/x;
> > > > 7041 run;
> > > >
> > > > NOTE: There were 10000000 observations read from the data set
> > > WORK.T1.
> > > > NOTE: DATA statement used:
> > > > real time 14.50 seconds
> > > > cpu time 14.27 seconds
> > > >
> > > >
> > > > ----- Original Message -----
> > > > From: "Jim" <jlinck@uga.edu.nospam>
> > > > Newsgroups: comp.soft-sys.sas
> > > > Sent: Thursday, July 18, 2002 2:04 PM
> > > > Subject: Division by Zero/Missing Value Errors
> > > >
> > > >
> > > > > I often have a great deal of division by missing value/zero
> > > errors in my
> > > > SAS
> > > > > log. Since I often search my log for the word "error" while I am
> > > > debugging
> > > > > programs, this is a pain. What I end up doing is writing lots of
> > > if
> > > > > statements (if denominator=0, then don't do the calc), etc. I
> > > was
> > > > wondering
> > > > > if there is an option to turn of this specific type of error from
> > > > reporting
> > > > > within SAS. Thanks,
> > > > > Jim
> > > > >
> > > > >
> >
> >
> > =====
> > ---------------------------------------
> > Dale McLerran
> > Fred Hutchinson Cancer Research Center
> > mailto: dmclerra@fhcrc.org
> > Ph: (206) 667-2926
> > Fax: (206) 667-5977
> > ---------------------------------------
> >
> > __________________________________________________
> > Do You Yahoo!?
> > Yahoo! Autos - Get free new car price quotes
|