Formatting SAS:输出四舍五入到小数点后一位的数值,除非是整数
我需要取一个像Formatting SAS:输出四舍五入到小数点后一位的数值,除非是整数,formatting,sas,report,Formatting,Sas,Report,我需要取一个像18.433333333这样的值,并将其输出为18.4。同时,我需要像5这样的值作为5输出 我该怎么做 我所有的数字都在[01100]的范围内。因此,4的宽度似乎是合适的。每个数字字符三个,小数一个。最好的格式选择是BESTDw.p或w.d 如果我使用BESTD4.1,则5是5,但18.433333333是18 如果我使用4.1,则18.433333333是18.4,但5是5.00 这将出现在PROC报告的上下文中 data example; input ID $
18.433333333
这样的值,并将其输出为18.4
。同时,我需要像5
这样的值作为5
输出
我该怎么做
我所有的数字都在[01100]的范围内。因此,4的宽度似乎是合适的。每个数字字符三个,小数一个。最好的格式选择是BESTDw.p
或w.d
如果我使用BESTD4.1
,则5
是5
,但18.433333333
是18
如果我使用4.1
,则18.433333333
是18.4
,但5
是5.00
这将出现在PROC报告的上下文中
data example;
input
ID $
wd
bestdwp
;
datalines;
1 18.433333333 18.433333333
2 5 5
;
run;
proc report data = example;
column
ID
wd
bestdwp
;
define ID / 'ID';
define wd / 'w.d' format = 4.1;
define bestdwp / 'BESTDw.p' format = bestd4.1;
run;
然后输出为:
BEST
ID w.d Dw.p
1 18.4 18
2 5.0 5
使用
BEST4.1
代替BESTD4.1
从文件中
整数是不带小数的
带小数的数字根据需要或宽度允许,在小数点的左右两侧写尽可能多的数字
您可以使用自定义图片格式执行此操作。我不确定是否有更简单的方法,除了在将数值变量传递到
proc report
之前将其转换为文本之外:
proc format;
picture mixed
%macro loop;
%do i = 0 %to 99;
&i = '99'
&i <-< %eval(&i+1) = '99.9'
%end;
%mend;
%loop;
run;
data _null_;
do i = 18.33, 18;
put i mixed.;
end;
run;
类似构造的非图片格式也适用:
proc format;
value mixed
%macro loop;
%do i = 0 %to 99;
&i = [2.]
&i <-< %eval(&i+1) = [4.1]
%end;
%mend;
%loop;
run;
proc格式;
价值混合
%宏循环;
%i=0%至99;
&i=[2]
&我的Best4.1在SAS 9.4中工作。但文档似乎对此感到困惑,我希望Best4.1也能工作。我的答案被删除了,所以我也在这里发布了它。
proc format;
value mixed
%macro loop;
%do i = 0 %to 99;
&i = [2.]
&i <-< %eval(&i+1) = [4.1]
%end;
%mend;
%loop;
run;