楼主: choasxiao
12813 9

sas 对数值型数据保留3位有效数字 [推广有奖]

  • 0关注
  • 0粉丝

大专生

28%

还不是VIP/贵宾

-

威望
0
论坛币
71 个
通用积分
0.0064
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
387 点
帖子
64
精华
0
在线时间
20 小时
注册时间
2011-10-25
最后登录
2016-11-14

楼主
choasxiao 发表于 2012-10-31 09:50:41 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
比如有一组数值型a={0.1200,0.0898,0.1223,0.5430}怎样用sas程序保留3位有效数字
即结果为b={0.120,0.0898,0.122,0.543}
二维码

扫码加我 拉你入群

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

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

关键词:数值型 sas程序 有效

回帖推荐

ziyenano 发表于5楼  查看完整内容

format只是输出形式上改变,比如0.1223,输出形式为d7.3,输出形式为0.122,但数据的本质还是0.1223, a=input(put(a,d7.3),d7.3); 这样数据的本质就变成0.122。

沙发
Imasasor 发表于 2012-10-31 10:44:52
a=round(a,0.001);
欢迎加入亚太地区第一R&Python数据挖掘群: 251548215;

藤椅
choasxiao 发表于 2012-10-31 10:47:22
format a d7.3;

板凳
choasxiao 发表于 2012-10-31 10:55:05
Imasasor 发表于 2012-10-31 10:44
a=round(a,0.001);
这个不行 比如0.0891 出来结果为0.089 不是3位有效数字
刚才解决了 用format a d7.3;

报纸
ziyenano 发表于 2012-10-31 11:30:45
choasxiao 发表于 2012-10-31 10:55
这个不行 比如0.0891 出来结果为0.089 不是3位有效数字
刚才解决了 用format a d7.3;
format只是输出形式上改变,比如0.1223,输出形式为d7.3,输出形式为0.122,但数据的本质还是0.1223,
a=input(put(a,d7.3),d7.3);
这样数据的本质就变成0.122。

地板
choasxiao 发表于 2012-10-31 11:46:18
ziyenano 发表于 2012-10-31 11:30
format只是输出形式上改变,比如0.1223,输出形式为d7.3,输出形式为0.122,但数据的本质还是0.1223,
a= ...
用format a d7.3; 跑出来的结果用来计算的话 比如b=a*10000;还是会出来b=1223(假设原始a=0.1223)?

7
choasxiao 发表于 2012-10-31 11:52:34
ziyenano 发表于 2012-10-31 11:30
format只是输出形式上改变,比如0.1223,输出形式为d7.3,输出形式为0.122,但数据的本质还是0.1223,
a= ...
data a;
set d.all;

b=input(COTRT_,8.0);
format b d7.3;run;

这样就好了  cotrt_ 为原始字符型 变量  现在转化为数值型有效数字为3位

你这样好像不行...

8
ziyenano 发表于 2012-10-31 14:45:09
data ex;
format a d7.3;
a=0.1223;
b=a*10000;
c=input(put(a,d7.3),d7.3);
d=c*10000;
put a= b= c= d=;
run;
/*a=0.122 b=1223 c=0.122 d=1220*/

9
1127ev 发表于 2015-2-8 22:47:34
同学不好意思,追问一下:你有试过a=1.1223吗?如果是这样,c=1.122就不是3位有效数字了,对吧?有再求解的吗?我也遇到这个问题。

10
赵安豆 发表于 2024-7-9 16:00:54
在SAS中,你可以使用格式化输出来控制数值的有效位数。对于你的需求,保留三位有效数字(包括小数点前的数字),可以使用 BEST. 格式或者 COMMA. 格式,并配合长度定义。

以下是具体的SAS程序代码:

```sas
data have;
  input a;
  datalines;
0.1200
0.0898
0.1223
0.5430
;
run;

data want;
  set have;
  b = put(a, best.);
  
  * 如果你想确保总共有三位数字,包括前导零:
  if _n_ eq 1 then do; /* 这里只针对第一个观测做检查以确定是否需要调整格式 */
    length c $8;
    c = put(b, 8.); /* 增加字符长度,避免截断 */
    b = strip(translate(c,' ','0')); /* 替换空格为零,并去除末尾的空格 */
  end;
run;

proc print data=want noobs; run;
```

但是,上面的代码可能对于所有数值不是都适用。对于你的需求,更简单且有效的写法是:

```sas
data have;
  input a;
  datalines;
0.1200
0.0898
0.1223
0.5430
;
run;

data want;
  set have;
  b = put(a, best7.);
run;

proc print data=want noobs; run;
```

在这个例子中,`best7.` 格式会尝试以最少的字符表示数字(不超过七个),并且尽量保留三位有效数字。对于你的数据集中的数值,这将产生正确的输出。

注意:上面代码中的 `best7.` 可能需要根据实际数值范围和精度需求进行调整。如果大部分数值都在0-1之间,则可能需要使用如`8.3`这样的格式(例如 `put(a, 8.3)`),以确保小数点前有足够的零作为占位符。但是,对于你给出的例子中的数字,使用 `best7.` 应该已经足够了。
```

此文本由CAIE学术大模型生成,添加下方二维码,优先体验功能试用



您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2025-12-29 08:03