- Mark as New
- Bookmark
- Subscribe
- Mute
- RSS Feed
- Permalink
- Report Inappropriate Content
I'm reading in zoned decimal # with a decimal point, ZD, and converting to S370FZDS. When i PUTLOG the S370FZDS var, the decimal point is missing in the log. How do i get the decimal point to display?
Example I have an input # as: 0120{ I would like the output to be +01.200
DATA _NULL_;
INPUT X ZD5.3;
Y=PUT(X,S370FZDS7.3);
PUTLOG X= Y=;
DATALINES;
0025{
0025}
1234A
;
RUN;
output: X=0.25 Y=+000250 X=-0.25 Y=-000250 X=12.341 Y=+012341 The decimal point is missing from y variable
Accepted Solutions
- Mark as New
- Bookmark
- Subscribe
- Mute
- RSS Feed
- Permalink
- Report Inappropriate Content
Not sure if this what is needed but possibly a picture format can suffice:
Proc format library=work; picture sign low -<0 = '0000000009.000' (prefix='-') 0 = '0' (noedit) 0<- high= '0000000009.000' (prefix='+') ; run; data work.test; x = '1234A'; output; x = '5432M'; output; x = '0032M'; output; x = '00000'; output; run; data work.result; set work.test; y = input(x, zd5.3); format y sign.; run;
- Mark as New
- Bookmark
- Subscribe
- Mute
- RSS Feed
- Permalink
- Report Inappropriate Content
The format you have used to display Y isn't correct.
Use s370fzds7.3 as informat, that is equivalent to the informat ZD5.3 you have used, probably in MF.
In order to get right result use format 5.3 or comma5.3:
y = put(x, 5.3);
/*or*/ y = put(x, comma5.3);
/*or*/ put y 5.3; /* show in log */
- Mark as New
- Bookmark
- Subscribe
- Mute
- RSS Feed
- Permalink
- Report Inappropriate Content
i get the decimal point now based on using "Y=PUT(X,7.3);" But, the leading sign is gone from the positive #'s.
DATA _NULL_;
INPUT X ZD5.3;
Y=PUT(X,7.3);
PUTLOG X= Y=;
DATALINES;
0025{
0025}
1234A
;
RUN;
log:
X=0.25 Y=0.250
X=-0.25 Y=-0.250
X=12.341 Y=12.341
Example input: 1234A should be output as: +12.341
- Mark as New
- Bookmark
- Subscribe
- Mute
- RSS Feed
- Permalink
- Report Inappropriate Content
The default value is positive unless it is negative.
Why do you need the + sign ?
Anyway you can check the sign using function SIGN
s = sign(<numeric_variable>);
/* s=1 for positive, -1 for negative, 0 for zero */
- Mark as New
- Bookmark
- Subscribe
- Mute
- RSS Feed
- Permalink
- Report Inappropriate Content
ok, thx.
The recipient of the file would like to see both positive & negative signs in front of every number. They would like an explicit indication of
a number's sign.
The reason i had chosen, S370FZDS is because the documentation says, "Leading sign of – (hexadecimal 60) or + (hexadecimal 4E)". Is there something here i'm not understanding?
I had thought this would be the format to use to get leading signs in the output along with any required decimal point.
In my example, i was hoping that an input value of 1234A would be output as +12.341 by using format S370FZDS
- Mark as New
- Bookmark
- Subscribe
- Mute
- RSS Feed
- Permalink
- Report Inappropriate Content
What SAS platform are using?
I worked long time ago on MF. Now I'm using SAS University Edition with windows.
I cant find any format to force the + sign for positive values.
The only way I know is:
proc format lib=work;
value sgn
-1 = '-'
0 = ' '
1 = '+
; run;
data test;
x = 1234A; output;
x = 5432M; output;
x = 0; output;
run;
data result;
set test;
y = input(x, zd5.3);
s = sign(y);
if s=1 then want = cat(put(s,sgn.), put(y,7.3));
else want = put(y,7.3);
run;
- Mark as New
- Bookmark
- Subscribe
- Mute
- RSS Feed
- Permalink
- Report Inappropriate Content
Not sure if this what is needed but possibly a picture format can suffice:
Proc format library=work; picture sign low -<0 = '0000000009.000' (prefix='-') 0 = '0' (noedit) 0<- high= '0000000009.000' (prefix='+') ; run; data work.test; x = '1234A'; output; x = '5432M'; output; x = '0032M'; output; x = '00000'; output; run; data work.result; set work.test; y = input(x, zd5.3); format y sign.; run;