Help using Base SAS procedures

Proc Format - create format similar to PERCENTw.d

Reply
New User
Posts: 1

Proc Format - create format similar to PERCENTw.d

[ Edited ]

How can I create a format that is functionally equivalent to PERCENTw.d, but with the string \% appearing instead of the % sign?

 

I understand that PERCENTw.d operates by multiplying a term by 100, converting to BESTw.d, and then appending a % symbol.  But I have not been able to reconstruct this process. 

 

I have tried this:

proc fcmp outlib=work.functions.smd;
 function LPCfunc(x) $;
 return(cats(100*x,'\%'));
 endsub;
run;

options cmplib=(work.functions);

proc format;
 value LPC  other=[LPCfunc()];
 run;

This function LPCfunc seems to work, and according to the log, a format called LPC is being generated.  But I cannot seem to call it.  When I try using it in a format declaration, the variable ends up having format BEST12.:

data temp1;
set temp1;
format C percent10.4;
run;

data temp1;
set temp1; 
format E LPC.;
D=LPCfunc(C); 
E=C;
run;

--------

 

I am using SAS for Windows 9.4 TS Level 1M0.

Super User
Posts: 19,810

Re: Proc Format - create format similar to PERCENTw.d

Your code is partially correct.

How you create the format is correct, how you're trying to use it perhaps not?

 

This works for me:

 

 data test;
 set sashelp.class;
 weight2=weight/100;
 format weight2 lpc.;
 run;

 proc print data=test;
 run;

 Thsi is what I get:

 

 Obs    Name       Sex    Age    Height    Weight    weight2

                    1    Alfred      M      14     69.0      112.5    112.5\%
                    2    Alice       F      13     56.5       84.0    84\%
                    3    Barbara     F      13     65.3       98.0    98\%
                    4    Carol       F      14     62.8      102.5    102.5\%
                    5    Henry       M      14     63.5      102.5    102.5\%
                    6    James       M      12     57.3       83.0    83\%
                    7    Jane        F      12     59.8       84.5    84.5\%
                    8    Janet       F      15     62.5      112.5    112.5\%
                    9    Jeffrey     M      13     62.5       84.0    84\%
                   10    John        M      12     59.0       99.5    99.5\%
                   11    Joyce       F      11     51.3       50.5    50.5\%
                   12    Judy        F      14     64.3       90.0    90\%
                   13    Louise      F      12     56.3       77.0    77\%
                   14    Mary        F      15     66.5      112.0    112\%
                   15    Philip      M      16     72.0      150.0    150\%
                   16    Robert      M      12     64.8      128.0    128\%
                   17    Ronald      M      15     67.0      133.0    133\%
                   18    Thomas      M      11     57.5       85.0    85\%
                   19    William     M      15     66.5      112.0    112\%

 

Respected Advisor
Posts: 4,923

Re: Proc Format - create format similar to PERCENTw.d

You could use a picture format. Something like this:

 

proc format;
picture lpc
-1 -< 0 = '009.99\%)' (mult=10000 prefix='(')
0 - high = '009.99\%' (mult=10000);
run;

data _null_;
do x = -1, -0.999, -0.5, -0.05, 0, 0.01, 0.5, 1.5555, 2;
    put x= 7.2 +5 x lpc10.;
    end;
run; 
x=-1.00      (100.00\%)
x=-1.00       (99.90\%)
x=-0.50       (50.00\%)
x=-0.05        (5.00\%)
x=0.00          0.00\%
x=0.01          1.00\%
x=0.50         50.00\%
x=1.56        155.55\%
x=2.00        200.00\%
PG
Community Manager
Posts: 2,954

Re: Proc Format - create format similar to PERCENTw.d

Also, make sure that WORK is in your FMTSEARCH path, assuming you're placing the new format into the WORK library:

 

options insert(fmtsearch=(WORK));
Ask a Question
Discussion stats
  • 3 replies
  • 220 views
  • 5 likes
  • 4 in conversation