标题: 数字的精度问题 [打印本页] 作者: shiyiming 时间: 2004-5-20 15:50 标题: 数字的精度问题 我想把字符型的变量转成数字型,但是精度损失很大。如何解决啊?
[code:57263]data _null_;
a='1234567890.1234567890';
b=inputn(a, 21.10);
put a=;
put b=;
run;[/code:57263]
LOG
[quote:57263]1 data _null_;
2 a='1234567890.1234567890';
3 b=inputn(a, 21.10);
4 put a=;
5 put b=;
6 run;
NOTE: Numeric values have been converted to character
values at the places given by: (Line):(Column).
509:13
a=1234567890.1234567890
b=1234567890.1
NOTE: DATA statement used:
real time 0.00 seconds
cpu time 0.00 seconds[/quote:57263]作者: shiyiming 时间: 2004-5-20 17:21
又试了一段,直接用数字型变量赋值,似乎SAS只支持16位的总长(包括小数点),但是HELP明明写着支持32位啊。
[code:d40ca]data _null_;
length a 8;
informat a 21.10;
format a 21.10;
a=1234567890.1234567890;
put a=;
run;[/code:d40ca]
LOG
[quote:d40ca]1 data _null_;
2 length a 8;
3 informat a 21.10;
4 format a 21.10;
5 a=1234567890.1234567890;
6 put a=;
7 run;
a=1234567890.1234500000
NOTE: DATA statement used:
real time 0.00 seconds
cpu time 0.00 seconds[/quote:d40ca]
HELP
[quote:d40ca]'Informat' 'Description' 'Width Range' 'Decimal Range' 'Default Width'
w.d reads standard numeric data 1-32 0-31[/quote:d40ca]作者: shiyiming 时间: 2004-5-20 17:22
Windows下,length 8的数值最高精度为15个数字。
[code:61dd6]data _null_;
format b c d best30.;
a = '1234567890.123456789012345678';
b = a;
c = scan(a,1,'.');
d = '0.'||scan(a,2,'.');
put a = ;
put b = ;
put c = ;
put d = ;
run;[/code:61dd6]