SAS:输出数值四舍五入到一个小数位,除非是整数

时间:2016-12-01 21:54:47

标签: formatting sas report

我需要获取18.433333333之类的值并将其输出为18.4。与此同时,我需要将5之类的值输出为5

我该怎么做?

我的所有数字都在[0,100]范围内。因此,宽度为4似乎是合适的。每个数字字符三个,小数字一个。格式的最佳选择似乎是BESTDw.pw.d

如果我使用BESTD4.1,则5根据需要为5,但18.43333333318

如果我使用4.1,则18.433333333根据需要为18.4,但55.00

这出现在PROC REPORT的背景下。

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

2 个答案:

答案 0 :(得分:1)

使用BEST4.1代替BESTD4.1

来自文档

  

写入的整数不带小数。

     

带小数的数字根据需要或宽度允许的小数点左侧和右侧写入尽可能多的数字。

答案 1 :(得分:0)

您可以使用自定义图片格式执行此操作。我不确定是否有更简单的方法,除了在将数字变量传递给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;

输出:

18.3
  18

类似构造的非图片格式也有效:

proc format;
value mixed
  %macro loop;
    %do i = 0 %to 99;
      &i = [2.]
      &i <-< %eval(&i+1) = [4.1]
    %end;
  %mend;
  %loop;
run;