使用 PROC FORMAT 和 PROC FCMP 转换 SAS 中的值

Using PROC FORMAT and PROC FCMP to convert values in SAS

我需要在我的 SAS 程序中编写 PROC FORMATPROC FCMP 以将以马力为单位的值转换为瓦特。瓦特应具有以下格式:XXXXX,XX Watt.

proc fcmp outlib=work.functions.fun;
    function hptow(c) $;
        n = cats(c*745.7, ' Watts');
        return (n);
    endsub;
run;

options cmplib=work.functions;

proc format;
    value hptow other=[hptow()];
    run;

data my_cars;
    set sashelp.cars; 
    format horsepower hptow.;
run;

但结果看起来像这样:

197610.
201339W

如何更改此错误并需要格式化列的输出格式?

为您在函数中计算的变量设置长度。如果您想要 W 前面的 space,请不要使用 CATS() 函数将其删除。

length n ;
n = put(c*745.7,commax8.2) || ' Watts' ;

设置格式的默认宽度。

value hptow (default=14) other=[hptow()];

但为什么不直接使用 PICTURE 格式呢?

proc format ;
picture hptow 
 low-high = '00009,99 Watt' (mult=74570) 
;
run;

结果:

410   data test;
411     do hp=1,2,5,12 ;
412       w=hp*745.7 ;
413       put hp= w= @20 hp hptow.;
414     end;
415   run;

hp=1 w=745.7         745,70 Watt
hp=2 w=1491.4       1491,40 Watt
hp=5 w=3728.5       3728,50 Watt
hp=12 w=8948.4      8948,40 Watt