Normally you would just use the PUT() function as a one size fits all solution - it handles both character and numeric inputs seamlessly. PUTC() and PUTN() are really only necessary if you need to vary the format on the fly, which in my experience is extremely rare. However, you do need to use them in Macro statements eg %Let number_formatted = %Sysfunc(PUTN(&numeric_expression, Z9)) ; But that's for another day. A couple of things to remember with PUT() and INPUT(): PUT() always outputs a character expression. If the input value is numeric, you need a numeric format, and vice versa INPUTN() always requires a character expression input. If the required output is numeric, you need a numeric informat etc. If you "break" these rules SAS does type conversion either by trying to substitute a format of the correct type, or by doing a type conversion of the input for INPUT(). Richard in Oz
... View more