2

我正在尝试创建一种格式,以传达我正在使用的数据的规模感。如果数字 >= 1000,我想添加K一个后缀,并用 '000s 表示。例如。 123456将是123K

这是我到目前为止所拥有的,但显然我误解了一些基本的东西,因为输入的数字看起来不像出来的数字:

proc format;
  picture abbrev
    0              = '0'
    0     -< 1000  = '000' 
    1000  - high   = '0,000,000k' (mult=.0001)
    ;
run; 

%put %sysfunc(sum(123456.0),abbrev.) /*SHOULD BE SOMETHING LIKE 123K  */
     %sysfunc(sum(12345.60),abbrev.) /*SHOULD BE SOMETHING LIKE 12.3K */
     %sysfunc(sum(1234.560),abbrev.) /*SHOULD BE SOMETHING LIKE 1.3K  */
     %sysfunc(sum(123.4560),abbrev.) /*SHOULD BE SOMETHING LIKE 123   */
     %sysfunc(sum(12.34560),abbrev.) /*SHOULD BE SOMETHING LIKE 12    */
     %sysfunc(sum(1.234560),abbrev.) /*SHOULD BE SOMETHING LIKE 1     */
     ;
4

1 回答 1

4

首先,你犯了一个数学错误;对于 1000,mult 是 0.001,而不是 0.0001。

其次,如果你想要小数,你必须更好地理解图片。图片就是它所说的:一张图片。它没有 BEST. 甚至 COMMA 之类的“必要时添加小数”。它只提供您在图片中要求的小数。但是,您还必须为此调整您的 mult - 图片仅取小数点左侧的数字,并在其顶部放置一个新的小数点。

没有小数(见 .001):

proc format;
  picture abbrev
    0              = '0'
    0     -< 1000  = '000' 
    1000  - high   = '0,000,000k' (mult=.001)
    ;
run; 

%put %sysfunc(sum(123456.0),abbrev.) /*SHOULD BE SOMETHING LIKE 123K  */
     %sysfunc(sum(12345.60),abbrev.) /*SHOULD BE SOMETHING LIKE 12.3K */
     %sysfunc(sum(1234.560),abbrev.) /*SHOULD BE SOMETHING LIKE 1.3K  */
     %sysfunc(sum(123.4560),abbrev.) /*SHOULD BE SOMETHING LIKE 123   */
     %sysfunc(sum(12.34560),abbrev.) /*SHOULD BE SOMETHING LIKE 12    */
     %sysfunc(sum(1.234560),abbrev.) /*SHOULD BE SOMETHING LIKE 1     */
     ;

使用小数(现在是 0.01,因为小数来自相乘后的个位):

proc format;
  picture abbrev
    0              = '0'
    0     -< 1000  = '000' 
    1000  - high   = '0,000,000.0k' (mult=.01)
    ;
run; 

%put %sysfunc(sum(123456.0),abbrev.) /*SHOULD BE SOMETHING LIKE 123K  */
     %sysfunc(sum(12345.60),abbrev.) /*SHOULD BE SOMETHING LIKE 12.3K */
     %sysfunc(sum(1234.560),abbrev.) /*SHOULD BE SOMETHING LIKE 1.3K  */
     %sysfunc(sum(123.4560),abbrev.) /*SHOULD BE SOMETHING LIKE 123   */
     %sysfunc(sum(12.34560),abbrev.) /*SHOULD BE SOMETHING LIKE 12    */
     %sysfunc(sum(1.234560),abbrev.) /*SHOULD BE SOMETHING LIKE 1     */
     ;

有关更多详细信息和一个很好的示例,请参阅SAS 文档

于 2014-05-22T18:18:54.427 回答