BookmarkSubscribeRSS Feed
🔒 This topic is solved and locked. Need further help from the community? Please sign in and ask a new question.
NKormanik
Barite | Level 11

Title seems straight forward.  I'd like to round every number in a dataset to 3 decimal places, to make reading easier.

 

I'd prefer a generic approach, as I don't have variable names beforehand (using output from Proc Means, autoname).

 

Additionally, a related side question:

 

The following generic format attempt doesn't work:

 

data want;
format _num_ 9.3;
set have;
run;

SAS wants the specific variable name, not the generic _num_.

 

Any suggestions greatly appreciated.

 

Nicholas Kormanik

 

 

1 ACCEPTED SOLUTION

Accepted Solutions
Kurt_Bremser
Super User

If you want to actually round the values that are stored, you can use array logic:

data want;
set have;
array _nums {*} _numeric_;
do i = 1 to dim(_nums);
  _nums{i} = round(_nums{i},.001);
end;
drop i;
run;

 

View solution in original post

5 REPLIES 5
BrunoMueller
SAS Super FREQ

hi

 

Change your FORMAT statement like so

data want;

set sashelp.class;
format _numeric_ 9.3;
run;

Please note this does not round values, it just changes how the value ist displayed.

 

Do you actually want to round the values?

 

Bruno

Kurt_Bremser
Super User

If you want to actually round the values that are stored, you can use array logic:

data want;
set have;
array _nums {*} _numeric_;
do i = 1 to dim(_nums);
  _nums{i} = round(_nums{i},.001);
end;
drop i;
run;

 

NKormanik
Barite | Level 11

Nice going Kurt.  And thanks for helping RW9, Reeza and Bruno.

 

Mission accomplished!

 

(at least for today....)

 

 

RW9
Diamond | Level 26 RW9
Diamond | Level 26

AS @BrunoMueller has said, format does not change the underlying value, only how it is displayed.  To round a value you would use round(), floor(), ceil() functions.  You can do this based on an array if you like:

data have;
  input value1 value2;
  array tmp _numeric_;
  do over tmp;
    tmp=round(tmp,0.001);
  end;
datalines;
1.2354 34.45
23.65788 67.23456
21.34 21.34
;
run;
Reeza
Super User

Things wrong with your code

1. _num_ instead of _numeric_

2. Format before SET

sas-innovate-wordmark-2025-midnight.png

Register Today!

Join us for SAS Innovate 2025, our biggest and most exciting global event of the year, in Orlando, FL, from May 6-9. Sign up by March 14 for just $795.


Register now!

How to Concatenate Values

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.

SAS Training: Just a Click Away

 Ready to level-up your skills? Choose your own adventure.

Browse our catalog!

Discussion stats
  • 5 replies
  • 105426 views
  • 10 likes
  • 5 in conversation