DATA Step, Macro, Functions and more

Issue related to storing large numbers into macro variables

Accepted Solution Solved
Reply
Contributor
Posts: 35
Accepted Solution

Issue related to storing large numbers into macro variables

The values stored in the macro variables are not equal to the values retreived later in proc print.

How to correct this ?

 

data file1;

A=4642098790; output;

A=4642899777; output;

A=895511899777; output;

run;

 

PROC SQL NOPRINT;

SELECT DISTINCT A

INTO :junkvar1 - :junkvar3

FROM file1;

QUIT;

 

data junk;

A=&junkvar1;

B=&junkvar2;

C=&junkvar3;

run;

 

proc print; run;


Accepted Solutions
Solution
‎09-19-2016 02:30 PM
Contributor
Posts: 56

Re: Issue related to storing large numbers into macro variables

This is a loss of precision caused by numeric to string conversion formatting. If you use a put statement to view your macro variables created in the PROC SQL you will see.

%put &junkvar1 &junkvar2 &junkvar3;

4.6421E9 4.6429E9 8.955E11

You can change the format on the variable creation to save the full number string, i.e.

 


PROC SQL NOPRINT;
SELECT DISTINCT A format=32.
INTO :junkvar1 - :junkvar3
FROM file1;
QUIT;

View solution in original post


All Replies
Solution
‎09-19-2016 02:30 PM
Contributor
Posts: 56

Re: Issue related to storing large numbers into macro variables

This is a loss of precision caused by numeric to string conversion formatting. If you use a put statement to view your macro variables created in the PROC SQL you will see.

%put &junkvar1 &junkvar2 &junkvar3;

4.6421E9 4.6429E9 8.955E11

You can change the format on the variable creation to save the full number string, i.e.

 


PROC SQL NOPRINT;
SELECT DISTINCT A format=32.
INTO :junkvar1 - :junkvar3
FROM file1;
QUIT;
☑ This topic is solved.

Need further help from the community? Please ask a new question.

Discussion stats
  • 1 reply
  • 236 views
  • 0 likes
  • 2 in conversation