Hi All,
I have a requirement where the input is coming from the Easytrieve in which the acceptable numeric format is 100.00-. I need to convert this into SAS numeric format. Can some one help me in achieving this?
Input Output
100.00- -100.00
This field is the variable one.
data x;
input x trailsgn32.;
cards;
100.00-
34.32-
29
64.89
;
run;
proc print;run;
You can define your own informat to read such numbers
/* Informat function to read numbers possibly suffixed with a
minus sign. */
proc fcmp outlib=work.fcmp.format;
function EasytrieveNumber(text $);
m = indexc(text, "-");
if m = length(text) then return (-input(substr(text,1,m-1), best.));
else return (input(text, best.));
endsub;
run;
options cmplib=(work.fcmp);
proc format;
invalue EasytrieveNumber(default=32)
OTHER = [EasytrieveNumber()];
run;
data have;
input a :EasytrieveNumber10.;
format a 8.2;
cards;
100.00-
100.00
;
proc print data=have; run;
Obs a 1 -100.00 2 100.00
data x;
input x trailsgn32.;
cards;
100.00-
34.32-
29
64.89
;
run;
proc print;run;
Hi Ksharp,
TRAILSGNw. will only work for numeric values. In this case the input is coming as 100.00- which in my knowledge will only be read as a character value.
Thanks!
Thank you @Ksharp @error_prone & @Reeza 🙂
@aadityapurohit3 wrote:
Yeah... But the question here is for converting the character data to a numeric format.
That's what @Ksharp solution does, you can use that format in the INPUT() statement.
data x;
input x $;
cards;
100.00-
34.32-
29
64.89
;
run;
data want;
set x;
char_x=input(x, trailsgn32.);
run;
proc print data=want;
run;
Are you ready for the spotlight? We're accepting content ideas for SAS Innovate 2025 to be held May 6-9 in Orlando, FL. The call is open until September 25. Read more here about why you should contribute and what is in it for you!
Learn how use the CAT functions in SAS to join values from multiple variables into a single value.
Find more tutorials on the SAS Users YouTube channel.