The following code seems to have two different results with a 10.5 format when the two values in hexidecimal are identical. What am I missing?
DATA TEST;
HMWID = 62.7;
LIN_FT = 1;
RUN;
DATA AVAL (KEEP = K FT);
ARRAY LAR{240:799} _TEMPORARY_;
SET TEST END=END;
PUTLOG HMWID=10.5 +3 HMWID=HEX16.;
HMWID = HMWID * 10;
PUTLOG 'STORING VALUE ' HMWID=10.5 +3 HMWID=HEX16.;
LAR{HMWID} + LIN_FT;
IF END;
DO J = 240 TO (799-40);
K = J;
FT = LAR{J};
IF FT THEN DO;
OUTPUT AVAL;
PUTLOG 'RESTORING VALUE ' K=10.5 +3 HMWID=HEX16.;
END;
END;
RUN;
Output results...
HMWID=62.70000 HMWID=423EB33333333333
STORING VALUE HMWID=627.00000 HMWID=43272FFFFFFFFFFF
RESTORING VALUE K=626.00000 HMWID=43272FFFFFFFFFFF
Doesn't look like anything is wrong. Don't unerstand why you're showing for RESTORING K not being 627.
What's posted looks like an excerpt from a much larger program, perhaps the culprit is elsewhere and got edited out.
By the way, display format, like 10.5, have nothing to do with internal precision.
1 DATA TEST;
2 HMWID = 62.7;
3 LIN_FT = 1;
4 RUN;
NOTE: The data set WORK.TEST has 1 observations and 2 variables.
NOTE: DATA statement used (Total process time):
real time 0.01 seconds
cpu time 0.01 seconds
5
6 DATA AVAL (KEEP = K FT);
7 ARRAY LAR{240:799} _TEMPORARY_;
8 SET TEST END=END;
9 PUTLOG HMWID=10.5 +3 HMWID=HEX16.;
10
11 HMWID = HMWID * 10;
12 PUTLOG 'STORING VALUE ' HMWID=10.5 +3 HMWID=HEX16.;
13 LAR{HMWID} + LIN_FT;
14
15 IF END;
16
17 DO J = 240 TO (799-40);
18 K = J;
19 FT = LAR{J};
20 IF FT THEN DO;
21 OUTPUT AVAL;
22 PUTLOG 'RESTORING VALUE ' K=10.5 +3 HMWID=HEX16.;
23 END;
24 END;
25 RUN;
HMWID=62.70000 HMWID=404F59999999999A
STORING VALUE HMWID=627.00000 HMWID=4083980000000000
RESTORING VALUE K=627.00000 HMWID=4083980000000000
NOTE: There were 1 observations read from the data set WORK.TEST.
NOTE: The data set WORK.AVAL has 1 observations and 2 variables.
NOTE: DATA statement used (Total process time):
real time 0.03 seconds
cpu time 0.01 seconds
SAS Innovate 2025 is scheduled for May 6-9 in Orlando, FL. Sign up to be first to learn about the agenda and registration!
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.
Ready to level-up your skills? Choose your own adventure.