首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >四舍五入(PUT & ROUND) 与 数据顺序影响Proc means 结果

四舍五入(PUT & ROUND) 与 数据顺序影响Proc means 结果

作者头像
归海刀刀
发布2025-06-20 11:53:10
发布2025-06-20 11:53:10
9900
代码可运行
举报
文章被收录于专栏:归海刀刀归海刀刀
运行总次数:0
代码可运行

Mean

—Proc means。

 01

参考资料:

SAS 数值存储方式和精度问题

https://www.cnblogs.com/snoopy1866/p/16021137.html

put和round保留小数

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

SAS 四舍五入 - PUT 与 ROUND

https://www.cnblogs.com/pluuus230713/p/17729557.html


通常生成summary table的时候会对统计量进行四舍五入以达到相应的保留位数要求, 可是同一批数据,对于传入proc mean数据集的顺序不同会产生不同的结果,put出来的结果不一样,以下程序复现了这一过程

代码语言:javascript
代码运行次数:0
运行
复制
data GHDD;
infile datalines dsd missover;
input aval;
datalines;

85.3
100.7
84.7
99.3
79.3
91.3

;
run;

proc sort data=GHDD out=by1;
 by aval;
run;
proc sort data=GHDD out=by2;
 by descending aval;
run;

proc means data=by1;
 var aval;
 output out=by1_sum;
run;

proc means data=by2;
 var aval;
 output out=by2_sum;
run;

data by1_sum;
 length putc roundputc hex $200.;
 set by1_sum;
 putc=strip(put(aval,14.2));
 roundputc=strip(put(round(aval,0.000000001),14.2));
 hex=put(aval,hex16.);
run;

data by2_sum;
 length putc roundputc hex $200.;
 set by2_sum;
 putc=strip(put(aval,14.2));
 roundputc=strip(put(round(aval,0.000000001),14.2));
 hex=put(aval,hex16.);
run;

proc compare base=by1_sum comp=by2_sum listall CRITERION=0.000000001 MAXPRINT=(,);

run;
图片
图片
图片
图片
图片
图片

结果可以看出87.575对应的十六进制是不一样的,导致put出来的结果不一样,差异还挺大,所以还是建议可以允许误差范围内(如CRITERION=0.000000001)进行round,然后进行put为字符型。初步探索判定是proc means载入数据顺序影响了计算的结果。

尊敬的读者,首先感谢您对本篇文章的关注和阅读。在此,本小编想要说明的是,以上所述内容都是经过笔者认真整理和撰写的,但限于个人能力和知识水平等因素,难免存在疏漏或错误之处。如有不当之处,敬请包涵并指正,本小编将虚心接受您的批评与建议,并严谨修正文章。再次感谢您对本篇文章的支持与厚爱。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2025-06-19,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 归海刀刀 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • SAS 数值存储方式和精度问题
  • put和round保留小数
  • SAS 四舍五入 - PUT 与 ROUND
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档