02-24-2018 12:14 AM - last edited on 02-24-2018 01:46 PM by ChrisHemedinger
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?
This field is the variable one.
02-24-2018 12:49 AM
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
02-24-2018 02:52 AM
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.
02-24-2018 12:32 PM
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;
Need further help from the community? Please ask a new question.