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
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;
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
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;
Nice going Kurt. And thanks for helping RW9, Reeza and Bruno.
Mission accomplished!
(at least for today....)
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;
Things wrong with your code
1. _num_ instead of _numeric_
2. Format before SET
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.
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.
Ready to level-up your skills? Choose your own adventure.