So, now I need values from APR2016 to JUN2016 (3 month values, code has to be automated to run to pick latest 3 months for current data) , so, 1st working day of June which is 01JUNE2016 and SAS could able to recognise and giving correct output, also for April 01APR2016 is weekday and its picking correctly. But for May2016, 1st is sunday and 2nd, Monday is a public holiday, so the date in database starts from 03May2016, SAS instead to take 03MAY2016, it is considering 29APR2016, which is Friday of previous month, Why it is checking in previous month?

Re: To find the 1st working day of a month

First of all , you need to know which date are Holidays , then Apply the following code:
data _null_;
x='01may2016'd;
first=intnx('weekday',x,0);
if weekday(first) in (1 6) then first=intnx('weekday',x,1);
/*
If first is holiday then do something here ........
*/
put x= date9. first= date9.;
x='01aug2016'd;
first=intnx('weekday',x,0);
if weekday(first) in (1 6) then first=intnx('weekday',x,1);
put x= date9. first= date9.;
run;

Re: To find the 1st working day of a month

Sorry. I made a mistake. The first code is not right . Try this one:
data _null_;
x='01aug2015'd;
first=intnx('weekday',x,0);
if month(first) ne month(x) then first=intnx('weekday',x,1);
/*
If first is holiday then do something here ........
*/
put x= date9. first= date9.;
x='01jul2016'd;
first=intnx('weekday',x,0);
if month(first) ne month(x) then first=intnx('weekday',x,1);
put x= date9. first= date9.;
run;

Re: To find the 1st working day of a month

If you only care about the first day of each month, That might be easy.
data _null_;
x='01aug2015'd;
first=intnx('weekday',x,0);
if month(first) ne month(x) then first=intnx('weekday',x,1);
if weekday(x) in (1 7) then first=first+1;
put x= date9. first= date9.;
x='01may2016'd;
first=intnx('weekday',x,0);
if month(first) ne month(x) then first=intnx('weekday',x,1);
if weekday(x) in (1 7) then first=first+1;
put x= date9. first= date9.;
run;