You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SAS实现千分位数字大于1时向上取整的代码开发需求

SAS实现千分位大于1时向上取整到百分位

实现思路

核心逻辑:提取数字的千分位数字,若该数字大于1,则将原数向上取整到百分位;若千分位数字≤1,则保留原数到百分位。

代码实现

首先创建测试数据集:

data test;
    input original_num;
    datalines;
78.858
78.852
78.851
78.123
78.121
99.999
99.991
;
run;

然后编写取整逻辑:

data rounded_result;
    set test;
    /* 提取千分位数字 */
    thousandth_digit = mod(floor(original_num * 1000), 10);
    /* 按规则执行取整 */
    if thousandth_digit > 1 then
        rounded_num = ceil(original_num * 100) / 100;
    else
        rounded_num = round(original_num, 0.01); /* 若需直接截断百分位后数字,可替换为 floor(original_num*100)/100 */
run;

代码说明

  • floor(original_num * 1000):将原数放大1000倍后取整,得到包含千分位的整数
  • mod(..., 10):取上述整数的最后一位,即千分位数字
  • ceil(original_num * 100) / 100:将原数放大100倍后向上取整为整数,再缩小100倍,实现百分位的向上取整
  • round(original_num, 0.01):千分位≤1时,保留原数到百分位(如需截断而非四舍五入,改用floor(original_num*100)/100)

测试结果

original_numthousandth_digitrounded_num
78.858878.86
78.852278.86
78.851178.85
78.123378.13
78.121178.12
99.9999100.00
99.991199.99

负数场景说明

若处理负数,ceil函数会返回大于等于原数的最小整数(例如ceil(-78.852*100)=-7885,对应-78.85),符合向上取整的数学定义。若需对负数按绝对值取整,可调整代码为:

rounded_num = ceil(abs(original_num)*100)/100 * sign(original_num);

内容的提问来源于stack exchange,提问作者J.Price

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 16:05:41