27%macro mp_ds2fmtds(libds, outds
32%
if not %mf_existds(libds=&libds) %then %
do;
33 %put %str(WARN)ING: &libds does not exist as either a VIEW or DATASET;
36%
if %index(&libds,.)=0 %then %let libds=WORK.&libds;
39proc contents noprint data=&libds
40 out=_data_(keep=name type length format formatl formatd varnum);
48 set &syslast end=last;
51 if type=2 or type=6 then
do;
53 if format=
'' then fmt=cats(
'$',length,
'.');
54 else if formatl=0 then fmt=cats(format,
'.');
55 else fmt=cats(format,formatl,
'.');
56 newlen=max(formatl,length);
59 if format=
'' then fmt=
'best.';
60 else if formatl=0 then fmt=cats(format,
'.');
61 else if formatd=0 then fmt=cats(format,formatl,
'.');
62 else fmt=cats(format,formatl,
'.',formatd);
64 newlen=max(length,formatl,24);
67 newname=
'sasjs'!!substr(cats(put(md5(name),$hex32.)),1,27);
69 call symputx(cats(
'name',_n_),name,
'l');
70 call symputx(cats(
'newname',_n_),newname,
'l');
71 call symputx(cats(
'len',_n_),newlen,
'l');
72 call symputx(cats(
'fmt',_n_),fmt,
'l');
73 call symputx(cats(
'type',_n_),type,
'l');
74 if last then call symputx(
'nobs',_n_,
'l');
82 %put Dataset &libds has no columns!
98 length &&name&i $&&len&i;
99 &&name&i=left(put(&&newname&i,&&fmt&i));
102 if _error_ then call symputx(
'syscc',1012);