Hello,
is there a possibility to read data that has the trailing minus and a decimal seperator that is "," instead of "."?
For example:
100,008- should give -100.008 (="minus one-hundred-point-zero-zero-eight" and NOT "minus hundred-thousand-and-eight"; that´s why Trailsgn15.3 does not work)
Thanks & kind regards
(My best guess would be (if TS is the input variable), but I am not really happy with this:
Sign=Index(TS,'-')/Index(TS,'-');
If Sign eq 1 Then Number=(Input(Substr(TS,1,Length(TS)-1),Commax15.3))*-1;
Else Number=(Input(TS,Commax15.3));
)
Another option:
data have;
input val $char12.;
val = translate(val, '.', ',');
val1 = input(val, trailsgn12.);
datalines;
100,008-
;
Try this.
data have;
input val comma9.;
val1=divide(val,-1000);
datalines;
100,008-
;
Another option:
data have;
input val $char12.;
val = translate(val, '.', ',');
val1 = input(val, trailsgn12.);
datalines;
100,008-
;
Thanks.
I think TomKari is right, some text pre-processing (with "translate" or so) can´t be avoided. (Sorry, I didn´t mention that there are both values with and without a trailing minus). I will use: Number2=Input(Compress(Translate(Translate(TS,'','.'),'.',',')),TrailSgn15.);
(In this case ',' is the decimal and '.' the thousands seperator).
Data A;
Input TS $20.;
Sign=Index(TS,'-');
If Sign ge 1 Then Number=(Input(Substr(TS,1,Length(TS)-1),Commax15.3))*-1;
Else Number=(Input(TS,Commax15.3));
Format Number 15.4;
/* without Substr: */
Number2=Input(Compress(Translate(Translate(TS,'','.'),'.',',')),TrailSgn15.);
Format Number2 15.4;
Datalines;
100,008
100,008-
1555,458
1555,458-
2,04
2,04-
4.000,4
4.000,4-
112.000,4
112.000,4-
123.456.789,012
123.456.789,012-
;
Run;
Join us for SAS Innovate 2025, our biggest and most exciting global event of the year, in Orlando, FL, from May 6-9. Sign up by March 14 for just $795.
Need to connect to databases in SAS Viya? SAS’ David Ghan shows you two methods – via SAS/ACCESS LIBNAME and SAS Data Connector SASLIBS – in this video.
Find more tutorials on the SAS Users YouTube channel.