DATA Step, Macro, Functions and more

Base SAS

Reply
Contributor
Posts: 70

Base SAS

I would like to have the result of the following codes in year and days format.

 

years=9.1917808219 I want to see this as 9 year 191 days.

 

data dt;
a=today()-'01AUG2006'd;
b=a/365;
run;

 

Please help me.

Trusted Advisor
Posts: 1,913

Re: Base SAS

Posted in reply to KafeelBasha

I'm confused because 9.1917808219 is not 9 years 191 days.

 

It is 9 years and .1917808219 years (which is 70 days)

 

So please be more specific about what output you want.

Super User
Super User
Posts: 7,950

Re: Base SAS

Posted in reply to KafeelBasha

I understand PaigeMiller here, its not clear what you want.  From your given example you can reverse the formula you have given:

data dt;
  a=today()-'01AUG2006'd;
  b=a/365;
  c=b*365;
  d=c+"01AUG2006"d;
  format d date9.;
run;

So b contains your 9.191... I fyou then multiply that by 365 and add the original base date back on you should arrive at today.  However note that doing this whole a year is 365 days, rather than using proper interval functions is risky and might yield incorrect results.  Why do you need to do this, have they not supplied the original dates used in the calculation as they should have.

Respected Advisor
Posts: 4,920

Re: Base SAS

Posted in reply to KafeelBasha

That number (9.1917808219 I) must come from outside SAS as time intervals are not measured in years within SAS. Knowing where that time interval comes from would help finding a precise SAS equivalent.

PG
Trusted Advisor
Posts: 1,913

Re: Base SAS

[ Edited ]

If you execute the code shown in the original post, the number 9.1917808219 comes from the lines of code

 

a=today()-'01AUG2006'd;
b=a/365;

It's not clear to me what the user wants to do with this number, which (s)he misinterprets as 9 years 191 days

Respected Advisor
Posts: 4,920

Re: Base SAS

Posted in reply to KafeelBasha

Oh! I finally get it. You'll get exact numbers with SAS interval functions:

 

data dt;
years = intck("YEAR", '01AUG2006'd, today(), 'CONTINUOUS');
days = intck("DAY", intnx("YEAR", '01AUG2006'd, years, 'SAME'), today());
put (_ALL_) (=);
run;
PG
Ask a Question
Discussion stats
  • 5 replies
  • 219 views
  • 0 likes
  • 4 in conversation