在SAS通过DB2直通式SQL实现结果指定四舍五入的问题求助
SAS中实现数值百万级四舍五入显示的方法
问题背景
通过SAS直通DB2创建WORK.ISSUES1671表:
PROC SQL; CREATE TABLE WORK.ISSUES1671 AS SELECT * FROM CONNECTION TO MYDB ( SELECT COUNT(DISTINCT ISSUE_ID) AS ISSUE_ID, SUM(PAID_TO_DT_AMT) AS PAID_TO_DATE_YTD FROM LOD.RMD ); QUIT;
表中数据为:
| ISSUE_ID | PAID_TO_DATE_YTD |
|---|---|
| 3746 | 1015768311.9 |
执行以下计算得到正确结果$172,081,972.83,但需要将其转换为**$172.1**(即按百万级四舍五入保留一位小数):
PROC SQL; SELECT SUM(PAID_TO_DATE_YTD-843686339.02) AS PAIDOUT_YTD FORMAT=DOLLAR18.2 FROM WORK.ISSUES1671; QUIT;
解决办法
方法1:直接计算转换+ROUND函数
先将结果除以100万,用ROUND函数保留一位小数,再通过DOLLAR格式显示:
PROC SQL; SELECT ROUND(SUM(PAID_TO_DATE_YTD - 843686339.02)/1000000, 0.1) AS PAIDOUT_YTD FORMAT=DOLLAR5.1 FROM WORK.ISSUES1671; QUIT;
ROUND(数值, 0.1):确保数值四舍五入到一位小数FORMAT=DOLLAR5.1:适配$172.1的显示长度,自动添加美元符号
方法2:自定义PICTURE格式
通过PROC FORMAT创建专属格式,自动完成数值缩放和格式显示:
PROC FORMAT; PICTURE MILLION (DEFAULT=6) LOW-HIGH = '$000.0' (MULT=0.000001); RUN; PROC SQL; SELECT SUM(PAID_TO_DATE_YTD - 843686339.02) AS PAIDOUT_YTD FORMAT=MILLION. FROM WORK.ISSUES1671; QUIT;
MULT=0.000001:将原始数值除以100万'$000.0':定义显示格式,自动补位并保留一位小数
方法3:使用PUT函数显式转换
在SELECT语句中用PUT函数直接格式化结果(结果为字符型,适合仅需显示的场景):
PROC SQL; SELECT PUT(ROUND(SUM(PAID_TO_DATE_YTD - 843686339.02)/1000000, 0.1), DOLLAR5.1) AS PAIDOUT_YTD FROM WORK.ISSUES1671; QUIT;
内容的提问来源于stack exchange,提问作者JC411911
相关产品推荐
相关产品推荐

