Попытка отформатировать поле в SAS, игнорируя десятичные дроби - PullRequest
0 голосов
/ 08 апреля 2019

Я пытаюсь отформатировать определенное поле в следующем формате: если значение равно 60,00, оно должно отображаться как 60. если значение равно 14,32, оно должно отображаться как 1432, а если оно равно 0,00, то выходное значение должно быть 0т. е. не должно отображаться десятичное число.

Ниже приведены наборы данных и выбранный вариант.

data input_dataset;
 input srno $ bill_amt $10.;
 datalines;
 1 60.00
 2 0.00
 3 14.32
 ;
 run;



data test;
 set input_dataset;
 format mc062 $10.;
 mc062 = put((bill_amt *100 ),10.);

run;

     expected Results are:
     mc062:
     60
     0
     1432

Ответы [ 2 ]

0 голосов
/ 09 апреля 2019

Пользовательский формат PICTURE масштабирует значение данных перед отображением цифр в соответствии с шаблоном изображения.

В этом примере есть шаблон для значений до 12 цифр после масштабирования.

proc format;
  picture nodecimals 
    0 = '9'
    other='000000000000'   /* 12 digit selectors */
    (mult=100)             /* value scaling multiplier */
  ;
run;

data have;
 input srno $ bill_amt ;  * get some NUMERIC billing amounts;

 format bill_amt 10.2;    * format to be used when showing value;

 * copy amount into bill_raw (no format) just for learning about 
 * the effect of a format (or not) in output produced for viewing;
 bill_raw = bill_amt;     

 * copy amount in mc062 variable that will custom PICTURE format applied
 * when output (for viewing) is produced;
 mc062 = bill_amt;
 format mc062 nodecimals.;

 datalines;
 1 60.00
 2 0.00
 3 14.32
 4 123.456
 ;
 run;

* produce some output for viewing;
proc print data=have;
run;
0 голосов
/ 08 апреля 2019

Как насчет чего-то вроде:

data input_dataset;
input srno $ bill_amt ;
datalines;
1 60.00
2 0.00
3 14.32
;
run;

data output_dataset;
set input_dataset;
if (bill_amt NE int(bill_amt))then bill_amt = bill_amt * 100;
run;
...