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;