diff --git a/all.sas b/all.sas
index f576caf..a2193c8 100644
--- a/all.sas
+++ b/all.sas
@@ -2441,25 +2441,27 @@ run;
@brief Create a CARDS file from a SAS dataset.
@details Uses dataset attributes to convert all data into datalines.
Running the generated file will rebuild the original dataset.
- usage:
+ Usage:
%mp_ds2cards(base_ds=sashelp.class
, cards_file= "C:\temp\class.sas"
, maxobs=5)
- stuff to add
+ TODO:
- labelling the dataset
- explicity setting a unix LF
- constraints / indexes etc
- @param base_ds= Should be two level - eg work.blah. This is the table that
+ @param [in] base_ds= Should be two level - eg work.blah. This is the table that
is converted to a cards file.
- @param tgt_ds= Table that the generated cards file would create. Optional -
+ @param [in] tgt_ds= Table that the generated cards file would create. Optional -
if omitted, will be same as BASE_DS.
- @param cards_file= Location in which to write the (.sas) cards file
- @param maxobs= to limit output to the first maxobs observations
- @param showlog= whether to show generated cards file in the SAS log (YES/NO)
- @param outencoding= provide encoding value for file statement (eg utf-8)
+ @param [out] cards_file= Location in which to write the (.sas) cards file
+ @param [in] maxobs= to limit output to the first maxobs observations
+ @param [in] showlog= whether to show generated cards file in the SAS log (YES/NO)
+ @param [in] outencoding= provide encoding value for file statement (eg utf-8)
+ @param [in] append= If NO then will rebuild the cards file if it already exists,
+ otherwise will append to it. Used by the mp_lib2cards.sas macro.
@version 9.2
@@ -2472,6 +2474,7 @@ run;
,random_sample=NO
,showlog=YES
,outencoding=
+ ,append=NO
)/*/STORE SOURCE*/;
%local i setds nvars;
@@ -2484,6 +2487,8 @@ run;
%if (&tgt_ds = ) %then %let tgt_ds=&base_ds;
%if %index(&tgt_ds,.)=0 %then %let tgt_ds=WORK.%scan(&base_ds,2,.);
%if ("&outencoding" ne "") %then %let outencoding=encoding="&outencoding";
+%if ("&append" = "") %then %let append=;
+%else %let append=mod;
/* get varcount */
%let nvars=0;
@@ -2610,7 +2615,7 @@ data _null_;
run;
data _null_;
- file &cards_file. &outencoding lrecl=32767 termstr=nl;
+ file &cards_file. &outencoding lrecl=32767 termstr=nl &append;
length __attrib $32767;
if _n_=1 then do;
put '/*******************************************************************';
@@ -4013,21 +4018,26 @@ create table &outds (rename=(
%mend;/**
@file
@brief Convert all library members to CARDS files
- @details Gets list of members then calls the %mp_ds2cards()
- macro
- usage:
+ @details Gets list of members then calls the %mp_ds2cards() macro.
+ Usage:
- %mp_lib2cards(lib=sashelp
- , outloc= C:\temp )
+ %mp_lib2cards(lib=sashelp
+ , outloc= C:\temp )
+
+ The output will be one cards file in the `outloc` directory per dataset in the
+ input `lib` library. If the `outloc` directory does not exist, it is created.
maxobs observations
+ @param [in] lib= Library in which to convert all datasets
+ @param [out] outloc= Location in which to store output. Defaults to WORK
+ library. No quotes.
+ @param [out] outfile= Optional output file NAME - if provided, then will create
+ a single output file instead of one file per input table.
+ @param [in] maxobs= limit output to the first maxobs observations
@version 9.2
@author Allan Bowe
@@ -4037,6 +4047,7 @@ create table &outds (rename=(
,outloc=%sysfunc(pathname(work)) /* without trailing slash */
,maxobs=max
,random_sample=NO
+ ,outfile=0
)/*/STORE SOURCE*/;
/* Find the tables */
@@ -4048,16 +4059,28 @@ select distinct lowcase(memname)
from dictionary.tables
where upcase(libname)="%upcase(&lib)";
+/* trim trailing slash, if provided */
+%let outloc=%mf_trimstr(&outloc,/);
+%let outloc=%mf_trimstr(&outloc,\);
+
/* create the output directory */
%mf_mkdir(&outloc)
/* create the cards files */
%do x=1 %to %sysfunc(countw(&memlist));
- %let ds=%scan(&memlist,&x);
- %mp_ds2cards(base_ds=&lib..&ds
- ,cards_file="&outloc/&ds..sas"
- ,maxobs=&maxobs
- ,random_sample=&random_sample)
+ %let ds=%scan(&memlist,&x);
+ %mp_ds2cards(base_ds=&lib..&ds
+ ,maxobs=&maxobs
+ ,random_sample=&random_sample
+ %if "&outfile" ne "0" %then %do;
+ ,append=YES
+ ,cards_file="&outloc/&outfile"
+ %end;
+ %else %do;
+ ,append=NO
+ ,cards_file="&outloc/&ds..sas"
+ %end;
+ )
%end;
%mend;/**
@@ -12278,31 +12301,20 @@ filename &fname1 clear;
%mend;/**
@file mv_getgroups.sas
@brief Creates a dataset with a list of viya groups
- @details First, be sure you have an access token (which requires an app token).
-
- Using the macros here:
+ @details First, load the macros:
filename mc url
"https://raw.githubusercontent.com/sasjs/core/main/all.sas";
%inc mc;
- An administrator needs to set you up with an access code:
+ Next, execute:
- %mv_registerclient(outds=client)
+ %mv_getgroups(outds=work.groups)
- Navigate to the url from the log (opting in to the groups) and paste the
- access code below:
-
- %mv_tokenauth(inds=client,code=wKDZYTEPK6)
-
- Now we can run the macro!
-
- %mv_getgroups()
-
- @param access_token_var= The global macro variable to contain the access token
- @param grant_type= valid values are "password" or "authorization_code" (unquoted).
+ @param [in] access_token_var= The global macro variable to contain the access token
+ @param [in] grant_type= valid values are "password" or "authorization_code" (unquoted).
The default is authorization_code.
- @param outds= The library.dataset to be created that contains the list of groups
+ @param [out] outds= The library.dataset to be created that contains the list of groups
@version VIYA V.03.04
diff --git a/base/mp_ds2cards.sas b/base/mp_ds2cards.sas
index a6d15b9..b56e84a 100644
--- a/base/mp_ds2cards.sas
+++ b/base/mp_ds2cards.sas
@@ -3,25 +3,27 @@
@brief Create a CARDS file from a SAS dataset.
@details Uses dataset attributes to convert all data into datalines.
Running the generated file will rebuild the original dataset.
- usage:
+ Usage:
%mp_ds2cards(base_ds=sashelp.class
, cards_file= "C:\temp\class.sas"
, maxobs=5)
- stuff to add
+ TODO:
- labelling the dataset
- explicity setting a unix LF
- constraints / indexes etc
- @param base_ds= Should be two level - eg work.blah. This is the table that
+ @param [in] base_ds= Should be two level - eg work.blah. This is the table that
is converted to a cards file.
- @param tgt_ds= Table that the generated cards file would create. Optional -
+ @param [in] tgt_ds= Table that the generated cards file would create. Optional -
if omitted, will be same as BASE_DS.
- @param cards_file= Location in which to write the (.sas) cards file
- @param maxobs= to limit output to the first maxobs observations
- @param showlog= whether to show generated cards file in the SAS log (YES/NO)
- @param outencoding= provide encoding value for file statement (eg utf-8)
+ @param [out] cards_file= Location in which to write the (.sas) cards file
+ @param [in] maxobs= to limit output to the first maxobs observations
+ @param [in] showlog= whether to show generated cards file in the SAS log (YES/NO)
+ @param [in] outencoding= provide encoding value for file statement (eg utf-8)
+ @param [in] append= If NO then will rebuild the cards file if it already exists,
+ otherwise will append to it. Used by the mp_lib2cards.sas macro.
@version 9.2
@@ -34,6 +36,7 @@
,random_sample=NO
,showlog=YES
,outencoding=
+ ,append=NO
)/*/STORE SOURCE*/;
%local i setds nvars;
@@ -46,6 +49,8 @@
%if (&tgt_ds = ) %then %let tgt_ds=&base_ds;
%if %index(&tgt_ds,.)=0 %then %let tgt_ds=WORK.%scan(&base_ds,2,.);
%if ("&outencoding" ne "") %then %let outencoding=encoding="&outencoding";
+%if ("&append" = "") %then %let append=;
+%else %let append=mod;
/* get varcount */
%let nvars=0;
@@ -172,7 +177,7 @@ data _null_;
run;
data _null_;
- file &cards_file. &outencoding lrecl=32767 termstr=nl;
+ file &cards_file. &outencoding lrecl=32767 termstr=nl &append;
length __attrib $32767;
if _n_=1 then do;
put '/*******************************************************************';
diff --git a/base/mp_lib2cards.sas b/base/mp_lib2cards.sas
index a5e6e1e..47172d7 100644
--- a/base/mp_lib2cards.sas
+++ b/base/mp_lib2cards.sas
@@ -1,21 +1,26 @@
/**
@file
@brief Convert all library members to CARDS files
- @details Gets list of members then calls the %mp_ds2cards()
- macro
- usage:
+ @details Gets list of members then calls the %mp_ds2cards() macro.
+ Usage:
- %mp_lib2cards(lib=sashelp
- , outloc= C:\temp )
+ %mp_lib2cards(lib=sashelp
+ , outloc= C:\temp )
+
+ The output will be one cards file in the `outloc` directory per dataset in the
+ input `lib` library. If the `outloc` directory does not exist, it is created.
maxobs observations
+ @param [in] lib= Library in which to convert all datasets
+ @param [out] outloc= Location in which to store output. Defaults to WORK
+ library. No quotes.
+ @param [out] outfile= Optional output file NAME - if provided, then will create
+ a single output file instead of one file per input table.
+ @param [in] maxobs= limit output to the first maxobs observations
@version 9.2
@author Allan Bowe
@@ -25,6 +30,7 @@
,outloc=%sysfunc(pathname(work)) /* without trailing slash */
,maxobs=max
,random_sample=NO
+ ,outfile=0
)/*/STORE SOURCE*/;
/* Find the tables */
@@ -36,16 +42,28 @@ select distinct lowcase(memname)
from dictionary.tables
where upcase(libname)="%upcase(&lib)";
+/* trim trailing slash, if provided */
+%let outloc=%mf_trimstr(&outloc,/);
+%let outloc=%mf_trimstr(&outloc,\);
+
/* create the output directory */
%mf_mkdir(&outloc)
/* create the cards files */
%do x=1 %to %sysfunc(countw(&memlist));
- %let ds=%scan(&memlist,&x);
- %mp_ds2cards(base_ds=&lib..&ds
- ,cards_file="&outloc/&ds..sas"
- ,maxobs=&maxobs
- ,random_sample=&random_sample)
+ %let ds=%scan(&memlist,&x);
+ %mp_ds2cards(base_ds=&lib..&ds
+ ,maxobs=&maxobs
+ ,random_sample=&random_sample
+ %if "&outfile" ne "0" %then %do;
+ ,append=YES
+ ,cards_file="&outloc/&outfile"
+ %end;
+ %else %do;
+ ,append=NO
+ ,cards_file="&outloc/&ds..sas"
+ %end;
+ )
%end;
%mend;
\ No newline at end of file