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;
Available on demand!
Missed SAS Innovate Las Vegas? Watch all the action for free! View the keynotes, general sessions and 22 breakouts on demand.
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.