BookmarkSubscribeRSS Feed
🔒 This topic is solved and locked. Need further help from the community? Please sign in and ask a new question.
SASInd
Obsidian | Level 7

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.

1 ACCEPTED SOLUTION

Accepted Solutions
Ksharp
Super User
data x;
input x trailsgn32.;
cards;
100.00-   
34.32-
29
64.89
;
run;
proc print;run;

View solution in original post

7 REPLIES 7
PGStats
Opal | Level 21

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
PG
Ksharp
Super User
data x;
input x trailsgn32.;
cards;
100.00-   
34.32-
29
64.89
;
run;
proc print;run;
SASInd
Obsidian | Level 7

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!

error_prone
Barite | Level 11

@SASInd: @Ksharp demonstrates that the format can be used to create normal numbers.

SASInd
Obsidian | Level 7

Thank you @Ksharp @error_prone & @Reeza 🙂

SASInd
Obsidian | Level 7
Yeah... But the question here is for converting the character data to a numeric format.
Reeza
Super User

@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;

hackathon24-white-horiz.png

2025 SAS Hackathon: There is still time!

Good news: We've extended SAS Hackathon registration until Sept. 12, so you still have time to be part of our biggest event yet – our five-year anniversary!

Register Now

How to Concatenate Values

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.

SAS Training: Just a Click Away

 Ready to level-up your skills? Choose your own adventure.

Browse our catalog!

Discussion stats
  • 7 replies
  • 2526 views
  • 10 likes
  • 5 in conversation