51%macro mcf_getfmttype(wrap=YES
56%local i var cmpval found;
58%
if %mcf_init(mcf_getfmttype)=1 %then %
return;
60%
if &wrap=YES %then %
do;
61 proc fcmp outlib=&lib..&cat..&pkg;
64function mcf_getfmttype(fmtnm $) $8;
65 if substr(fmtnm,1,1)=
'$' then
return(
'CHAR');
69 fmt=scan(fmtnm,1,
'.');
71 substr(fmt,length(fmt),1) in (
'1',
'2',
'3',
'4',
'5',
'6',
'7',
'8',
'9',
'0')
73 if length(fmt)=1 then fmt=
'W';
74 else fmt=substr(fmt,1,length(fmt)-1);
78 if cats(fmt) in (
'DATETIME',
'B8601DN',
'B8601DN',
'B8601DT',
'B8601DT'
79 ,
'B8601DZ',
'B8601DZ',
'DATEAMPM',
'DTDATE',
'DTMONYY',
'DTWKDATX',
'DTYEAR'
80 ,
'DTYYQC',
'E8601DN',
'E8601DN',
'E8601DT',
'E8601DT',
'E8601DZ',
'E8601DZ'
81 ,
'NLDATM') then return('DATETIME');
82 else if fmt in ('DATE','YYMMDD','B8601DA','B8601DA','DAY','DDMMYY'
83 ,'DDMMYYB','DDMMYYC','DDMMYYD','DDMMYYN','DDMMYYP','DDMMYYS','DDMMYYx'
84 ,'DOWNAME','E8601DA','E8601DA','JULDAY','JULIAN','MMDDYY','MMDDYYB'
85 ,'MMDDYYC','MMDDYYD','MMDDYYN','MMDDYYP','MMDDYYS','MMDDYYx','MMYY'
86 ,'MMYYC','MMYYD','MMYYN','MMYYP','MMYYS','MMYYx','MONNAME','MONTH'
87 ,'MONYY','PDJULG','PDJULI','QTR','QTRR','WEEKDATE','WEEKDATX','WEEKDAY'
88 ,'WEEKU','WEEKV','WEEKW','WORDDATE','WORDDATX','YEAR','YYMM','YYMMC'
89 ,'YYMMD','YYMMDDB','YYMMDDC','YYMMDDD','YYMMDDN','YYMMDDP','YYMMDDS'
90 ,'YYMMDDx','YYMMN','YYMMP','YYMMS','YYMMx','YYMON','YYQ','YYQC','YYQD'
91 ,'YYQN','YYQP','YYQR','YYQRC','YYQRD','YYQRN','YYQRP','YYQRS','YYQRx'
92 ,'YYQS','YYQx','YYQZ','NLDATE') then return('DATE');
93 else if fmt in ('TIME','B8601LZ','B8601LZ','B8601TM','B8601TM','B8601TZ'
94 ,'B8601TZ','E8601LZ','E8601LZ','E8601TM','E8601TM','E8601TZ','E8601TZ'
95 ,'HHMM','HOUR','MMSS','TIMEAMPM','TOD') then return('TIME');
100%if &wrap=YES %then %do;
105%let cmpval=%sysfunc(getoption(cmplib));
107%do i=1 %to %sysfunc(countw(&cmpval,%str( %(%))));
108 %let var=%scan(&cmpval,&i,%str( %(%)));
109 %if &var=&lib..&cat %then %let found=1;
111%if &found=0 %then %do;
112 options insert=(CMPLIB=(&lib..&cat));