使用自定义格式的PICTURE语句

时间:2015-04-08 16:54:48

标签: sas

我有自定义格式:

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语句是一个不错的选择吗?

2 个答案:

答案 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;