Here is a code to convert your sample into sas dates.
 
data test;
   infile datalines truncover;
   input datex $12.; /* anydate10.; */
   datex = lowcase(datex);
             /* define your preferenced order of trial */
  if input(datex,?? date9.) > 0 
     then date = input(datex,date9.); else
  if input(datex,?? date7.) > 0 
     then date = input(datex,date9.); else
 if input(datex,?? ddmmyy10.) > 0 
    then date = input(datex,ddmmyy10.); else
 if input(datex,?? yymmdd10.) > 0 
    then date = input(datex,yymmdd10.); 
else do;
   datex = translate(datex,' ','unk');
   do i=1 to 3;
       num = scan(datex,i,'-/');
       if (0 < num le 12) then mm=num; else
       if (0 < num le 31) then dd=num; else
      if num le 99 or num > 1900 then yy=num; /* year 2 or 4 digits */
   end;
   if yy =. then yy = input(datex, ?? best11.);
   if dd le 0 then dd=01;
   if mm le 0 then mm=01;
   date = mdy(mm,dd,yy);
end;
format date ddmmyy10.;
datalines;
13apr1999
120499
2016-11-19
11-18-2016
2016
un-18-2018
un-unk-2016
;run;
 
 
BUT, as I posted earlier:
how would you interpret input like: 09-05-2015
is it a ddmmyy10. informat or mmddyy10. informat ?
 
and what about: 120499 - is it 12apr1999 or 12apr2099 or 04dec1999 etc?
 
You cannot have a unique result unless you have some more restrictions.