mirror of
https://github.com/sasjs/core.git
synced 2026-01-20 06:50:06 +00:00
Compare commits
1 Commits
v4.48.4
...
all-contri
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
1db610a122 |
51
all.sas
51
all.sas
@@ -4189,8 +4189,8 @@ data &cntlout/nonote2err;
|
|||||||
end;
|
end;
|
||||||
|
|
||||||
/* create row marker. Data cannot be sorted without it! */
|
/* create row marker. Data cannot be sorted without it! */
|
||||||
if first.fmtname then fmtrow=1;
|
if first.fmtname then fmtrow=0;
|
||||||
else fmtrow+1;
|
fmtrow+1;
|
||||||
|
|
||||||
run;
|
run;
|
||||||
proc sort;
|
proc sort;
|
||||||
@@ -10153,9 +10153,6 @@ select distinct lowcase(memname)
|
|||||||
format, to prevent loss of data - UNLESS the input dataset contains a marker
|
format, to prevent loss of data - UNLESS the input dataset contains a marker
|
||||||
column, specifying that a particular row needs to be deleted (`delete_col=`).
|
column, specifying that a particular row needs to be deleted (`delete_col=`).
|
||||||
|
|
||||||
Positions of formats are made using the FMTROW variable - this must be present
|
|
||||||
and unique (on TYPE / FMTNAME / FMTROW).
|
|
||||||
|
|
||||||
This macro can also be used to identify which records would be (or were)
|
This macro can also be used to identify which records would be (or were)
|
||||||
considered new, modified or deleted (`loadtarget=`) by creating the following
|
considered new, modified or deleted (`loadtarget=`) by creating the following
|
||||||
tables:
|
tables:
|
||||||
@@ -10164,7 +10161,7 @@ select distinct lowcase(memname)
|
|||||||
@li work.outds_del
|
@li work.outds_del
|
||||||
@li work.outds_mod
|
@li work.outds_mod
|
||||||
|
|
||||||
For example usage, see test (under Related Macros)
|
For example usage, see mp_loadformat.test.sas
|
||||||
|
|
||||||
@param [in] libcat The format catalog to be loaded
|
@param [in] libcat The format catalog to be loaded
|
||||||
@param [in] libds The staging table to load
|
@param [in] libds The staging table to load
|
||||||
@@ -10181,8 +10178,6 @@ select distinct lowcase(memname)
|
|||||||
@param [in] mdebug= (0) Set to 1 to enable DEBUG messages and preserve outputs
|
@param [in] mdebug= (0) Set to 1 to enable DEBUG messages and preserve outputs
|
||||||
|
|
||||||
<h4> SAS Macros </h4>
|
<h4> SAS Macros </h4>
|
||||||
@li mf_existds.sas
|
|
||||||
@li mf_existvar.sas
|
|
||||||
@li mf_getuniquename.sas
|
@li mf_getuniquename.sas
|
||||||
@li mf_nobs.sas
|
@li mf_nobs.sas
|
||||||
@li mp_abort.sas
|
@li mp_abort.sas
|
||||||
@@ -10233,16 +10228,6 @@ select distinct lowcase(memname)
|
|||||||
%let libcat=%scan(&libcat,1,-);
|
%let libcat=%scan(&libcat,1,-);
|
||||||
|
|
||||||
/* perform input validations */
|
/* perform input validations */
|
||||||
%mp_abort(
|
|
||||||
iftrue=(%mf_existds(&libds)=0)
|
|
||||||
,mac=&sysmacroname
|
|
||||||
,msg=%str(&libds could not be found)
|
|
||||||
)
|
|
||||||
%mp_abort(
|
|
||||||
iftrue=(%mf_existvar(&libds,FMTROW)=0)
|
|
||||||
,mac=&sysmacroname
|
|
||||||
,msg=%str(FMTROW not found in &libds)
|
|
||||||
)
|
|
||||||
%let err=0;
|
%let err=0;
|
||||||
%let msg=0;
|
%let msg=0;
|
||||||
data _null_;
|
data _null_;
|
||||||
@@ -10263,6 +10248,13 @@ data _null_;
|
|||||||
stop;
|
stop;
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
else if name='LIBDS' then do;
|
||||||
|
if exist(value) le 0 then do;
|
||||||
|
call symputx('msg',"Unable to open staging table: "!!value);
|
||||||
|
call symputx('err',1);
|
||||||
|
stop;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
else if (name=:'OUTDS' or name in ('DELETE_COL','LOCKLIBDS','AUDITLIBDS'))
|
else if (name=:'OUTDS' or name in ('DELETE_COL','LOCKLIBDS','AUDITLIBDS'))
|
||||||
and missing(value) then do;
|
and missing(value) then do;
|
||||||
call symputx('msg',"missing value in var: "!!name);
|
call symputx('msg',"missing value in var: "!!name);
|
||||||
@@ -10270,14 +10262,6 @@ data _null_;
|
|||||||
stop;
|
stop;
|
||||||
end;
|
end;
|
||||||
run;
|
run;
|
||||||
data _null_;
|
|
||||||
set &libds;
|
|
||||||
if missing(fmtrow) then do;
|
|
||||||
call symputx('msg',"missing fmtrow in format: "!!FMTNAME);
|
|
||||||
call symputx('err',1);
|
|
||||||
stop;
|
|
||||||
end;
|
|
||||||
run;
|
|
||||||
|
|
||||||
%mp_abort(
|
%mp_abort(
|
||||||
iftrue=(&err ne 0)
|
iftrue=(&err ne 0)
|
||||||
@@ -10285,15 +10269,6 @@ run;
|
|||||||
,msg=%str(&msg)
|
,msg=%str(&msg)
|
||||||
)
|
)
|
||||||
|
|
||||||
%local cnt;
|
|
||||||
proc sql noprint;
|
|
||||||
select count(distinct catx('|',type,fmtname,fmtrow)) into: cnt from &libds;
|
|
||||||
%mp_abort(
|
|
||||||
iftrue=(&cnt ne %mf_nobs(&libds))
|
|
||||||
,mac=&sysmacroname
|
|
||||||
,msg=%str(Non-unique primary key on &libds)
|
|
||||||
)
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* First, extract only relevant formats from the catalog
|
* First, extract only relevant formats from the catalog
|
||||||
*/
|
*/
|
||||||
@@ -10347,6 +10322,12 @@ data &inlibds/nonote2err;
|
|||||||
%mp_aligndecimal(end,width=16)
|
%mp_aligndecimal(end,width=16)
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
/* update row marker - retain new var as fmtrow may already be in libds */
|
||||||
|
if first.fmtname then row=1;
|
||||||
|
else row+1;
|
||||||
|
drop row;
|
||||||
|
fmtrow=row;
|
||||||
|
|
||||||
fmthash=%mp_md5(cvars=&cvars, nvars=&nvars);
|
fmthash=%mp_md5(cvars=&cvars, nvars=&nvars);
|
||||||
run;
|
run;
|
||||||
|
|
||||||
|
|||||||
@@ -79,8 +79,8 @@ data &cntlout/nonote2err;
|
|||||||
end;
|
end;
|
||||||
|
|
||||||
/* create row marker. Data cannot be sorted without it! */
|
/* create row marker. Data cannot be sorted without it! */
|
||||||
if first.fmtname then fmtrow=1;
|
if first.fmtname then fmtrow=0;
|
||||||
else fmtrow+1;
|
fmtrow+1;
|
||||||
|
|
||||||
run;
|
run;
|
||||||
proc sort;
|
proc sort;
|
||||||
|
|||||||
@@ -9,9 +9,6 @@
|
|||||||
format, to prevent loss of data - UNLESS the input dataset contains a marker
|
format, to prevent loss of data - UNLESS the input dataset contains a marker
|
||||||
column, specifying that a particular row needs to be deleted (`delete_col=`).
|
column, specifying that a particular row needs to be deleted (`delete_col=`).
|
||||||
|
|
||||||
Positions of formats are made using the FMTROW variable - this must be present
|
|
||||||
and unique (on TYPE / FMTNAME / FMTROW).
|
|
||||||
|
|
||||||
This macro can also be used to identify which records would be (or were)
|
This macro can also be used to identify which records would be (or were)
|
||||||
considered new, modified or deleted (`loadtarget=`) by creating the following
|
considered new, modified or deleted (`loadtarget=`) by creating the following
|
||||||
tables:
|
tables:
|
||||||
@@ -20,7 +17,7 @@
|
|||||||
@li work.outds_del
|
@li work.outds_del
|
||||||
@li work.outds_mod
|
@li work.outds_mod
|
||||||
|
|
||||||
For example usage, see test (under Related Macros)
|
For example usage, see mp_loadformat.test.sas
|
||||||
|
|
||||||
@param [in] libcat The format catalog to be loaded
|
@param [in] libcat The format catalog to be loaded
|
||||||
@param [in] libds The staging table to load
|
@param [in] libds The staging table to load
|
||||||
@@ -37,8 +34,6 @@
|
|||||||
@param [in] mdebug= (0) Set to 1 to enable DEBUG messages and preserve outputs
|
@param [in] mdebug= (0) Set to 1 to enable DEBUG messages and preserve outputs
|
||||||
|
|
||||||
<h4> SAS Macros </h4>
|
<h4> SAS Macros </h4>
|
||||||
@li mf_existds.sas
|
|
||||||
@li mf_existvar.sas
|
|
||||||
@li mf_getuniquename.sas
|
@li mf_getuniquename.sas
|
||||||
@li mf_nobs.sas
|
@li mf_nobs.sas
|
||||||
@li mp_abort.sas
|
@li mp_abort.sas
|
||||||
@@ -89,16 +84,6 @@
|
|||||||
%let libcat=%scan(&libcat,1,-);
|
%let libcat=%scan(&libcat,1,-);
|
||||||
|
|
||||||
/* perform input validations */
|
/* perform input validations */
|
||||||
%mp_abort(
|
|
||||||
iftrue=(%mf_existds(&libds)=0)
|
|
||||||
,mac=&sysmacroname
|
|
||||||
,msg=%str(&libds could not be found)
|
|
||||||
)
|
|
||||||
%mp_abort(
|
|
||||||
iftrue=(%mf_existvar(&libds,FMTROW)=0)
|
|
||||||
,mac=&sysmacroname
|
|
||||||
,msg=%str(FMTROW not found in &libds)
|
|
||||||
)
|
|
||||||
%let err=0;
|
%let err=0;
|
||||||
%let msg=0;
|
%let msg=0;
|
||||||
data _null_;
|
data _null_;
|
||||||
@@ -119,6 +104,13 @@ data _null_;
|
|||||||
stop;
|
stop;
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
else if name='LIBDS' then do;
|
||||||
|
if exist(value) le 0 then do;
|
||||||
|
call symputx('msg',"Unable to open staging table: "!!value);
|
||||||
|
call symputx('err',1);
|
||||||
|
stop;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
else if (name=:'OUTDS' or name in ('DELETE_COL','LOCKLIBDS','AUDITLIBDS'))
|
else if (name=:'OUTDS' or name in ('DELETE_COL','LOCKLIBDS','AUDITLIBDS'))
|
||||||
and missing(value) then do;
|
and missing(value) then do;
|
||||||
call symputx('msg',"missing value in var: "!!name);
|
call symputx('msg',"missing value in var: "!!name);
|
||||||
@@ -126,14 +118,6 @@ data _null_;
|
|||||||
stop;
|
stop;
|
||||||
end;
|
end;
|
||||||
run;
|
run;
|
||||||
data _null_;
|
|
||||||
set &libds;
|
|
||||||
if missing(fmtrow) then do;
|
|
||||||
call symputx('msg',"missing fmtrow in format: "!!FMTNAME);
|
|
||||||
call symputx('err',1);
|
|
||||||
stop;
|
|
||||||
end;
|
|
||||||
run;
|
|
||||||
|
|
||||||
%mp_abort(
|
%mp_abort(
|
||||||
iftrue=(&err ne 0)
|
iftrue=(&err ne 0)
|
||||||
@@ -141,15 +125,6 @@ run;
|
|||||||
,msg=%str(&msg)
|
,msg=%str(&msg)
|
||||||
)
|
)
|
||||||
|
|
||||||
%local cnt;
|
|
||||||
proc sql noprint;
|
|
||||||
select count(distinct catx('|',type,fmtname,fmtrow)) into: cnt from &libds;
|
|
||||||
%mp_abort(
|
|
||||||
iftrue=(&cnt ne %mf_nobs(&libds))
|
|
||||||
,mac=&sysmacroname
|
|
||||||
,msg=%str(Non-unique primary key on &libds)
|
|
||||||
)
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* First, extract only relevant formats from the catalog
|
* First, extract only relevant formats from the catalog
|
||||||
*/
|
*/
|
||||||
@@ -203,6 +178,12 @@ data &inlibds/nonote2err;
|
|||||||
%mp_aligndecimal(end,width=16)
|
%mp_aligndecimal(end,width=16)
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
/* update row marker - retain new var as fmtrow may already be in libds */
|
||||||
|
if first.fmtname then row=1;
|
||||||
|
else row+1;
|
||||||
|
drop row;
|
||||||
|
fmtrow=row;
|
||||||
|
|
||||||
fmthash=%mp_md5(cvars=&cvars, nvars=&nvars);
|
fmthash=%mp_md5(cvars=&cvars, nvars=&nvars);
|
||||||
run;
|
run;
|
||||||
|
|
||||||
|
|||||||
@@ -67,7 +67,7 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "server",
|
"name": "server",
|
||||||
"serverUrl": "https://sas.4gl.io",
|
"serverUrl": "https://sas9.4gl.io",
|
||||||
"serverType": "SASJS",
|
"serverType": "SASJS",
|
||||||
"httpsAgentOptions": {
|
"httpsAgentOptions": {
|
||||||
"allowInsecureRequests": false
|
"allowInsecureRequests": false
|
||||||
|
|||||||
@@ -189,10 +189,8 @@ data work.stagedata3;
|
|||||||
if last.fmtname then do;
|
if last.fmtname then do;
|
||||||
output; /* 6 new records */
|
output; /* 6 new records */
|
||||||
x=_n_;
|
x=_n_;
|
||||||
x+1;start=cats("mod",x);end=start;label='newlabel1';fmtrow=fmtrow+1;
|
x+1;start=cats("mod",x);end=start;label='newlabel1';output;
|
||||||
output;
|
x+1;start=cats("mod",x);end=start;label='newlabel2';output;
|
||||||
x+1;start=cats("mod",x);end=start;label='newlabel2';fmtrow=fmtrow+2;
|
|
||||||
output;
|
|
||||||
end;
|
end;
|
||||||
else if fmtrow le 3 then do; /* 9 more changed values */
|
else if fmtrow le 3 then do; /* 9 more changed values */
|
||||||
start= cats("mod",_n_);
|
start= cats("mod",_n_);
|
||||||
|
|||||||
@@ -58,9 +58,6 @@ proc format library=&cat1;
|
|||||||
value agemlb (multilabel)
|
value agemlb (multilabel)
|
||||||
19-120='Adults'
|
19-120='Adults'
|
||||||
1-18='Children'
|
1-18='Children'
|
||||||
0-1='Preschool'
|
|
||||||
1-2='Preschool'
|
|
||||||
2-3='Preschool'
|
|
||||||
1-4='Preschool';
|
1-4='Preschool';
|
||||||
value agemlc (multilabel notsorted)
|
value agemlc (multilabel notsorted)
|
||||||
19-120='Adults'
|
19-120='Adults'
|
||||||
@@ -70,19 +67,16 @@ run;
|
|||||||
|
|
||||||
%mp_cntlout(libcat=&cat1,cntlout=work.cntlout1)
|
%mp_cntlout(libcat=&cat1,cntlout=work.cntlout1)
|
||||||
%mp_assertdsobs(work.cntlout1,
|
%mp_assertdsobs(work.cntlout1,
|
||||||
desc=Has 19 records,
|
desc=Has 16 records,
|
||||||
test=EQUALS 19
|
test=EQUALS 16
|
||||||
)
|
)
|
||||||
|
|
||||||
data work.stagedata3;
|
data work.stagedata3;
|
||||||
set work.cntlout1;
|
set work.cntlout1;
|
||||||
if fmtname='AGEMLA' and label ne 'Preschool' then deleteme='Yes';
|
if fmtname='AGEMLA' and label ne 'Preschool' then deleteme='Yes';
|
||||||
if fmtname='AGEMLB' and label = 'Preschool' then label='Kids';
|
if fmtname='AGEMLB' and label = 'Preschool' then label='Kids';
|
||||||
if fmtname='GENDERML' and label='Farmale' then do;
|
if fmtname='GENDERML' and label='Farmale' then output;
|
||||||
output;
|
output;
|
||||||
fmtrow=101; output;
|
|
||||||
end;
|
|
||||||
else output;
|
|
||||||
run;
|
run;
|
||||||
|
|
||||||
|
|
||||||
@@ -119,17 +113,14 @@ run;
|
|||||||
|
|
||||||
%let check1=0;
|
%let check1=0;
|
||||||
%let check2=0;
|
%let check2=0;
|
||||||
%let check3=0;
|
|
||||||
data test;
|
data test;
|
||||||
set work.cntlout2;
|
set work.cntlout2;
|
||||||
where fmtname='GENDERML';
|
where fmtname='GENDERML';
|
||||||
putlog fmtrow= label=;
|
|
||||||
if _n_=4 and label='Farmale' then call symputx('check1',1);
|
if _n_=4 and label='Farmale' then call symputx('check1',1);
|
||||||
if _n_=5 and label ne 'Farmale' then call symputx('check2',1);
|
if _n_=5 and label='Farmale' then call symputx('check2',1);
|
||||||
if _n_=8 and label = 'Farmale' then call symputx('check3',1);
|
|
||||||
run;
|
run;
|
||||||
%mp_assert(
|
%mp_assert(
|
||||||
iftrue=(&check1=1 and &check2=1 and &check3=1),
|
iftrue=(&check1=1 and &check2=1),
|
||||||
desc=Ensuring Farmale values retain their order,
|
desc=Ensuring Farmale values retain their order,
|
||||||
outds=work.test_results
|
outds=work.test_results
|
||||||
)
|
)
|
||||||
|
|||||||
Reference in New Issue
Block a user