全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SAS专版
15335 10
2013-06-22
悬赏 488 个论坛币 已解决
sas的四舍五入有round,那么有效数字有没有相关函数?
或者有没有曲折解决办法
例如要保留三位有效数字
0.003456
变成0.00346
0.87
变成0.870
等等
如何保留三位有效数字?

其实呢,我不是想保留有效数字,我是想小数点后保留三位有效数字,即从左边第一个不是零的数字开始取三位,并且是四舍五入形式地取
假如一个值是14.32456,我需要14.325。这样子的


二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

全部回复
2013-6-22 18:25:56
复制代码
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2013-6-22 20:23:23
完美解决。

复制代码


先变字符,再转数字,从根本上改变为所要的结果,保留有效数字。
在SAS自动转化时,会自动四舍五入。
若只用FORMAT,只是改变输出格式,而没有改变数值本身,虽然看不出差别。


二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2013-6-22 20:37:00
你说的意思不是像下面所示的那样吧?

%let a=0.03244214678;
%let b=%SYSFUNC(ROUND(&a,0.00001));
%put &b;

用round函数加参数可以确定保留到小数点后几位,但不能确定有效数字

你所说的保留有效数字的方法,估计得用其他函数来解决了,不知道SAS里有没有
我先查查看
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2013-6-22 20:37:33
data x;
input x;
cards;
0.438484941
0.464599606
9.495493169
9.942254617
0.001569698
0.01562698
3.762151003
1.399460795
0.20005887
10.98864735
3.985306473
9.852477223
2.979635042
;
run;

/*宏功能,不改变变量名字,但将数值变量变成字符变量,因为根据需要,只有字符变量才能满足要求
var为要修改的变量,n为小数点后保留几位有效数字*/
%macro validnum(var=,n=);
position=indexc(left(&var),"123456789");
if position<=3 then z=round(&var,1/(10**&n));
else z=round(&var,1/10**(position+&n-3));
if 10**(&n-2)<scan(z,2,".")+0<10**(&n-1) then var=strip(z)||"0"; /*解决末尾恰好是零被省略的问题*/
else if 10**(&n-2)>=scan(z,2,".")+0 then var=strip(z)||"00";
else var=left(z);
drop &var;
rename var=&var;
drop position z;
%mend;

data c;
set x;
%validnum(var=x,n=4);
run;

凡事都要靠自己
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2013-6-22 20:44:08
Imasasor 发表于 2013-6-22 20:37
data x;
input x;
cards;
嗯,刚在google搜,结果又搜回本坛

https://bbs.pinggu.org/thread-2124278-1-1.html

你看这个行不行,比你写的简单,
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

点击查看更多内容…
相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群