- Mark as New
- Bookmark
- Subscribe
- Mute
- RSS Feed
- Permalink
- Report Inappropriate Content
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
- Tags:
- round
Accepted Solutions
- Mark as New
- Bookmark
- Subscribe
- Mute
- RSS Feed
- Permalink
- Report Inappropriate Content
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;
- Mark as New
- Bookmark
- Subscribe
- Mute
- RSS Feed
- Permalink
- Report Inappropriate Content
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
- Tags:
- ARRAY FORMAT
- Mark as New
- Bookmark
- Subscribe
- Mute
- RSS Feed
- Permalink
- Report Inappropriate Content
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;
- Mark as New
- Bookmark
- Subscribe
- Mute
- RSS Feed
- Permalink
- Report Inappropriate Content
Nice going Kurt. And thanks for helping RW9, Reeza and Bruno.
Mission accomplished!
(at least for today....)
- Mark as New
- Bookmark
- Subscribe
- Mute
- RSS Feed
- Permalink
- Report Inappropriate Content
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;
- Mark as New
- Bookmark
- Subscribe
- Mute
- RSS Feed
- Permalink
- Report Inappropriate Content
Things wrong with your code
1. _num_ instead of _numeric_
2. Format before SET