2016-12-01 5 views
2

Мне нужно принять значение 18.433333333 и вывести его как 18.4. В то же время мне нужно значение 5 для вывода как 5.SAS: выводить числовые значения, округленные до одного десятичного знака, за исключением целого числа

Как я могу это сделать?

Все мои номера попадают в диапазон [0, 100]. Таким образом, ширина 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 
+0

Best4.1 работает в SAS 9.4. Документы кажутся запутанными в отношении этого, хотя я бы и ожидал, что bestD4.1 тоже должен был работать. Мои ответы удаляются, поэтому я также разместил их здесь. – Reeza

ответ

1

Использование BEST4.1 вместо BESTD4.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;