我有自定义格式:
proc format;
value tmp 0='zero'
1='one'
2='two'
3='three'
4='four'
5='five'
6='six'
7='seven'
8='eight'
9='nine'
run;
我想在图片声明中使用它,以便对于值2.8
,我会得到two point eight
。现在我只得到2 point 8
:
proc format;
picture form 0-9="0 point 0"
(decsep='point');
run;
data _null_;
x=2.8;
put x form.;
run;
如何获得two point eigth
?使用PICTURE语句是一个不错的选择吗?
答案 0 :(得分:2)
我不完全确定你是否可以使用图片格式。但是,你绝对可以在支持它们的SAS版本中使用函数格式。
这里我们编写一个简短函数,使用您之前定义的格式创建您想要的值作为格式化值 - 然后将其用作proc格式的参数。我使用了一些额外的代码行来使它更容易阅读,但如果你愿意,你可以在return语句中完成所有这些。
proc fcmp outlib=work.functions.test;
function wordnum(_number) $;
length pre_dec post_dec $5;
length _return_val $17;
pre_dec = put(floor(_number),tmp5.); *the integer portion;
post_dec = put(floor((_number-floor(_number))*10),tmp5.); *the decimal;
_return_val = catx(' point ',pre_dec,post_dec);
return (_return_val);
endsub;
quit;
options cmplib=work.functions;
proc format;
value form (default=17) 0-9.99= [wordnum()]; *use whatever range is appropriate;
quit;
data _null_;
do x = 0.05 to 9.95 by 0.1;
put x= form17.;
end;
run;
答案 1 :(得分:0)
proc format;
value $tmp '0'='zero'
'1'='one'
'2'='two'
'3'='three'
'4'='four'
'5'='five'
'6'='six'
'7'='seven'
'8'='eight'
'9'='nine';
run;
data _null_;
x=2.8;
_x=cat(put(strip(scan(x,1,'.')),$tmp.),'point ',put(strip(scan(x,-1,'.')),$tmp.));
put _all_;
run;