I wantto round 6274.5679 to the nearest integer to get 6275
Here is what I wrote data want ; set have ; format newvar 6. ; newvar = Round(oldvar,1); run; the error i get is Variable is oldvar uninitialized.
What mistake am I making.
Randy
Evidently, "oldvar" is the incorrect spelling. Run a PROC CONTENTS on your incoming data set to find the correct spelling of the variable names.
If you want the integer portion of a variable, the INT function is what you are looking for
data have;
value = 6274.5679;
round_value = round(value);
int_value = int(value);
put round_value;
put int_value;
run;
data _null_;
x=6274.4999;
put x hex16.;
/* here is the problem non-terminating mantissa
cannot represent the number exactly - you have lost already.
6274.4999
40B8827FF9724745
like 1/3 in decimal (never is exact)
0.3333333333333
*/
x=62744999;
put x hex16.;
/* got it exactly
62744999
418DEB4D38000000
*/
x=6274.5;
put x hex16.;
/* got it exactly (when mantissa is a power of 2**(-n))
6274.5
40B8828000000000
*/
/* possible solution;
summing in the integer domain is exact (given no overflow);
I don not think it has to be this complex;
*/
input numchr $9.;
put numchr;
numchr=compress(numchr,'.');
exact_integer=input(numchr,9.);
put exact_integer hex16.;
* in microcode this should be a bit shifting operation and should be exact?;
res=round(exact_integer,10000);
res=res/10000;
put res 9.4;
cards4;
6274.4999
6274.5000
6274.5001
;;;;
run;quit;
Don't miss out on SAS Innovate - Register now for the FREE Livestream!
Can't make it to Vegas? No problem! Watch our general sessions LIVE or on-demand starting April 17th. Hear from SAS execs, best-selling author Adam Grant, Hot Ones host Sean Evans, top tech journalist Kara Swisher, AI expert Cassie Kozyrkov, and the mind-blowing dance crew iLuminate! Plus, get access to over 20 breakout sessions.
Learn how use the CAT functions in SAS to join values from multiple variables into a single value.
Find more tutorials on the SAS Users YouTube channel.