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.
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\%
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\%
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));
Don't miss out on SAS Innovate - Register now for the FREE Livestream!
Can't make it to Vegas? No problem! Watch our general sessions LIVE or on-demand starting April 17th. Hear from SAS execs, best-selling author Adam Grant, Hot Ones host Sean Evans, top tech journalist Kara Swisher, AI expert Cassie Kozyrkov, and the mind-blowing dance crew iLuminate! Plus, get access to over 20 breakout sessions.
Learn the difference between classical and Bayesian statistical approaches and see a few PROC examples to perform Bayesian analysis in this video.
Find more tutorials on the SAS Users YouTube channel.