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_num | thousandth_digit | rounded_num |
|---|---|---|
| 78.858 | 8 | 78.86 |
| 78.852 | 2 | 78.86 |
| 78.851 | 1 | 78.85 |
| 78.123 | 3 | 78.13 |
| 78.121 | 1 | 78.12 |
| 99.999 | 9 | 100.00 |
| 99.991 | 1 | 99.99 |
负数场景说明
若处理负数,ceil函数会返回大于等于原数的最小整数(例如ceil(-78.852*100)=-7885,对应-78.85),符合向上取整的数学定义。若需对负数按绝对值取整,可调整代码为:
rounded_num = ceil(abs(original_num)*100)/100 * sign(original_num);
内容的提问来源于stack exchange,提问作者J.Price
相关产品推荐
相关产品推荐

