mirror of
https://github.com/sasjs/core.git
synced 2026-01-09 18:30:06 +00:00
130
all.sas
130
all.sas
@@ -8137,7 +8137,7 @@ options
|
|||||||
%put &sysmacroname: Switching to DATASTEP engine;
|
%put &sysmacroname: Switching to DATASTEP engine;
|
||||||
%goto datastep;
|
%goto datastep;
|
||||||
%end;
|
%end;
|
||||||
data &tempds /view=&tempds;set &ds;
|
data &tempds;set &ds;
|
||||||
%if &fmt=N %then format _numeric_ best32.;;
|
%if &fmt=N %then format _numeric_ best32.;;
|
||||||
/* PRETTY is necessary to avoid line truncation in large files */
|
/* PRETTY is necessary to avoid line truncation in large files */
|
||||||
proc json out=&jref pretty
|
proc json out=&jref pretty
|
||||||
@@ -8188,7 +8188,7 @@ options
|
|||||||
%end;
|
%end;
|
||||||
other = [best.];
|
other = [best.];
|
||||||
|
|
||||||
data &tempds/view=&tempds;
|
data &tempds;
|
||||||
attrib _all_ label='';
|
attrib _all_ label='';
|
||||||
%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;
|
||||||
@@ -8250,8 +8250,7 @@ options
|
|||||||
%end;
|
%end;
|
||||||
|
|
||||||
proc sql;
|
proc sql;
|
||||||
drop view &tempds;
|
drop table &colinfo, &tempds;
|
||||||
drop table &colinfo;
|
|
||||||
|
|
||||||
%if &showmeta=YES %then %do;
|
%if &showmeta=YES %then %do;
|
||||||
data _null_; file &jref encoding='utf-8' mod;
|
data _null_; file &jref encoding='utf-8' mod;
|
||||||
@@ -13861,7 +13860,7 @@ data _null_;
|
|||||||
put ' %put &sysmacroname: Switching to DATASTEP engine; ';
|
put ' %put &sysmacroname: Switching to DATASTEP engine; ';
|
||||||
put ' %goto datastep; ';
|
put ' %goto datastep; ';
|
||||||
put ' %end; ';
|
put ' %end; ';
|
||||||
put ' data &tempds /view=&tempds;set &ds; ';
|
put ' data &tempds;set &ds; ';
|
||||||
put ' %if &fmt=N %then format _numeric_ best32.;; ';
|
put ' %if &fmt=N %then format _numeric_ best32.;; ';
|
||||||
put ' /* PRETTY is necessary to avoid line truncation in large files */ ';
|
put ' /* PRETTY is necessary to avoid line truncation in large files */ ';
|
||||||
put ' proc json out=&jref pretty ';
|
put ' proc json out=&jref pretty ';
|
||||||
@@ -13912,7 +13911,7 @@ data _null_;
|
|||||||
put ' %end; ';
|
put ' %end; ';
|
||||||
put ' other = [best.]; ';
|
put ' other = [best.]; ';
|
||||||
put ' ';
|
put ' ';
|
||||||
put ' data &tempds/view=&tempds; ';
|
put ' data &tempds; ';
|
||||||
put ' attrib _all_ label=''''; ';
|
put ' attrib _all_ label=''''; ';
|
||||||
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; ';
|
||||||
@@ -13974,8 +13973,7 @@ data _null_;
|
|||||||
put ' %end; ';
|
put ' %end; ';
|
||||||
put ' ';
|
put ' ';
|
||||||
put ' proc sql; ';
|
put ' proc sql; ';
|
||||||
put ' drop view &tempds; ';
|
put ' drop table &colinfo, &tempds; ';
|
||||||
put ' drop table &colinfo; ';
|
|
||||||
put ' ';
|
put ' ';
|
||||||
put ' %if &showmeta=YES %then %do; ';
|
put ' %if &showmeta=YES %then %do; ';
|
||||||
put ' data _null_; file &jref encoding=''utf-8'' mod; ';
|
put ' data _null_; file &jref encoding=''utf-8'' mod; ';
|
||||||
@@ -19004,7 +19002,7 @@ data _null_;
|
|||||||
put ' %put &sysmacroname: Switching to DATASTEP engine; ';
|
put ' %put &sysmacroname: Switching to DATASTEP engine; ';
|
||||||
put ' %goto datastep; ';
|
put ' %goto datastep; ';
|
||||||
put ' %end; ';
|
put ' %end; ';
|
||||||
put ' data &tempds /view=&tempds;set &ds; ';
|
put ' data &tempds;set &ds; ';
|
||||||
put ' %if &fmt=N %then format _numeric_ best32.;; ';
|
put ' %if &fmt=N %then format _numeric_ best32.;; ';
|
||||||
put ' /* PRETTY is necessary to avoid line truncation in large files */ ';
|
put ' /* PRETTY is necessary to avoid line truncation in large files */ ';
|
||||||
put ' proc json out=&jref pretty ';
|
put ' proc json out=&jref pretty ';
|
||||||
@@ -19055,7 +19053,7 @@ data _null_;
|
|||||||
put ' %end; ';
|
put ' %end; ';
|
||||||
put ' other = [best.]; ';
|
put ' other = [best.]; ';
|
||||||
put ' ';
|
put ' ';
|
||||||
put ' data &tempds/view=&tempds; ';
|
put ' data &tempds; ';
|
||||||
put ' attrib _all_ label=''''; ';
|
put ' attrib _all_ label=''''; ';
|
||||||
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; ';
|
||||||
@@ -19117,8 +19115,7 @@ data _null_;
|
|||||||
put ' %end; ';
|
put ' %end; ';
|
||||||
put ' ';
|
put ' ';
|
||||||
put ' proc sql; ';
|
put ' proc sql; ';
|
||||||
put ' drop view &tempds; ';
|
put ' drop table &colinfo, &tempds; ';
|
||||||
put ' drop table &colinfo; ';
|
|
||||||
put ' ';
|
put ' ';
|
||||||
put ' %if &showmeta=YES %then %do; ';
|
put ' %if &showmeta=YES %then %do; ';
|
||||||
put ' data _null_; file &jref encoding=''utf-8'' mod; ';
|
put ' data _null_; file &jref encoding=''utf-8'' mod; ';
|
||||||
@@ -23556,6 +23553,115 @@ run;
|
|||||||
|
|
||||||
%mend ml_json;
|
%mend ml_json;
|
||||||
/**
|
/**
|
||||||
|
@file
|
||||||
|
@brief Returns the type of the format
|
||||||
|
@details
|
||||||
|
Returns the type, eg DATE / DATETIME / TIME (based on hard-coded lookup)
|
||||||
|
else CHAR / NUM.
|
||||||
|
|
||||||
|
This macro may be extended in the future to support custom formats - this
|
||||||
|
would necessitate a call to `dosubl()` for running a proc format with cntlout.
|
||||||
|
|
||||||
|
The function itself takes the following (positional) parameters:
|
||||||
|
|
||||||
|
| PARAMETER | DESCRIPTION |
|
||||||
|
|---|---|
|
||||||
|
|fmtnm| Format name to be tested. Can be with or without the w.d extension.|
|
||||||
|
|
||||||
|
Usage:
|
||||||
|
|
||||||
|
%mcf_getfmttype(wrap=YES, insert_cmplib=YES)
|
||||||
|
|
||||||
|
data _null_;
|
||||||
|
fmt1=mcf_getfmttype('DATE9.');
|
||||||
|
fmt2=mcf_getfmttype('DATETIME');
|
||||||
|
put (fmt:)(=);
|
||||||
|
run;
|
||||||
|
%put fmt3=%sysfunc(mcf_getfmttype(TIME9.));
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
|
||||||
|
> fmt1=DATE fmt2=DATETIME
|
||||||
|
> fmt3=TIME
|
||||||
|
|
||||||
|
@param [out] wrap= (NO) Choose YES to add the proc fcmp wrapper.
|
||||||
|
@param [out] insert_cmplib= (NO) Choose YES to insert the package into the
|
||||||
|
CMPLIB reference.
|
||||||
|
@param [out] lib= (work) The output library in which to create the catalog.
|
||||||
|
@param [out] cat= (sasjs) The output catalog in which to create the package.
|
||||||
|
@param [out] pkg= (utils) The output package in which to create the function.
|
||||||
|
Uses a 3 part format: libref.catalog.package
|
||||||
|
|
||||||
|
<h4> SAS Macros </h4>
|
||||||
|
@li mcf_init.sas
|
||||||
|
|
||||||
|
<h4> Related Programs </h4>
|
||||||
|
@li mcf_getfmttype.test.sas
|
||||||
|
@li mp_init.sas
|
||||||
|
|
||||||
|
@todo "Custom Format Lookups" To enable site-specific formats, make
|
||||||
|
use of a set of SASJS_FMTLIST_(DATATYPE) global variables.
|
||||||
|
|
||||||
|
**/
|
||||||
|
|
||||||
|
%macro mcf_getfmttype(wrap=NO
|
||||||
|
,insert_cmplib=NO
|
||||||
|
,lib=WORK
|
||||||
|
,cat=SASJS
|
||||||
|
,pkg=UTILS
|
||||||
|
)/*/STORE SOURCE*/;
|
||||||
|
|
||||||
|
%if %mcf_init(mcf_getfmttype)=1 %then %return;
|
||||||
|
|
||||||
|
%if &wrap=YES %then %do;
|
||||||
|
proc fcmp outlib=&lib..&cat..&pkg;
|
||||||
|
%end;
|
||||||
|
|
||||||
|
function mcf_getfmttype(fmtnm $) $8;
|
||||||
|
if substr(fmtnm,1,1)='$' then return('CHAR');
|
||||||
|
else do;
|
||||||
|
/* extract NAME */
|
||||||
|
length fmt $32;
|
||||||
|
fmt=scan(fmtnm,1,'.');
|
||||||
|
do while (
|
||||||
|
substr(fmt,length(fmt),1) in ('1','2','3','4','5','6','7','8','9','0')
|
||||||
|
);
|
||||||
|
if length(fmt)=1 then fmt='W';
|
||||||
|
else fmt=substr(fmt,1,length(fmt)-1);
|
||||||
|
end;
|
||||||
|
|
||||||
|
/* apply lookups */
|
||||||
|
if cats(fmt) in ('DATETIME','B8601DN','B8601DN','B8601DT','B8601DT'
|
||||||
|
,'B8601DZ','B8601DZ','DATEAMPM','DTDATE','DTMONYY','DTWKDATX','DTYEAR'
|
||||||
|
,'DTYYQC','E8601DN','E8601DN','E8601DT','E8601DT','E8601DZ','E8601DZ')
|
||||||
|
then return('DATETIME');
|
||||||
|
else if fmt in ('DATE','YYMMDD','B8601DA','B8601DA','DAY','DDMMYY'
|
||||||
|
,'DDMMYYB','DDMMYYC','DDMMYYD','DDMMYYN','DDMMYYP','DDMMYYS','DDMMYYx'
|
||||||
|
,'DOWNAME','E8601DA','E8601DA','JULDAY','JULIAN','MMDDYY','MMDDYYB'
|
||||||
|
,'MMDDYYC','MMDDYYD','MMDDYYN','MMDDYYP','MMDDYYS','MMDDYYx','MMYY'
|
||||||
|
,'MMYYC','MMYYD','MMYYN','MMYYP','MMYYS','MMYYx','MONNAME','MONTH'
|
||||||
|
,'MONYY','PDJULG','PDJULI','QTR','QTRR','WEEKDATE','WEEKDATX','WEEKDAY'
|
||||||
|
,'WEEKU','WEEKV','WEEKW','WORDDATE','WORDDATX','YEAR','YYMM','YYMMC'
|
||||||
|
,'YYMMD','YYMMDDB','YYMMDDC','YYMMDDD','YYMMDDN','YYMMDDP','YYMMDDS'
|
||||||
|
,'YYMMDDx','YYMMN','YYMMP','YYMMS','YYMMx','YYMON','YYQ','YYQC','YYQD'
|
||||||
|
,'YYQN','YYQP','YYQR','YYQRC','YYQRD','YYQRN','YYQRP','YYQRS','YYQRx'
|
||||||
|
,'YYQS','YYQx','YYQZ') then return('DATE');
|
||||||
|
else if fmt in ('TIME','B8601LZ','B8601LZ','B8601TM','B8601TM','B8601TZ'
|
||||||
|
,'B8601TZ','E8601LZ','E8601LZ','E8601TM','E8601TM','E8601TZ','E8601TZ'
|
||||||
|
,'HHMM','HOUR','MMSS','TIMEAMPM','TOD') then return('TIME');
|
||||||
|
else return('NUM');
|
||||||
|
end;
|
||||||
|
endsub;
|
||||||
|
|
||||||
|
%if &wrap=YES %then %do;
|
||||||
|
quit;
|
||||||
|
%end;
|
||||||
|
|
||||||
|
%if &insert_cmplib=YES %then %do;
|
||||||
|
options insert=(CMPLIB=(&lib..&cat));
|
||||||
|
%end;
|
||||||
|
|
||||||
|
%mend mcf_getfmttype;/**
|
||||||
@file
|
@file
|
||||||
@brief Sets up the mcf_xx functions
|
@brief Sets up the mcf_xx functions
|
||||||
@details
|
@details
|
||||||
|
|||||||
@@ -131,7 +131,7 @@
|
|||||||
%put &sysmacroname: Switching to DATASTEP engine;
|
%put &sysmacroname: Switching to DATASTEP engine;
|
||||||
%goto datastep;
|
%goto datastep;
|
||||||
%end;
|
%end;
|
||||||
data &tempds /view=&tempds;set &ds;
|
data &tempds;set &ds;
|
||||||
%if &fmt=N %then format _numeric_ best32.;;
|
%if &fmt=N %then format _numeric_ best32.;;
|
||||||
/* PRETTY is necessary to avoid line truncation in large files */
|
/* PRETTY is necessary to avoid line truncation in large files */
|
||||||
proc json out=&jref pretty
|
proc json out=&jref pretty
|
||||||
@@ -182,7 +182,7 @@
|
|||||||
%end;
|
%end;
|
||||||
other = [best.];
|
other = [best.];
|
||||||
|
|
||||||
data &tempds/view=&tempds;
|
data &tempds;
|
||||||
attrib _all_ label='';
|
attrib _all_ label='';
|
||||||
%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;
|
||||||
@@ -244,8 +244,7 @@
|
|||||||
%end;
|
%end;
|
||||||
|
|
||||||
proc sql;
|
proc sql;
|
||||||
drop view &tempds;
|
drop table &colinfo, &tempds;
|
||||||
drop table &colinfo;
|
|
||||||
|
|
||||||
%if &showmeta=YES %then %do;
|
%if &showmeta=YES %then %do;
|
||||||
data _null_; file &jref encoding='utf-8' mod;
|
data _null_; file &jref encoding='utf-8' mod;
|
||||||
|
|||||||
110
fcmp/mcf_getfmttype.sas
Normal file
110
fcmp/mcf_getfmttype.sas
Normal file
@@ -0,0 +1,110 @@
|
|||||||
|
/**
|
||||||
|
@file
|
||||||
|
@brief Returns the type of the format
|
||||||
|
@details
|
||||||
|
Returns the type, eg DATE / DATETIME / TIME (based on hard-coded lookup)
|
||||||
|
else CHAR / NUM.
|
||||||
|
|
||||||
|
This macro may be extended in the future to support custom formats - this
|
||||||
|
would necessitate a call to `dosubl()` for running a proc format with cntlout.
|
||||||
|
|
||||||
|
The function itself takes the following (positional) parameters:
|
||||||
|
|
||||||
|
| PARAMETER | DESCRIPTION |
|
||||||
|
|---|---|
|
||||||
|
|fmtnm| Format name to be tested. Can be with or without the w.d extension.|
|
||||||
|
|
||||||
|
Usage:
|
||||||
|
|
||||||
|
%mcf_getfmttype(wrap=YES, insert_cmplib=YES)
|
||||||
|
|
||||||
|
data _null_;
|
||||||
|
fmt1=mcf_getfmttype('DATE9.');
|
||||||
|
fmt2=mcf_getfmttype('DATETIME');
|
||||||
|
put (fmt:)(=);
|
||||||
|
run;
|
||||||
|
%put fmt3=%sysfunc(mcf_getfmttype(TIME9.));
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
|
||||||
|
> fmt1=DATE fmt2=DATETIME
|
||||||
|
> fmt3=TIME
|
||||||
|
|
||||||
|
@param [out] wrap= (NO) Choose YES to add the proc fcmp wrapper.
|
||||||
|
@param [out] insert_cmplib= (NO) Choose YES to insert the package into the
|
||||||
|
CMPLIB reference.
|
||||||
|
@param [out] lib= (work) The output library in which to create the catalog.
|
||||||
|
@param [out] cat= (sasjs) The output catalog in which to create the package.
|
||||||
|
@param [out] pkg= (utils) The output package in which to create the function.
|
||||||
|
Uses a 3 part format: libref.catalog.package
|
||||||
|
|
||||||
|
<h4> SAS Macros </h4>
|
||||||
|
@li mcf_init.sas
|
||||||
|
|
||||||
|
<h4> Related Programs </h4>
|
||||||
|
@li mcf_getfmttype.test.sas
|
||||||
|
@li mp_init.sas
|
||||||
|
|
||||||
|
@todo "Custom Format Lookups" To enable site-specific formats, make
|
||||||
|
use of a set of SASJS_FMTLIST_(DATATYPE) global variables.
|
||||||
|
|
||||||
|
**/
|
||||||
|
|
||||||
|
%macro mcf_getfmttype(wrap=NO
|
||||||
|
,insert_cmplib=NO
|
||||||
|
,lib=WORK
|
||||||
|
,cat=SASJS
|
||||||
|
,pkg=UTILS
|
||||||
|
)/*/STORE SOURCE*/;
|
||||||
|
|
||||||
|
%if %mcf_init(mcf_getfmttype)=1 %then %return;
|
||||||
|
|
||||||
|
%if &wrap=YES %then %do;
|
||||||
|
proc fcmp outlib=&lib..&cat..&pkg;
|
||||||
|
%end;
|
||||||
|
|
||||||
|
function mcf_getfmttype(fmtnm $) $8;
|
||||||
|
if substr(fmtnm,1,1)='$' then return('CHAR');
|
||||||
|
else do;
|
||||||
|
/* extract NAME */
|
||||||
|
length fmt $32;
|
||||||
|
fmt=scan(fmtnm,1,'.');
|
||||||
|
do while (
|
||||||
|
substr(fmt,length(fmt),1) in ('1','2','3','4','5','6','7','8','9','0')
|
||||||
|
);
|
||||||
|
if length(fmt)=1 then fmt='W';
|
||||||
|
else fmt=substr(fmt,1,length(fmt)-1);
|
||||||
|
end;
|
||||||
|
|
||||||
|
/* apply lookups */
|
||||||
|
if cats(fmt) in ('DATETIME','B8601DN','B8601DN','B8601DT','B8601DT'
|
||||||
|
,'B8601DZ','B8601DZ','DATEAMPM','DTDATE','DTMONYY','DTWKDATX','DTYEAR'
|
||||||
|
,'DTYYQC','E8601DN','E8601DN','E8601DT','E8601DT','E8601DZ','E8601DZ')
|
||||||
|
then return('DATETIME');
|
||||||
|
else if fmt in ('DATE','YYMMDD','B8601DA','B8601DA','DAY','DDMMYY'
|
||||||
|
,'DDMMYYB','DDMMYYC','DDMMYYD','DDMMYYN','DDMMYYP','DDMMYYS','DDMMYYx'
|
||||||
|
,'DOWNAME','E8601DA','E8601DA','JULDAY','JULIAN','MMDDYY','MMDDYYB'
|
||||||
|
,'MMDDYYC','MMDDYYD','MMDDYYN','MMDDYYP','MMDDYYS','MMDDYYx','MMYY'
|
||||||
|
,'MMYYC','MMYYD','MMYYN','MMYYP','MMYYS','MMYYx','MONNAME','MONTH'
|
||||||
|
,'MONYY','PDJULG','PDJULI','QTR','QTRR','WEEKDATE','WEEKDATX','WEEKDAY'
|
||||||
|
,'WEEKU','WEEKV','WEEKW','WORDDATE','WORDDATX','YEAR','YYMM','YYMMC'
|
||||||
|
,'YYMMD','YYMMDDB','YYMMDDC','YYMMDDD','YYMMDDN','YYMMDDP','YYMMDDS'
|
||||||
|
,'YYMMDDx','YYMMN','YYMMP','YYMMS','YYMMx','YYMON','YYQ','YYQC','YYQD'
|
||||||
|
,'YYQN','YYQP','YYQR','YYQRC','YYQRD','YYQRN','YYQRP','YYQRS','YYQRx'
|
||||||
|
,'YYQS','YYQx','YYQZ') then return('DATE');
|
||||||
|
else if fmt in ('TIME','B8601LZ','B8601LZ','B8601TM','B8601TM','B8601TZ'
|
||||||
|
,'B8601TZ','E8601LZ','E8601LZ','E8601TM','E8601TM','E8601TZ','E8601TZ'
|
||||||
|
,'HHMM','HOUR','MMSS','TIMEAMPM','TOD') then return('TIME');
|
||||||
|
else return('NUM');
|
||||||
|
end;
|
||||||
|
endsub;
|
||||||
|
|
||||||
|
%if &wrap=YES %then %do;
|
||||||
|
quit;
|
||||||
|
%end;
|
||||||
|
|
||||||
|
%if &insert_cmplib=YES %then %do;
|
||||||
|
options insert=(CMPLIB=(&lib..&cat));
|
||||||
|
%end;
|
||||||
|
|
||||||
|
%mend mcf_getfmttype;
|
||||||
@@ -164,7 +164,7 @@ data _null_;
|
|||||||
put ' %put &sysmacroname: Switching to DATASTEP engine; ';
|
put ' %put &sysmacroname: Switching to DATASTEP engine; ';
|
||||||
put ' %goto datastep; ';
|
put ' %goto datastep; ';
|
||||||
put ' %end; ';
|
put ' %end; ';
|
||||||
put ' data &tempds /view=&tempds;set &ds; ';
|
put ' data &tempds;set &ds; ';
|
||||||
put ' %if &fmt=N %then format _numeric_ best32.;; ';
|
put ' %if &fmt=N %then format _numeric_ best32.;; ';
|
||||||
put ' /* PRETTY is necessary to avoid line truncation in large files */ ';
|
put ' /* PRETTY is necessary to avoid line truncation in large files */ ';
|
||||||
put ' proc json out=&jref pretty ';
|
put ' proc json out=&jref pretty ';
|
||||||
@@ -215,7 +215,7 @@ data _null_;
|
|||||||
put ' %end; ';
|
put ' %end; ';
|
||||||
put ' other = [best.]; ';
|
put ' other = [best.]; ';
|
||||||
put ' ';
|
put ' ';
|
||||||
put ' data &tempds/view=&tempds; ';
|
put ' data &tempds; ';
|
||||||
put ' attrib _all_ label=''''; ';
|
put ' attrib _all_ label=''''; ';
|
||||||
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; ';
|
||||||
@@ -277,8 +277,7 @@ data _null_;
|
|||||||
put ' %end; ';
|
put ' %end; ';
|
||||||
put ' ';
|
put ' ';
|
||||||
put ' proc sql; ';
|
put ' proc sql; ';
|
||||||
put ' drop view &tempds; ';
|
put ' drop table &colinfo, &tempds; ';
|
||||||
put ' drop table &colinfo; ';
|
|
||||||
put ' ';
|
put ' ';
|
||||||
put ' %if &showmeta=YES %then %do; ';
|
put ' %if &showmeta=YES %then %do; ';
|
||||||
put ' data _null_; file &jref encoding=''utf-8'' mod; ';
|
put ' data _null_; file &jref encoding=''utf-8'' mod; ';
|
||||||
|
|||||||
39
tests/crossplatform/mcf_getfmttype.test.sas
Normal file
39
tests/crossplatform/mcf_getfmttype.test.sas
Normal file
@@ -0,0 +1,39 @@
|
|||||||
|
/**
|
||||||
|
@file
|
||||||
|
@brief Testing mcf_getfmttype.sas macro
|
||||||
|
|
||||||
|
<h4> SAS Macros </h4>
|
||||||
|
@li mcf_getfmttype.sas
|
||||||
|
@li mp_assert.sas
|
||||||
|
@li mp_assertscope.sas
|
||||||
|
|
||||||
|
**/
|
||||||
|
|
||||||
|
%mp_assertscope(SNAPSHOT)
|
||||||
|
%mcf_getfmttype(wrap=YES, insert_cmplib=YES)
|
||||||
|
%mp_assertscope(COMPARE,ignorelist=SASJS_FUNCTIONS)
|
||||||
|
|
||||||
|
%mp_assert(
|
||||||
|
iftrue=(%sysfunc(mcf_getfmttype(DATE9.))=DATE),
|
||||||
|
desc=Check DATE format
|
||||||
|
)
|
||||||
|
%mp_assert(
|
||||||
|
iftrue=(%sysfunc(mcf_getfmttype($6))=CHAR),
|
||||||
|
desc=Check CHAR format
|
||||||
|
)
|
||||||
|
%mp_assert(
|
||||||
|
iftrue=(%sysfunc(mcf_getfmttype(8.))=NUM),
|
||||||
|
desc=Check NUM format
|
||||||
|
)
|
||||||
|
%mp_assert(
|
||||||
|
iftrue=(%sysfunc(mcf_getfmttype(E8601DT))=DATETIME),
|
||||||
|
desc=Check DATETIME format
|
||||||
|
)
|
||||||
|
|
||||||
|
/* test 2 - compile again test for warnings */
|
||||||
|
%mcf_getfmttype(wrap=YES, insert_cmplib=YES)
|
||||||
|
|
||||||
|
%mp_assert(
|
||||||
|
iftrue=(&syscc=0),
|
||||||
|
desc=Check syscc=0 after re-initialisation
|
||||||
|
)
|
||||||
@@ -308,7 +308,7 @@ data _null_;
|
|||||||
put ' %put &sysmacroname: Switching to DATASTEP engine; ';
|
put ' %put &sysmacroname: Switching to DATASTEP engine; ';
|
||||||
put ' %goto datastep; ';
|
put ' %goto datastep; ';
|
||||||
put ' %end; ';
|
put ' %end; ';
|
||||||
put ' data &tempds /view=&tempds;set &ds; ';
|
put ' data &tempds;set &ds; ';
|
||||||
put ' %if &fmt=N %then format _numeric_ best32.;; ';
|
put ' %if &fmt=N %then format _numeric_ best32.;; ';
|
||||||
put ' /* PRETTY is necessary to avoid line truncation in large files */ ';
|
put ' /* PRETTY is necessary to avoid line truncation in large files */ ';
|
||||||
put ' proc json out=&jref pretty ';
|
put ' proc json out=&jref pretty ';
|
||||||
@@ -359,7 +359,7 @@ data _null_;
|
|||||||
put ' %end; ';
|
put ' %end; ';
|
||||||
put ' other = [best.]; ';
|
put ' other = [best.]; ';
|
||||||
put ' ';
|
put ' ';
|
||||||
put ' data &tempds/view=&tempds; ';
|
put ' data &tempds; ';
|
||||||
put ' attrib _all_ label=''''; ';
|
put ' attrib _all_ label=''''; ';
|
||||||
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; ';
|
||||||
@@ -421,8 +421,7 @@ data _null_;
|
|||||||
put ' %end; ';
|
put ' %end; ';
|
||||||
put ' ';
|
put ' ';
|
||||||
put ' proc sql; ';
|
put ' proc sql; ';
|
||||||
put ' drop view &tempds; ';
|
put ' drop table &colinfo, &tempds; ';
|
||||||
put ' drop table &colinfo; ';
|
|
||||||
put ' ';
|
put ' ';
|
||||||
put ' %if &showmeta=YES %then %do; ';
|
put ' %if &showmeta=YES %then %do; ';
|
||||||
put ' data _null_; file &jref encoding=''utf-8'' mod; ';
|
put ' data _null_; file &jref encoding=''utf-8'' mod; ';
|
||||||
|
|||||||
Reference in New Issue
Block a user