I reckon it is possible.
2 ways you could still use the formatted value like you want without reading the dataset before hand:
1) bulldozer
=========
proc format ; 
  value $myformat 
   "AD" - "AD" 'ff'x='daily'    /* as many entries as possible prefixes */
   "BD" - "BD" 'ff'x='daily'
   "CD" - "CD" 'ff'x='daily'
   "DD" - "DD" 'ff'x='daily'
   ....
   "AM" - "AM" 'ff'x='monthly'
   "BM" - "BM" 'ff'x='monthly'
   ...
;
2) view
========
proc format ; 
  value $myformat 
   "D" - "D" 'ff'x='daily'
   "M" - "M" 'ff'x='monthly'
;
data MYDATA_V/view=MYDATA_V;
  set MYDATA;
  MYVAR2=substr(MYVAR,2);
  format MYVAR2 $x.;
proc print data=MYDATA_V(drop=MYVAR); 
run;