BookmarkSubscribeRSS Feed
🔒 This topic is solved and locked. Need further help from the community? Please sign in and ask a new question.
NoorulIyn
Calcite | Level 5


 data birth; input name $ bday :mmddyy10.; datalines; Miguel 12/31/1973 Joe 02/28/1976 Rutger 03/29/1976 Broguen 03/01/1976 Susan 12/12/1976 Michael 02/14/1971 LeCe 11/09/1967 Hans 07/02/1955 Lou 07/30/1960 ; 


data ages;
  set birth;
  retain current;
  if _n_=1 then current=today();
  format bday current worddate20.;
  age=int(intck('month',bday,current)/12);
  if month(bday)=month(current) then age=age-(day(bday)>day(current));
run;

proc print;
run;

How is the if condition solved here?Can someone explain it?Thanks.

1 ACCEPTED SOLUTION

Accepted Solutions
Reeza
Super User

That is comparison that returns true/false or 1/0. So if day(bday)>day(current) is true it becomes 1 and the equation becomes:

age=age-1;

otherwise it becomes:

age=age-0;


You can test it via


Y=day(bday)>day(current);


There's some details and comparisons on these formula's here:

https://communities.sas.com/thread/39473


I think intck with age option also calculates age correctly as of SAS 9.3+


View solution in original post

4 REPLIES 4
Reeza
Super User

Which if condition?

The first states uses the automatic variable _n_, which essentially states if this is the first record in the dataset set the variable current to today.

NoorulIyn
Calcite | Level 5

Sorry for not being clear,the second if.(day(bday)>day(current)

Reeza
Super User

That is comparison that returns true/false or 1/0. So if day(bday)>day(current) is true it becomes 1 and the equation becomes:

age=age-1;

otherwise it becomes:

age=age-0;


You can test it via


Y=day(bday)>day(current);


There's some details and comparisons on these formula's here:

https://communities.sas.com/thread/39473


I think intck with age option also calculates age correctly as of SAS 9.3+


HarryLiu
Obsidian | Level 7

SAS evaluates the expression in an IF-THEN statement to produce a result that is either True or False (1 or 0). A result of zero causes the expression to be false, while a nonzero result causes the expression to be true.

Back to your question,

The MONTH function returns a numeric value that represents the month from a SAS date value. Numeric values can range from 1 (Jan.) through 12 (Dec.).

If month(bday)=month(current) means if the month of variable ‘bday’ is equal to current month.

hackathon24-white-horiz.png

The 2025 SAS Hackathon has begun!

It's finally time to hack! Remember to visit the SAS Hacker's Hub regularly for news and updates.

Latest Updates

What is Bayesian Analysis?

Learn the difference between classical and Bayesian statistical approaches and see a few PROC examples to perform Bayesian analysis in this video.

Find more tutorials on the SAS Users YouTube channel.

SAS Training: Just a Click Away

 Ready to level-up your skills? Choose your own adventure.

Browse our catalog!

Discussion stats
  • 4 replies
  • 1648 views
  • 0 likes
  • 3 in conversation