58%macro mp_getmaxvarlengths(
61 ,outds=work.mp_getmaxvarlengths
64%local vars prefix x var fmt srcds;
65%let vars=%mf_getvarlist(libds=&libds);
66%let prefix=%substr(%mf_getuniquename(),1,25);
67%let num2char=%upcase(&num2char);
69%
if &num2char=NO %then %
do;
71 %mcf_length(wrap=YES, insert_cmplib=YES)
75 and (
"%substr(&sysver,1,1)"=
"4" or
"%substr(&sysver,1,1)"=
"5")
76 and %mf_getvarcount(&libds,typefilter=N) gt 0
79 %let srcds=%mf_getuniquename();
80 data &srcds/view=&srcds;
82 %do x=1 %to %sysfunc(countw(&vars,%str( )));
83 %let var=%scan(&vars,&x);
84 %if %mf_getvartype(&libds,&var)=N %then %do;
85 &prefix.&x=mcf_length(&var);
90%else %let srcds=&libds;
93create table &outds (rename=(
94 %do x=1 %to %sysfunc(countw(&vars,%str( )));
95 &prefix.&x=%scan(&vars,&x)
99 %do x=1 %to %sysfunc(countw(&vars,%str( )));
100 %let var=%scan(&vars,&x);
102 %if %mf_getvartype(&libds,&var)=C %then %do;
103 max(lengthn(&var)) as &prefix.&x
105 %else %if &num2char=YES %then %do;
106 %let fmt=%mf_getvarformat(&libds,&var);
108 %if %str(&fmt)=%str() %then %do;
109 max(lengthn(cats(&var))) as &prefix.&x
112 max(lengthn(put(&var,&fmt))) as &prefix.&x
116 %if "%substr(&sysver,1,1)"="4" or "%substr(&sysver,1,1)"="5" %then %do;
117 max(&prefix.&x) as &prefix.&x
120 max(mcf_length(&var)) as &prefix.&x
126 proc transpose data=&outds
127 out=&outds(rename=(_name_=NAME COL1=MAXLEN));
130%mend mp_getmaxvarlengths;