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.

sas-innovate-2024.png

Join us for SAS Innovate April 16-19 at the Aria in Las Vegas. Bring the team and save big with our group pricing for a limited time only.

Pre-conference courses and tutorials are filling up fast and are always a sellout. Register today to reserve your seat.

 

Register now!

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.

Click image to register for webinarClick image to register for webinar

Classroom Training Available!

Select SAS Training centers are offering in-person courses. View upcoming courses for:

View all other training opportunities.

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