2016-06-10 174 views
3

您好我有兴趣为我在SAS中生成的数据制作一些稍微复杂的自定义格式。我需要它是数字类型。SAS的自定义格式

FORMAT 1

0="-" 
>0="<number>%" 
<0="<number>%" 

0 >>>>>>> - 
.74 >>>>> 74% 
-.65>>>>> -65% 

FORMAT 2

0="-" 
>0="$<number(with commas)>" 
<0="$(<number(with commas)>" 

0>>>>>>- 
1467>>>>$1,467 
-39087>>$(39,087) 

我做了使用简单的代码自定义格式这样

proc format; 
picture test 
    0='-'; 
run; 

但我不知道怎么写的语法追加$标志和()迹象。

谢谢。

回答

5

百分比格式非常简单。因为你必须观察你的宽度,所以美元是一个小技巧。

基本上你需要使用prefix在前面获得任何东西(美元,paren,减号),并在末尾放置任何你想要的东西。 '0'表示有时打印数字,'9'表示始终打印数字。

您使用mult使.13 - > 13%。

而且,对于美元,您可以使用dollar格式。您可能也可以在负面使用NEGPAREN格式,但不能将其与美元符号结合使用。

proc format; 
picture pctfmt 
    low - <0= '000%' (mult=100 prefix='-') 
    0  = '-' 
    0<-high = '000%' (mult=100); 
picture dollfmt 
    low - <0 = '000,000,000.00)' (prefix='$(') 
    0   = '-' 
    0 <- high = [dollar16.2] 
    ; 

run; 

data _null_; 
input x; 
put x= pctfmt.; 
datalines; 
-.15 
-.05 
0 
.05 
.15 
;;;; 
run; 


data _null_; 
input x; 
put x= dollfmt12.2; 
datalines; 
-5.93 
-13432554 
0 
12345324 
5.98 
;;;; 
run; 
+0

这太好了。 'low - <0 ='000,000,000.00'''(prefix ='$(')'line是如何工作的?这些零代表什么?谢谢! –

+1

'0'是数字选择器。'0'表示可选的print'而非零值(我使用9)意味着'强制性打印'(如'wd' vs'Zw.d'格式)。您也可以使用'dig3sep'选项来指定逗号,但我发现它很容易阅读(因为你不能使用快捷方式) – Joe

+0

是否有一种方法可以使用特定的样式?我发现任何小于.01和大于0的数字,以及大于-.01的任何数字,小于零,成为一个空格,而不是一个0(导致“ - ”)。我找到了一种方法来解决它,但它是沉重的和低效的 –