How can I make a character variable equal to the formatted value of a numeric variable for arbitrary SAS formats?

sas
Simon Nickerson picture Simon Nickerson · Sep 9, 2009 · Viewed 9.7k times · Source

If I have a numeric variable with a format, is there a way to get the formatted value as a character variable?

e.g. I would like to write something like the following to print 10/06/2009 to the screen but there is no putformatted() function.

data test;
  format i ddmmyy10.;
  i = "10JUN2009"d;
run;

data _null_;
  set test;
  i_formatted = putformatted(i); /* How should I write this? */
  put i_formatted;
run;

(Obviously I can write put(i, ddmmyy10.), but my code needs to work for whatever format i happens to have.)

Answer

secoskyj picture secoskyj · Jan 15, 2010

The VVALUE function formats the variable passed to it using the format associated with the variable. Here's the code using VVALUE:

data test;
  format i ddmmyy10.;
  i = "10JUN2009"d;
run;

data _null_;
  set test;
  i_formatted = vvalue(i);
  put i_formatted;
run;

While cmjohns solution is slightly faster than this code, this code is simpler because there are no macros involved.