```Date: Fri, 26 May 2006 10:41:37 -0400 Reply-To: Jim Groeneveld Sender: "SAS(r) Discussion" From: Jim Groeneveld Subject: Re: Decimal places and values Comments: To: Jyothi Nekkalapudi Hi Jyothi, Have look at the log: 1 DATA _NULL_; 2 x = 54.46698; 3 x = PUT (x, 11.4); 4 PUT x=; 5 RUN; NOTE: Character values have been converted to numeric values at the places given by: (Line):(Column). 3:7 x=54.467 Variable x is numeric, is been PUT to a _character_ value with format 11.4 as 54.4670, the correctly rounded value, and subsequently implicitly converted back to numeric before being stored in the numeric variable x as a value that prints as 54.467 . If you store the result PUT in y, which then is a character variable, the result is (also correct rounding): 1 DATA _NULL_; 2 x = 54.46698; 3 y = PUT (x, 11.4); 4 PUT y=; 5 RUN; y=54.4670 If you want rounding of a numerical value while staying a numerical value you should use the ROUND function: 1 DATA _NULL_; 2 x = 54.46698; 3 x = ROUND (x,.0001); 4 PUT x=; 5 RUN; x=54.467 This is a correct rounding result, the trailing 0 is not printed. Now if you don't want rounding, but just truncating, then do so by subtracting half the smallest unit before rounding (the functions TRUNC and FLOOR are not useful here): 1 DATA _NULL_; 2 x = 54.46698; 3 x = ROUND (x-.00005,.0001); 4 PUT x=; 5 RUN; x=54.4669 Another way is a picture format and a character variable Y: 1 PROC FORMAT; 2 PICTURE _4decs 3 OTHER = 00.9999 4 ; 5 RUN; 6 7 DATA _NULL_; 8 x = 54.46698; 9 y = PUT (x, _4decs.); 10 PUT y=; 11 RUN; y=54.4669 But the ultimate, unavoidable and always posed question to you is: why would you do this if you can store the whole original unrounded value and only truncate it at the moment of presentation using a (picture) format? Regards - Jim. -- Jim Groeneveld, Netherlands Statistician, SAS consultant home.hccnet.nl/jim.groeneveld On Fri, 26 May 2006 09:49:44 -0400, Jyothi Nekkalapudi wrote: >Hello, >I have a question regarding limiting the number of decimal values. In a >SAS dataset I have 8 variables whose values need to be restricted to 4 >places and 2 variables whose values need to be restricted to 2 places. > >If x = 54.46698 in the current SAS dataset, I want x = 54.4669. > >I have used put function > do over pd; > pd = put(pd,11.4); > end; > >which gives me a value of 54.467. >How can I avoid this rounding off and get the precise value, and limit the >decimal places. >Any help will be great.Thank You. ```

Back to: Top of message | Previous page | Main SAS-L page