Help using Base SAS procedures

Last decimal truncated

Reply
Occasional Contributor
Posts: 9

Last decimal truncated

Dear all,

I am going crazy with this problem.

I want to generate a number starting from a date and a string like 2456701

I want to obtain a decimal number like xxxxxx,2456701 where xxxx is the difference between a date and a threshold

length threshold date_formatted site_factor 8.;

threshold = put(input('01JAN2000:00:00:00.000', DATETIME22.3),8.);
date_formatted = put(vardate, 8.) ;
site_factor = date_formatted - treshold;
                      
                       site = site_factor + pno*0.0000001;

the pno is 2456701 but I obtain a number like 234534.245670
Any help will be very appreciated. Smiley Surprised)
Thank you
L.
Super User
Posts: 7,781

Re: Last decimal truncated

You are running out of precision. SAS "only" has a mantissa of 52 bytes.

2**52 = 4503599627370496

---------------------------------------------------------------------------------------------
Maxims of Maximally Efficient SAS Programmers
Respected Advisor
Posts: 3,799

Re: Last decimal truncated

Your code that use PUT function and then takes different of the two character values makes no sense to me.

I don't think you can have the accuracy you seek with 8 byte floating point numeric for SITE.  You can make it character.

Perhaps using something like this, after you fix the calculation of SITE.

length site $20;  maybe

site = catx(',',site_factor,pno);

Super User
Super User
Posts: 7,042

Re: Last decimal truncated

Why are trying to subtract the two character variables you created with the PUT() function call?

Also there are about 480 million seconds between the beginning of the century and now.

Perhaps you can use minutes or days instead to get a smaller number?

Ask a Question
Discussion stats
  • 3 replies
  • 236 views
  • 0 likes
  • 4 in conversation