mirror of
https://github.com/sasjs/core.git
synced 2026-01-05 00:20:05 +00:00
Compare commits
6 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
b75369b28d | ||
|
|
63871db170 | ||
|
|
6456c2f6e2 | ||
|
|
36faa194a8 | ||
|
|
093dc87aad | ||
|
|
ca045e3ebf |
75
all.sas
75
all.sas
@@ -5867,15 +5867,26 @@ options varlenchk=&optval;
|
|||||||
|
|
||||||
Example usage:
|
Example usage:
|
||||||
|
|
||||||
%mp_dsmeta(work.sashelp,outds=work.mymeta)
|
%mp_dsmeta(sashelp.class,outds=work.mymeta)
|
||||||
proc print data=work.mymeta;
|
proc print data=work.mymeta;
|
||||||
run;
|
run;
|
||||||
|
|
||||||
|
For more details on creating datasets from PROC CONTENTS check out this
|
||||||
|
excellent [paper](
|
||||||
|
https://support.sas.com/resources/papers/proceedings14/1549-2014.pdf) by
|
||||||
|
[Louise Hadden](https://www.linkedin.com/in/louisehadden/).
|
||||||
|
|
||||||
@param libds The library.dataset to export the metadata for
|
@param libds The library.dataset to export the metadata for
|
||||||
@param outds= (work.dsmeta) The output table to contain the metadata
|
@param outds= (work.dsmeta) The output table to contain the metadata
|
||||||
|
|
||||||
<h4> Related Files </h4>
|
<h4> Related Files </h4>
|
||||||
@li mp_dsmeta.test.sas
|
@li mp_dsmeta.test.sas
|
||||||
|
@li mp_getcols.sas
|
||||||
|
@li mp_getdbml.sas
|
||||||
|
@li mp_getddl.sas
|
||||||
|
@li mp_getformats.sas
|
||||||
|
@li mp_getpk.sas
|
||||||
|
@li mp_guesspk.sas
|
||||||
|
|
||||||
**/
|
**/
|
||||||
|
|
||||||
@@ -8892,7 +8903,7 @@ options
|
|||||||
call symputx(cats('label',_n_),coalescec(label,name),'l');
|
call symputx(cats('label',_n_),coalescec(label,name),'l');
|
||||||
/* overwritten when fmt=Y and a custom format exists in catalog */
|
/* overwritten when fmt=Y and a custom format exists in catalog */
|
||||||
if typelong='num' then call symputx(cats('fmtlen',_n_),200,'l');
|
if typelong='num' then call symputx(cats('fmtlen',_n_),200,'l');
|
||||||
else call symputx(cats('fmtlen',_n_),min(32767,ceil((length+3)*1.5)),'l');
|
else call symputx(cats('fmtlen',_n_),min(32767,ceil((length+10)*1.5)),'l');
|
||||||
run;
|
run;
|
||||||
|
|
||||||
%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);
|
%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);
|
||||||
@@ -8948,8 +8959,8 @@ options
|
|||||||
%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);
|
%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);
|
||||||
proc sql noprint;
|
proc sql noprint;
|
||||||
create table &tmpds1 as
|
create table &tmpds1 as
|
||||||
select cats(libname,'.',memname) as fmtcat,
|
select cats(libname,'.',memname) as FMTCAT,
|
||||||
fmtname
|
FMTNAME
|
||||||
from dictionary.formats
|
from dictionary.formats
|
||||||
where fmttype='F' and libname is not null
|
where fmttype='F' and libname is not null
|
||||||
and fmtname in (select format from &colinfo where format is not null)
|
and fmtname in (select format from &colinfo where format is not null)
|
||||||
@@ -8974,7 +8985,7 @@ options
|
|||||||
|
|
||||||
proc sql;
|
proc sql;
|
||||||
create table &tmpds4 as
|
create table &tmpds4 as
|
||||||
select a.*, b.length as maxw
|
select a.*, b.length as MAXW
|
||||||
from &colinfo a
|
from &colinfo a
|
||||||
left join &tmpds2 b
|
left join &tmpds2 b
|
||||||
on cats(a.format)=cats(upcase(b.fmtname))
|
on cats(a.format)=cats(upcase(b.fmtname))
|
||||||
@@ -8985,7 +8996,7 @@ options
|
|||||||
call symputx(
|
call symputx(
|
||||||
cats('fmtlen',_n_),
|
cats('fmtlen',_n_),
|
||||||
/* vars need extra padding due to JSON escaping of special chars */
|
/* vars need extra padding due to JSON escaping of special chars */
|
||||||
min(32767,ceil((max(length,maxw)+3)*1.5))
|
min(32767,ceil((max(length,maxw)+10)*1.5))
|
||||||
,'l'
|
,'l'
|
||||||
);
|
);
|
||||||
run;
|
run;
|
||||||
@@ -9060,7 +9071,7 @@ options
|
|||||||
format _numeric_ bart.;
|
format _numeric_ bart.;
|
||||||
%do i=1 %to &numcols;
|
%do i=1 %to &numcols;
|
||||||
%if &&typelong&i=char or &fmt=Y %then %do;
|
%if &&typelong&i=char or &fmt=Y %then %do;
|
||||||
if findc(&&name&i,'"\'!!'0A0D09000E0F01021011'x) then do;
|
if findc(&&name&i,'"\'!!'0A0D09000E0F010210111A'x) then do;
|
||||||
&&name&i='"'!!trim(
|
&&name&i='"'!!trim(
|
||||||
prxchange('s/"/\\"/',-1, /* double quote */
|
prxchange('s/"/\\"/',-1, /* double quote */
|
||||||
prxchange('s/\x0A/\n/',-1, /* new line */
|
prxchange('s/\x0A/\n/',-1, /* new line */
|
||||||
@@ -9073,8 +9084,9 @@ options
|
|||||||
prxchange('s/\x02/\\u0002/',-1, /* STX */
|
prxchange('s/\x02/\\u0002/',-1, /* STX */
|
||||||
prxchange('s/\x10/\\u0010/',-1, /* DLE */
|
prxchange('s/\x10/\\u0010/',-1, /* DLE */
|
||||||
prxchange('s/\x11/\\u0011/',-1, /* DC1 */
|
prxchange('s/\x11/\\u0011/',-1, /* DC1 */
|
||||||
|
prxchange('s/\x1A/\\u001A/',-1, /* SUB */
|
||||||
prxchange('s/\\/\\\\/',-1,&&name&i)
|
prxchange('s/\\/\\\\/',-1,&&name&i)
|
||||||
))))))))))))!!'"';
|
)))))))))))))!!'"';
|
||||||
end;
|
end;
|
||||||
else &&name&i=quote(cats(&&name&i));
|
else &&name&i=quote(cats(&&name&i));
|
||||||
%end;
|
%end;
|
||||||
@@ -15387,7 +15399,7 @@ data _null_;
|
|||||||
put ' call symputx(cats(''label'',_n_),coalescec(label,name),''l''); ';
|
put ' call symputx(cats(''label'',_n_),coalescec(label,name),''l''); ';
|
||||||
put ' /* overwritten when fmt=Y and a custom format exists in catalog */ ';
|
put ' /* overwritten when fmt=Y and a custom format exists in catalog */ ';
|
||||||
put ' if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l''); ';
|
put ' if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l''); ';
|
||||||
put ' else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+3)*1.5)),''l''); ';
|
put ' else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l''); ';
|
||||||
put ' run; ';
|
put ' run; ';
|
||||||
put ' ';
|
put ' ';
|
||||||
put ' %let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32); ';
|
put ' %let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32); ';
|
||||||
@@ -15443,8 +15455,8 @@ data _null_;
|
|||||||
put ' %let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32); ';
|
put ' %let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32); ';
|
||||||
put ' proc sql noprint; ';
|
put ' proc sql noprint; ';
|
||||||
put ' create table &tmpds1 as ';
|
put ' create table &tmpds1 as ';
|
||||||
put ' select cats(libname,''.'',memname) as fmtcat, ';
|
put ' select cats(libname,''.'',memname) as FMTCAT, ';
|
||||||
put ' fmtname ';
|
put ' FMTNAME ';
|
||||||
put ' from dictionary.formats ';
|
put ' from dictionary.formats ';
|
||||||
put ' where fmttype=''F'' and libname is not null ';
|
put ' where fmttype=''F'' and libname is not null ';
|
||||||
put ' and fmtname in (select format from &colinfo where format is not null) ';
|
put ' and fmtname in (select format from &colinfo where format is not null) ';
|
||||||
@@ -15469,7 +15481,7 @@ data _null_;
|
|||||||
put ' ';
|
put ' ';
|
||||||
put ' proc sql; ';
|
put ' proc sql; ';
|
||||||
put ' create table &tmpds4 as ';
|
put ' create table &tmpds4 as ';
|
||||||
put ' select a.*, b.length as maxw ';
|
put ' select a.*, b.length as MAXW ';
|
||||||
put ' from &colinfo a ';
|
put ' from &colinfo a ';
|
||||||
put ' left join &tmpds2 b ';
|
put ' left join &tmpds2 b ';
|
||||||
put ' on cats(a.format)=cats(upcase(b.fmtname)) ';
|
put ' on cats(a.format)=cats(upcase(b.fmtname)) ';
|
||||||
@@ -15480,7 +15492,7 @@ data _null_;
|
|||||||
put ' call symputx( ';
|
put ' call symputx( ';
|
||||||
put ' cats(''fmtlen'',_n_), ';
|
put ' cats(''fmtlen'',_n_), ';
|
||||||
put ' /* vars need extra padding due to JSON escaping of special chars */ ';
|
put ' /* vars need extra padding due to JSON escaping of special chars */ ';
|
||||||
put ' min(32767,ceil((max(length,maxw)+3)*1.5)) ';
|
put ' min(32767,ceil((max(length,maxw)+10)*1.5)) ';
|
||||||
put ' ,''l'' ';
|
put ' ,''l'' ';
|
||||||
put ' ); ';
|
put ' ); ';
|
||||||
put ' run; ';
|
put ' run; ';
|
||||||
@@ -15555,7 +15567,7 @@ data _null_;
|
|||||||
put ' format _numeric_ bart.; ';
|
put ' format _numeric_ bart.; ';
|
||||||
put ' %do i=1 %to &numcols; ';
|
put ' %do i=1 %to &numcols; ';
|
||||||
put ' %if &&typelong&i=char or &fmt=Y %then %do; ';
|
put ' %if &&typelong&i=char or &fmt=Y %then %do; ';
|
||||||
put ' if findc(&&name&i,''"\''!!''0A0D09000E0F01021011''x) then do; ';
|
put ' if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do; ';
|
||||||
put ' &&name&i=''"''!!trim( ';
|
put ' &&name&i=''"''!!trim( ';
|
||||||
put ' prxchange(''s/"/\\"/'',-1, /* double quote */ ';
|
put ' prxchange(''s/"/\\"/'',-1, /* double quote */ ';
|
||||||
put ' prxchange(''s/\x0A/\n/'',-1, /* new line */ ';
|
put ' prxchange(''s/\x0A/\n/'',-1, /* new line */ ';
|
||||||
@@ -15568,8 +15580,9 @@ data _null_;
|
|||||||
put ' prxchange(''s/\x02/\\u0002/'',-1, /* STX */ ';
|
put ' prxchange(''s/\x02/\\u0002/'',-1, /* STX */ ';
|
||||||
put ' prxchange(''s/\x10/\\u0010/'',-1, /* DLE */ ';
|
put ' prxchange(''s/\x10/\\u0010/'',-1, /* DLE */ ';
|
||||||
put ' prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */ ';
|
put ' prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */ ';
|
||||||
|
put ' prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */ ';
|
||||||
put ' prxchange(''s/\\/\\\\/'',-1,&&name&i) ';
|
put ' prxchange(''s/\\/\\\\/'',-1,&&name&i) ';
|
||||||
put ' ))))))))))))!!''"''; ';
|
put ' )))))))))))))!!''"''; ';
|
||||||
put ' end; ';
|
put ' end; ';
|
||||||
put ' else &&name&i=quote(cats(&&name&i)); ';
|
put ' else &&name&i=quote(cats(&&name&i)); ';
|
||||||
put ' %end; ';
|
put ' %end; ';
|
||||||
@@ -17818,7 +17831,7 @@ data &outds;
|
|||||||
rc5=metadata_getattr(tsuri,"Name",servercontext);
|
rc5=metadata_getattr(tsuri,"Name",servercontext);
|
||||||
end;
|
end;
|
||||||
else do;
|
else do;
|
||||||
put "%str(ERR)OR: could not find " pgm;
|
put "%str(ERR)OR: could not find " path;
|
||||||
put (_all_)(=);
|
put (_all_)(=);
|
||||||
end;
|
end;
|
||||||
&md.put (_all_)(=);
|
&md.put (_all_)(=);
|
||||||
@@ -20408,7 +20421,7 @@ data _null_;
|
|||||||
put ' call symputx(cats(''label'',_n_),coalescec(label,name),''l''); ';
|
put ' call symputx(cats(''label'',_n_),coalescec(label,name),''l''); ';
|
||||||
put ' /* overwritten when fmt=Y and a custom format exists in catalog */ ';
|
put ' /* overwritten when fmt=Y and a custom format exists in catalog */ ';
|
||||||
put ' if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l''); ';
|
put ' if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l''); ';
|
||||||
put ' else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+3)*1.5)),''l''); ';
|
put ' else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l''); ';
|
||||||
put ' run; ';
|
put ' run; ';
|
||||||
put ' ';
|
put ' ';
|
||||||
put ' %let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32); ';
|
put ' %let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32); ';
|
||||||
@@ -20464,8 +20477,8 @@ data _null_;
|
|||||||
put ' %let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32); ';
|
put ' %let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32); ';
|
||||||
put ' proc sql noprint; ';
|
put ' proc sql noprint; ';
|
||||||
put ' create table &tmpds1 as ';
|
put ' create table &tmpds1 as ';
|
||||||
put ' select cats(libname,''.'',memname) as fmtcat, ';
|
put ' select cats(libname,''.'',memname) as FMTCAT, ';
|
||||||
put ' fmtname ';
|
put ' FMTNAME ';
|
||||||
put ' from dictionary.formats ';
|
put ' from dictionary.formats ';
|
||||||
put ' where fmttype=''F'' and libname is not null ';
|
put ' where fmttype=''F'' and libname is not null ';
|
||||||
put ' and fmtname in (select format from &colinfo where format is not null) ';
|
put ' and fmtname in (select format from &colinfo where format is not null) ';
|
||||||
@@ -20490,7 +20503,7 @@ data _null_;
|
|||||||
put ' ';
|
put ' ';
|
||||||
put ' proc sql; ';
|
put ' proc sql; ';
|
||||||
put ' create table &tmpds4 as ';
|
put ' create table &tmpds4 as ';
|
||||||
put ' select a.*, b.length as maxw ';
|
put ' select a.*, b.length as MAXW ';
|
||||||
put ' from &colinfo a ';
|
put ' from &colinfo a ';
|
||||||
put ' left join &tmpds2 b ';
|
put ' left join &tmpds2 b ';
|
||||||
put ' on cats(a.format)=cats(upcase(b.fmtname)) ';
|
put ' on cats(a.format)=cats(upcase(b.fmtname)) ';
|
||||||
@@ -20501,7 +20514,7 @@ data _null_;
|
|||||||
put ' call symputx( ';
|
put ' call symputx( ';
|
||||||
put ' cats(''fmtlen'',_n_), ';
|
put ' cats(''fmtlen'',_n_), ';
|
||||||
put ' /* vars need extra padding due to JSON escaping of special chars */ ';
|
put ' /* vars need extra padding due to JSON escaping of special chars */ ';
|
||||||
put ' min(32767,ceil((max(length,maxw)+3)*1.5)) ';
|
put ' min(32767,ceil((max(length,maxw)+10)*1.5)) ';
|
||||||
put ' ,''l'' ';
|
put ' ,''l'' ';
|
||||||
put ' ); ';
|
put ' ); ';
|
||||||
put ' run; ';
|
put ' run; ';
|
||||||
@@ -20576,7 +20589,7 @@ data _null_;
|
|||||||
put ' format _numeric_ bart.; ';
|
put ' format _numeric_ bart.; ';
|
||||||
put ' %do i=1 %to &numcols; ';
|
put ' %do i=1 %to &numcols; ';
|
||||||
put ' %if &&typelong&i=char or &fmt=Y %then %do; ';
|
put ' %if &&typelong&i=char or &fmt=Y %then %do; ';
|
||||||
put ' if findc(&&name&i,''"\''!!''0A0D09000E0F01021011''x) then do; ';
|
put ' if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do; ';
|
||||||
put ' &&name&i=''"''!!trim( ';
|
put ' &&name&i=''"''!!trim( ';
|
||||||
put ' prxchange(''s/"/\\"/'',-1, /* double quote */ ';
|
put ' prxchange(''s/"/\\"/'',-1, /* double quote */ ';
|
||||||
put ' prxchange(''s/\x0A/\n/'',-1, /* new line */ ';
|
put ' prxchange(''s/\x0A/\n/'',-1, /* new line */ ';
|
||||||
@@ -20589,8 +20602,9 @@ data _null_;
|
|||||||
put ' prxchange(''s/\x02/\\u0002/'',-1, /* STX */ ';
|
put ' prxchange(''s/\x02/\\u0002/'',-1, /* STX */ ';
|
||||||
put ' prxchange(''s/\x10/\\u0010/'',-1, /* DLE */ ';
|
put ' prxchange(''s/\x10/\\u0010/'',-1, /* DLE */ ';
|
||||||
put ' prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */ ';
|
put ' prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */ ';
|
||||||
|
put ' prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */ ';
|
||||||
put ' prxchange(''s/\\/\\\\/'',-1,&&name&i) ';
|
put ' prxchange(''s/\\/\\\\/'',-1,&&name&i) ';
|
||||||
put ' ))))))))))))!!''"''; ';
|
put ' )))))))))))))!!''"''; ';
|
||||||
put ' end; ';
|
put ' end; ';
|
||||||
put ' else &&name&i=quote(cats(&&name&i)); ';
|
put ' else &&name&i=quote(cats(&&name&i)); ';
|
||||||
put ' %end; ';
|
put ' %end; ';
|
||||||
@@ -22871,7 +22885,7 @@ data _null_;
|
|||||||
put ' call symputx(cats(''label'',_n_),coalescec(label,name),''l''); ';
|
put ' call symputx(cats(''label'',_n_),coalescec(label,name),''l''); ';
|
||||||
put ' /* overwritten when fmt=Y and a custom format exists in catalog */ ';
|
put ' /* overwritten when fmt=Y and a custom format exists in catalog */ ';
|
||||||
put ' if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l''); ';
|
put ' if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l''); ';
|
||||||
put ' else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+3)*1.5)),''l''); ';
|
put ' else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l''); ';
|
||||||
put ' run; ';
|
put ' run; ';
|
||||||
put ' ';
|
put ' ';
|
||||||
put ' %let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32); ';
|
put ' %let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32); ';
|
||||||
@@ -22927,8 +22941,8 @@ data _null_;
|
|||||||
put ' %let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32); ';
|
put ' %let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32); ';
|
||||||
put ' proc sql noprint; ';
|
put ' proc sql noprint; ';
|
||||||
put ' create table &tmpds1 as ';
|
put ' create table &tmpds1 as ';
|
||||||
put ' select cats(libname,''.'',memname) as fmtcat, ';
|
put ' select cats(libname,''.'',memname) as FMTCAT, ';
|
||||||
put ' fmtname ';
|
put ' FMTNAME ';
|
||||||
put ' from dictionary.formats ';
|
put ' from dictionary.formats ';
|
||||||
put ' where fmttype=''F'' and libname is not null ';
|
put ' where fmttype=''F'' and libname is not null ';
|
||||||
put ' and fmtname in (select format from &colinfo where format is not null) ';
|
put ' and fmtname in (select format from &colinfo where format is not null) ';
|
||||||
@@ -22953,7 +22967,7 @@ data _null_;
|
|||||||
put ' ';
|
put ' ';
|
||||||
put ' proc sql; ';
|
put ' proc sql; ';
|
||||||
put ' create table &tmpds4 as ';
|
put ' create table &tmpds4 as ';
|
||||||
put ' select a.*, b.length as maxw ';
|
put ' select a.*, b.length as MAXW ';
|
||||||
put ' from &colinfo a ';
|
put ' from &colinfo a ';
|
||||||
put ' left join &tmpds2 b ';
|
put ' left join &tmpds2 b ';
|
||||||
put ' on cats(a.format)=cats(upcase(b.fmtname)) ';
|
put ' on cats(a.format)=cats(upcase(b.fmtname)) ';
|
||||||
@@ -22964,7 +22978,7 @@ data _null_;
|
|||||||
put ' call symputx( ';
|
put ' call symputx( ';
|
||||||
put ' cats(''fmtlen'',_n_), ';
|
put ' cats(''fmtlen'',_n_), ';
|
||||||
put ' /* vars need extra padding due to JSON escaping of special chars */ ';
|
put ' /* vars need extra padding due to JSON escaping of special chars */ ';
|
||||||
put ' min(32767,ceil((max(length,maxw)+3)*1.5)) ';
|
put ' min(32767,ceil((max(length,maxw)+10)*1.5)) ';
|
||||||
put ' ,''l'' ';
|
put ' ,''l'' ';
|
||||||
put ' ); ';
|
put ' ); ';
|
||||||
put ' run; ';
|
put ' run; ';
|
||||||
@@ -23039,7 +23053,7 @@ data _null_;
|
|||||||
put ' format _numeric_ bart.; ';
|
put ' format _numeric_ bart.; ';
|
||||||
put ' %do i=1 %to &numcols; ';
|
put ' %do i=1 %to &numcols; ';
|
||||||
put ' %if &&typelong&i=char or &fmt=Y %then %do; ';
|
put ' %if &&typelong&i=char or &fmt=Y %then %do; ';
|
||||||
put ' if findc(&&name&i,''"\''!!''0A0D09000E0F01021011''x) then do; ';
|
put ' if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do; ';
|
||||||
put ' &&name&i=''"''!!trim( ';
|
put ' &&name&i=''"''!!trim( ';
|
||||||
put ' prxchange(''s/"/\\"/'',-1, /* double quote */ ';
|
put ' prxchange(''s/"/\\"/'',-1, /* double quote */ ';
|
||||||
put ' prxchange(''s/\x0A/\n/'',-1, /* new line */ ';
|
put ' prxchange(''s/\x0A/\n/'',-1, /* new line */ ';
|
||||||
@@ -23052,8 +23066,9 @@ data _null_;
|
|||||||
put ' prxchange(''s/\x02/\\u0002/'',-1, /* STX */ ';
|
put ' prxchange(''s/\x02/\\u0002/'',-1, /* STX */ ';
|
||||||
put ' prxchange(''s/\x10/\\u0010/'',-1, /* DLE */ ';
|
put ' prxchange(''s/\x10/\\u0010/'',-1, /* DLE */ ';
|
||||||
put ' prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */ ';
|
put ' prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */ ';
|
||||||
|
put ' prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */ ';
|
||||||
put ' prxchange(''s/\\/\\\\/'',-1,&&name&i) ';
|
put ' prxchange(''s/\\/\\\\/'',-1,&&name&i) ';
|
||||||
put ' ))))))))))))!!''"''; ';
|
put ' )))))))))))))!!''"''; ';
|
||||||
put ' end; ';
|
put ' end; ';
|
||||||
put ' else &&name&i=quote(cats(&&name&i)); ';
|
put ' else &&name&i=quote(cats(&&name&i)); ';
|
||||||
put ' %end; ';
|
put ' %end; ';
|
||||||
|
|||||||
@@ -40,15 +40,26 @@
|
|||||||
|
|
||||||
Example usage:
|
Example usage:
|
||||||
|
|
||||||
%mp_dsmeta(work.sashelp,outds=work.mymeta)
|
%mp_dsmeta(sashelp.class,outds=work.mymeta)
|
||||||
proc print data=work.mymeta;
|
proc print data=work.mymeta;
|
||||||
run;
|
run;
|
||||||
|
|
||||||
|
For more details on creating datasets from PROC CONTENTS check out this
|
||||||
|
excellent [paper](
|
||||||
|
https://support.sas.com/resources/papers/proceedings14/1549-2014.pdf) by
|
||||||
|
[Louise Hadden](https://www.linkedin.com/in/louisehadden/).
|
||||||
|
|
||||||
@param libds The library.dataset to export the metadata for
|
@param libds The library.dataset to export the metadata for
|
||||||
@param outds= (work.dsmeta) The output table to contain the metadata
|
@param outds= (work.dsmeta) The output table to contain the metadata
|
||||||
|
|
||||||
<h4> Related Files </h4>
|
<h4> Related Files </h4>
|
||||||
@li mp_dsmeta.test.sas
|
@li mp_dsmeta.test.sas
|
||||||
|
@li mp_getcols.sas
|
||||||
|
@li mp_getdbml.sas
|
||||||
|
@li mp_getddl.sas
|
||||||
|
@li mp_getformats.sas
|
||||||
|
@li mp_getpk.sas
|
||||||
|
@li mp_guesspk.sas
|
||||||
|
|
||||||
**/
|
**/
|
||||||
|
|
||||||
|
|||||||
@@ -146,7 +146,7 @@
|
|||||||
call symputx(cats('label',_n_),coalescec(label,name),'l');
|
call symputx(cats('label',_n_),coalescec(label,name),'l');
|
||||||
/* overwritten when fmt=Y and a custom format exists in catalog */
|
/* overwritten when fmt=Y and a custom format exists in catalog */
|
||||||
if typelong='num' then call symputx(cats('fmtlen',_n_),200,'l');
|
if typelong='num' then call symputx(cats('fmtlen',_n_),200,'l');
|
||||||
else call symputx(cats('fmtlen',_n_),min(32767,ceil((length+3)*1.5)),'l');
|
else call symputx(cats('fmtlen',_n_),min(32767,ceil((length+10)*1.5)),'l');
|
||||||
run;
|
run;
|
||||||
|
|
||||||
%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);
|
%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);
|
||||||
@@ -202,8 +202,8 @@
|
|||||||
%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);
|
%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);
|
||||||
proc sql noprint;
|
proc sql noprint;
|
||||||
create table &tmpds1 as
|
create table &tmpds1 as
|
||||||
select cats(libname,'.',memname) as fmtcat,
|
select cats(libname,'.',memname) as FMTCAT,
|
||||||
fmtname
|
FMTNAME
|
||||||
from dictionary.formats
|
from dictionary.formats
|
||||||
where fmttype='F' and libname is not null
|
where fmttype='F' and libname is not null
|
||||||
and fmtname in (select format from &colinfo where format is not null)
|
and fmtname in (select format from &colinfo where format is not null)
|
||||||
@@ -228,7 +228,7 @@
|
|||||||
|
|
||||||
proc sql;
|
proc sql;
|
||||||
create table &tmpds4 as
|
create table &tmpds4 as
|
||||||
select a.*, b.length as maxw
|
select a.*, b.length as MAXW
|
||||||
from &colinfo a
|
from &colinfo a
|
||||||
left join &tmpds2 b
|
left join &tmpds2 b
|
||||||
on cats(a.format)=cats(upcase(b.fmtname))
|
on cats(a.format)=cats(upcase(b.fmtname))
|
||||||
@@ -239,7 +239,7 @@
|
|||||||
call symputx(
|
call symputx(
|
||||||
cats('fmtlen',_n_),
|
cats('fmtlen',_n_),
|
||||||
/* vars need extra padding due to JSON escaping of special chars */
|
/* vars need extra padding due to JSON escaping of special chars */
|
||||||
min(32767,ceil((max(length,maxw)+3)*1.5))
|
min(32767,ceil((max(length,maxw)+10)*1.5))
|
||||||
,'l'
|
,'l'
|
||||||
);
|
);
|
||||||
run;
|
run;
|
||||||
@@ -314,7 +314,7 @@
|
|||||||
format _numeric_ bart.;
|
format _numeric_ bart.;
|
||||||
%do i=1 %to &numcols;
|
%do i=1 %to &numcols;
|
||||||
%if &&typelong&i=char or &fmt=Y %then %do;
|
%if &&typelong&i=char or &fmt=Y %then %do;
|
||||||
if findc(&&name&i,'"\'!!'0A0D09000E0F01021011'x) then do;
|
if findc(&&name&i,'"\'!!'0A0D09000E0F010210111A'x) then do;
|
||||||
&&name&i='"'!!trim(
|
&&name&i='"'!!trim(
|
||||||
prxchange('s/"/\\"/',-1, /* double quote */
|
prxchange('s/"/\\"/',-1, /* double quote */
|
||||||
prxchange('s/\x0A/\n/',-1, /* new line */
|
prxchange('s/\x0A/\n/',-1, /* new line */
|
||||||
@@ -327,8 +327,9 @@
|
|||||||
prxchange('s/\x02/\\u0002/',-1, /* STX */
|
prxchange('s/\x02/\\u0002/',-1, /* STX */
|
||||||
prxchange('s/\x10/\\u0010/',-1, /* DLE */
|
prxchange('s/\x10/\\u0010/',-1, /* DLE */
|
||||||
prxchange('s/\x11/\\u0011/',-1, /* DC1 */
|
prxchange('s/\x11/\\u0011/',-1, /* DC1 */
|
||||||
|
prxchange('s/\x1A/\\u001A/',-1, /* SUB */
|
||||||
prxchange('s/\\/\\\\/',-1,&&name&i)
|
prxchange('s/\\/\\\\/',-1,&&name&i)
|
||||||
))))))))))))!!'"';
|
)))))))))))))!!'"';
|
||||||
end;
|
end;
|
||||||
else &&name&i=quote(cats(&&name&i));
|
else &&name&i=quote(cats(&&name&i));
|
||||||
%end;
|
%end;
|
||||||
|
|||||||
@@ -169,7 +169,7 @@ data _null_;
|
|||||||
put ' call symputx(cats(''label'',_n_),coalescec(label,name),''l''); ';
|
put ' call symputx(cats(''label'',_n_),coalescec(label,name),''l''); ';
|
||||||
put ' /* overwritten when fmt=Y and a custom format exists in catalog */ ';
|
put ' /* overwritten when fmt=Y and a custom format exists in catalog */ ';
|
||||||
put ' if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l''); ';
|
put ' if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l''); ';
|
||||||
put ' else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+3)*1.5)),''l''); ';
|
put ' else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l''); ';
|
||||||
put ' run; ';
|
put ' run; ';
|
||||||
put ' ';
|
put ' ';
|
||||||
put ' %let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32); ';
|
put ' %let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32); ';
|
||||||
@@ -225,8 +225,8 @@ data _null_;
|
|||||||
put ' %let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32); ';
|
put ' %let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32); ';
|
||||||
put ' proc sql noprint; ';
|
put ' proc sql noprint; ';
|
||||||
put ' create table &tmpds1 as ';
|
put ' create table &tmpds1 as ';
|
||||||
put ' select cats(libname,''.'',memname) as fmtcat, ';
|
put ' select cats(libname,''.'',memname) as FMTCAT, ';
|
||||||
put ' fmtname ';
|
put ' FMTNAME ';
|
||||||
put ' from dictionary.formats ';
|
put ' from dictionary.formats ';
|
||||||
put ' where fmttype=''F'' and libname is not null ';
|
put ' where fmttype=''F'' and libname is not null ';
|
||||||
put ' and fmtname in (select format from &colinfo where format is not null) ';
|
put ' and fmtname in (select format from &colinfo where format is not null) ';
|
||||||
@@ -251,7 +251,7 @@ data _null_;
|
|||||||
put ' ';
|
put ' ';
|
||||||
put ' proc sql; ';
|
put ' proc sql; ';
|
||||||
put ' create table &tmpds4 as ';
|
put ' create table &tmpds4 as ';
|
||||||
put ' select a.*, b.length as maxw ';
|
put ' select a.*, b.length as MAXW ';
|
||||||
put ' from &colinfo a ';
|
put ' from &colinfo a ';
|
||||||
put ' left join &tmpds2 b ';
|
put ' left join &tmpds2 b ';
|
||||||
put ' on cats(a.format)=cats(upcase(b.fmtname)) ';
|
put ' on cats(a.format)=cats(upcase(b.fmtname)) ';
|
||||||
@@ -262,7 +262,7 @@ data _null_;
|
|||||||
put ' call symputx( ';
|
put ' call symputx( ';
|
||||||
put ' cats(''fmtlen'',_n_), ';
|
put ' cats(''fmtlen'',_n_), ';
|
||||||
put ' /* vars need extra padding due to JSON escaping of special chars */ ';
|
put ' /* vars need extra padding due to JSON escaping of special chars */ ';
|
||||||
put ' min(32767,ceil((max(length,maxw)+3)*1.5)) ';
|
put ' min(32767,ceil((max(length,maxw)+10)*1.5)) ';
|
||||||
put ' ,''l'' ';
|
put ' ,''l'' ';
|
||||||
put ' ); ';
|
put ' ); ';
|
||||||
put ' run; ';
|
put ' run; ';
|
||||||
@@ -337,7 +337,7 @@ data _null_;
|
|||||||
put ' format _numeric_ bart.; ';
|
put ' format _numeric_ bart.; ';
|
||||||
put ' %do i=1 %to &numcols; ';
|
put ' %do i=1 %to &numcols; ';
|
||||||
put ' %if &&typelong&i=char or &fmt=Y %then %do; ';
|
put ' %if &&typelong&i=char or &fmt=Y %then %do; ';
|
||||||
put ' if findc(&&name&i,''"\''!!''0A0D09000E0F01021011''x) then do; ';
|
put ' if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do; ';
|
||||||
put ' &&name&i=''"''!!trim( ';
|
put ' &&name&i=''"''!!trim( ';
|
||||||
put ' prxchange(''s/"/\\"/'',-1, /* double quote */ ';
|
put ' prxchange(''s/"/\\"/'',-1, /* double quote */ ';
|
||||||
put ' prxchange(''s/\x0A/\n/'',-1, /* new line */ ';
|
put ' prxchange(''s/\x0A/\n/'',-1, /* new line */ ';
|
||||||
@@ -350,8 +350,9 @@ data _null_;
|
|||||||
put ' prxchange(''s/\x02/\\u0002/'',-1, /* STX */ ';
|
put ' prxchange(''s/\x02/\\u0002/'',-1, /* STX */ ';
|
||||||
put ' prxchange(''s/\x10/\\u0010/'',-1, /* DLE */ ';
|
put ' prxchange(''s/\x10/\\u0010/'',-1, /* DLE */ ';
|
||||||
put ' prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */ ';
|
put ' prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */ ';
|
||||||
|
put ' prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */ ';
|
||||||
put ' prxchange(''s/\\/\\\\/'',-1,&&name&i) ';
|
put ' prxchange(''s/\\/\\\\/'',-1,&&name&i) ';
|
||||||
put ' ))))))))))))!!''"''; ';
|
put ' )))))))))))))!!''"''; ';
|
||||||
put ' end; ';
|
put ' end; ';
|
||||||
put ' else &&name&i=quote(cats(&&name&i)); ';
|
put ' else &&name&i=quote(cats(&&name&i)); ';
|
||||||
put ' %end; ';
|
put ' %end; ';
|
||||||
|
|||||||
@@ -58,7 +58,7 @@ data &outds;
|
|||||||
rc5=metadata_getattr(tsuri,"Name",servercontext);
|
rc5=metadata_getattr(tsuri,"Name",servercontext);
|
||||||
end;
|
end;
|
||||||
else do;
|
else do;
|
||||||
put "%str(ERR)OR: could not find " pgm;
|
put "%str(ERR)OR: could not find " path;
|
||||||
put (_all_)(=);
|
put (_all_)(=);
|
||||||
end;
|
end;
|
||||||
&md.put (_all_)(=);
|
&md.put (_all_)(=);
|
||||||
|
|||||||
@@ -170,7 +170,7 @@ data _null_;
|
|||||||
put ' call symputx(cats(''label'',_n_),coalescec(label,name),''l''); ';
|
put ' call symputx(cats(''label'',_n_),coalescec(label,name),''l''); ';
|
||||||
put ' /* overwritten when fmt=Y and a custom format exists in catalog */ ';
|
put ' /* overwritten when fmt=Y and a custom format exists in catalog */ ';
|
||||||
put ' if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l''); ';
|
put ' if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l''); ';
|
||||||
put ' else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+3)*1.5)),''l''); ';
|
put ' else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l''); ';
|
||||||
put ' run; ';
|
put ' run; ';
|
||||||
put ' ';
|
put ' ';
|
||||||
put ' %let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32); ';
|
put ' %let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32); ';
|
||||||
@@ -226,8 +226,8 @@ data _null_;
|
|||||||
put ' %let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32); ';
|
put ' %let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32); ';
|
||||||
put ' proc sql noprint; ';
|
put ' proc sql noprint; ';
|
||||||
put ' create table &tmpds1 as ';
|
put ' create table &tmpds1 as ';
|
||||||
put ' select cats(libname,''.'',memname) as fmtcat, ';
|
put ' select cats(libname,''.'',memname) as FMTCAT, ';
|
||||||
put ' fmtname ';
|
put ' FMTNAME ';
|
||||||
put ' from dictionary.formats ';
|
put ' from dictionary.formats ';
|
||||||
put ' where fmttype=''F'' and libname is not null ';
|
put ' where fmttype=''F'' and libname is not null ';
|
||||||
put ' and fmtname in (select format from &colinfo where format is not null) ';
|
put ' and fmtname in (select format from &colinfo where format is not null) ';
|
||||||
@@ -252,7 +252,7 @@ data _null_;
|
|||||||
put ' ';
|
put ' ';
|
||||||
put ' proc sql; ';
|
put ' proc sql; ';
|
||||||
put ' create table &tmpds4 as ';
|
put ' create table &tmpds4 as ';
|
||||||
put ' select a.*, b.length as maxw ';
|
put ' select a.*, b.length as MAXW ';
|
||||||
put ' from &colinfo a ';
|
put ' from &colinfo a ';
|
||||||
put ' left join &tmpds2 b ';
|
put ' left join &tmpds2 b ';
|
||||||
put ' on cats(a.format)=cats(upcase(b.fmtname)) ';
|
put ' on cats(a.format)=cats(upcase(b.fmtname)) ';
|
||||||
@@ -263,7 +263,7 @@ data _null_;
|
|||||||
put ' call symputx( ';
|
put ' call symputx( ';
|
||||||
put ' cats(''fmtlen'',_n_), ';
|
put ' cats(''fmtlen'',_n_), ';
|
||||||
put ' /* vars need extra padding due to JSON escaping of special chars */ ';
|
put ' /* vars need extra padding due to JSON escaping of special chars */ ';
|
||||||
put ' min(32767,ceil((max(length,maxw)+3)*1.5)) ';
|
put ' min(32767,ceil((max(length,maxw)+10)*1.5)) ';
|
||||||
put ' ,''l'' ';
|
put ' ,''l'' ';
|
||||||
put ' ); ';
|
put ' ); ';
|
||||||
put ' run; ';
|
put ' run; ';
|
||||||
@@ -338,7 +338,7 @@ data _null_;
|
|||||||
put ' format _numeric_ bart.; ';
|
put ' format _numeric_ bart.; ';
|
||||||
put ' %do i=1 %to &numcols; ';
|
put ' %do i=1 %to &numcols; ';
|
||||||
put ' %if &&typelong&i=char or &fmt=Y %then %do; ';
|
put ' %if &&typelong&i=char or &fmt=Y %then %do; ';
|
||||||
put ' if findc(&&name&i,''"\''!!''0A0D09000E0F01021011''x) then do; ';
|
put ' if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do; ';
|
||||||
put ' &&name&i=''"''!!trim( ';
|
put ' &&name&i=''"''!!trim( ';
|
||||||
put ' prxchange(''s/"/\\"/'',-1, /* double quote */ ';
|
put ' prxchange(''s/"/\\"/'',-1, /* double quote */ ';
|
||||||
put ' prxchange(''s/\x0A/\n/'',-1, /* new line */ ';
|
put ' prxchange(''s/\x0A/\n/'',-1, /* new line */ ';
|
||||||
@@ -351,8 +351,9 @@ data _null_;
|
|||||||
put ' prxchange(''s/\x02/\\u0002/'',-1, /* STX */ ';
|
put ' prxchange(''s/\x02/\\u0002/'',-1, /* STX */ ';
|
||||||
put ' prxchange(''s/\x10/\\u0010/'',-1, /* DLE */ ';
|
put ' prxchange(''s/\x10/\\u0010/'',-1, /* DLE */ ';
|
||||||
put ' prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */ ';
|
put ' prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */ ';
|
||||||
|
put ' prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */ ';
|
||||||
put ' prxchange(''s/\\/\\\\/'',-1,&&name&i) ';
|
put ' prxchange(''s/\\/\\\\/'',-1,&&name&i) ';
|
||||||
put ' ))))))))))))!!''"''; ';
|
put ' )))))))))))))!!''"''; ';
|
||||||
put ' end; ';
|
put ' end; ';
|
||||||
put ' else &&name&i=quote(cats(&&name&i)); ';
|
put ' else &&name&i=quote(cats(&&name&i)); ';
|
||||||
put ' %end; ';
|
put ' %end; ';
|
||||||
|
|||||||
@@ -312,7 +312,7 @@ data _null_;
|
|||||||
put ' call symputx(cats(''label'',_n_),coalescec(label,name),''l''); ';
|
put ' call symputx(cats(''label'',_n_),coalescec(label,name),''l''); ';
|
||||||
put ' /* overwritten when fmt=Y and a custom format exists in catalog */ ';
|
put ' /* overwritten when fmt=Y and a custom format exists in catalog */ ';
|
||||||
put ' if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l''); ';
|
put ' if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l''); ';
|
||||||
put ' else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+3)*1.5)),''l''); ';
|
put ' else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l''); ';
|
||||||
put ' run; ';
|
put ' run; ';
|
||||||
put ' ';
|
put ' ';
|
||||||
put ' %let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32); ';
|
put ' %let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32); ';
|
||||||
@@ -368,8 +368,8 @@ data _null_;
|
|||||||
put ' %let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32); ';
|
put ' %let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32); ';
|
||||||
put ' proc sql noprint; ';
|
put ' proc sql noprint; ';
|
||||||
put ' create table &tmpds1 as ';
|
put ' create table &tmpds1 as ';
|
||||||
put ' select cats(libname,''.'',memname) as fmtcat, ';
|
put ' select cats(libname,''.'',memname) as FMTCAT, ';
|
||||||
put ' fmtname ';
|
put ' FMTNAME ';
|
||||||
put ' from dictionary.formats ';
|
put ' from dictionary.formats ';
|
||||||
put ' where fmttype=''F'' and libname is not null ';
|
put ' where fmttype=''F'' and libname is not null ';
|
||||||
put ' and fmtname in (select format from &colinfo where format is not null) ';
|
put ' and fmtname in (select format from &colinfo where format is not null) ';
|
||||||
@@ -394,7 +394,7 @@ data _null_;
|
|||||||
put ' ';
|
put ' ';
|
||||||
put ' proc sql; ';
|
put ' proc sql; ';
|
||||||
put ' create table &tmpds4 as ';
|
put ' create table &tmpds4 as ';
|
||||||
put ' select a.*, b.length as maxw ';
|
put ' select a.*, b.length as MAXW ';
|
||||||
put ' from &colinfo a ';
|
put ' from &colinfo a ';
|
||||||
put ' left join &tmpds2 b ';
|
put ' left join &tmpds2 b ';
|
||||||
put ' on cats(a.format)=cats(upcase(b.fmtname)) ';
|
put ' on cats(a.format)=cats(upcase(b.fmtname)) ';
|
||||||
@@ -405,7 +405,7 @@ data _null_;
|
|||||||
put ' call symputx( ';
|
put ' call symputx( ';
|
||||||
put ' cats(''fmtlen'',_n_), ';
|
put ' cats(''fmtlen'',_n_), ';
|
||||||
put ' /* vars need extra padding due to JSON escaping of special chars */ ';
|
put ' /* vars need extra padding due to JSON escaping of special chars */ ';
|
||||||
put ' min(32767,ceil((max(length,maxw)+3)*1.5)) ';
|
put ' min(32767,ceil((max(length,maxw)+10)*1.5)) ';
|
||||||
put ' ,''l'' ';
|
put ' ,''l'' ';
|
||||||
put ' ); ';
|
put ' ); ';
|
||||||
put ' run; ';
|
put ' run; ';
|
||||||
@@ -480,7 +480,7 @@ data _null_;
|
|||||||
put ' format _numeric_ bart.; ';
|
put ' format _numeric_ bart.; ';
|
||||||
put ' %do i=1 %to &numcols; ';
|
put ' %do i=1 %to &numcols; ';
|
||||||
put ' %if &&typelong&i=char or &fmt=Y %then %do; ';
|
put ' %if &&typelong&i=char or &fmt=Y %then %do; ';
|
||||||
put ' if findc(&&name&i,''"\''!!''0A0D09000E0F01021011''x) then do; ';
|
put ' if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do; ';
|
||||||
put ' &&name&i=''"''!!trim( ';
|
put ' &&name&i=''"''!!trim( ';
|
||||||
put ' prxchange(''s/"/\\"/'',-1, /* double quote */ ';
|
put ' prxchange(''s/"/\\"/'',-1, /* double quote */ ';
|
||||||
put ' prxchange(''s/\x0A/\n/'',-1, /* new line */ ';
|
put ' prxchange(''s/\x0A/\n/'',-1, /* new line */ ';
|
||||||
@@ -493,8 +493,9 @@ data _null_;
|
|||||||
put ' prxchange(''s/\x02/\\u0002/'',-1, /* STX */ ';
|
put ' prxchange(''s/\x02/\\u0002/'',-1, /* STX */ ';
|
||||||
put ' prxchange(''s/\x10/\\u0010/'',-1, /* DLE */ ';
|
put ' prxchange(''s/\x10/\\u0010/'',-1, /* DLE */ ';
|
||||||
put ' prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */ ';
|
put ' prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */ ';
|
||||||
|
put ' prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */ ';
|
||||||
put ' prxchange(''s/\\/\\\\/'',-1,&&name&i) ';
|
put ' prxchange(''s/\\/\\\\/'',-1,&&name&i) ';
|
||||||
put ' ))))))))))))!!''"''; ';
|
put ' )))))))))))))!!''"''; ';
|
||||||
put ' end; ';
|
put ' end; ';
|
||||||
put ' else &&name&i=quote(cats(&&name&i)); ';
|
put ' else &&name&i=quote(cats(&&name&i)); ';
|
||||||
put ' %end; ';
|
put ' %end; ';
|
||||||
|
|||||||
Reference in New Issue
Block a user