|
|
|
|
@@ -43,13 +43,14 @@
|
|
|
|
|
* [`%QzipEvalf()` macro](#qzipevalf-macro)
|
|
|
|
|
* [`%functionExists()` macro](#functionexists-macro)
|
|
|
|
|
* [`%RainCloudPlot()` macro](#raincloudplot-macro)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
* [`%zipLibrary()` macro](#ziplibrary-macro)
|
|
|
|
|
* [`%unzipLibrary()` macro](#unziplibrary-macro)
|
|
|
|
|
|
|
|
|
|
* [License](#license)
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
# The BasePlus package [ver. 0.994] <a name="baseplus-package"></a> ###############################################
|
|
|
|
|
# The BasePlus package [ver. 1.1] <a name="baseplus-package"></a> ###############################################
|
|
|
|
|
|
|
|
|
|
The **BasePlus** package implements useful
|
|
|
|
|
functions and functionalities I miss in the BASE SAS.
|
|
|
|
|
@@ -65,7 +66,8 @@ Kudos to all who inspired me to generate this package:
|
|
|
|
|
*Paul Dorfman*,
|
|
|
|
|
*Richard DeVenezia*,
|
|
|
|
|
*Christian Graffeuille*,
|
|
|
|
|
*Allan Bowe*.
|
|
|
|
|
*Allan Bowe*,
|
|
|
|
|
*Anamaria Calai*.
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
@@ -168,7 +170,7 @@ Kudos to all who inspired me to generate this package:
|
|
|
|
|
run;
|
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
|
|
|
|
|
|
**Example 7**: Deduplicate values from a space separated list.
|
|
|
|
|
**Example 7**: De-duplicate values from a space separated list.
|
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas
|
|
|
|
|
%let list = 4 5 6 1 2 3 1 2 3 4 5 6;
|
|
|
|
|
%put *%dedupListS(&list.)*;
|
|
|
|
|
@@ -187,6 +189,15 @@ Kudos to all who inspired me to generate this package:
|
|
|
|
|
|
|
|
|
|

|
|
|
|
|
|
|
|
|
|
**Example 10**: Zip SAS library.
|
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas
|
|
|
|
|
%zipLibrary(sashelp, libOut=work)
|
|
|
|
|
|
|
|
|
|
%unzipLibrary(%sysfunc(pathname(work)), zip=sashelp, mode=S, clean=1)
|
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
@@ -202,44 +213,46 @@ Package contains:
|
|
|
|
|
9. macro qzipevalf
|
|
|
|
|
10. macro raincloudplot
|
|
|
|
|
11. macro symdelglobal
|
|
|
|
|
12. macro zipevalf
|
|
|
|
|
13. format bool
|
|
|
|
|
14. format boolz
|
|
|
|
|
15. format ceil
|
|
|
|
|
16. format floor
|
|
|
|
|
17. format int
|
|
|
|
|
18. functions arrfill
|
|
|
|
|
19. functions arrfillc
|
|
|
|
|
20. functions arrmissfill
|
|
|
|
|
21. functions arrmissfillc
|
|
|
|
|
22. functions arrmisstoleft
|
|
|
|
|
23. functions arrmisstoleftc
|
|
|
|
|
24. functions arrmisstoright
|
|
|
|
|
25. functions arrmisstorightc
|
|
|
|
|
26. functions bracketsc
|
|
|
|
|
27. functions bracketsn
|
|
|
|
|
28. functions catxfc
|
|
|
|
|
29. functions catxfi
|
|
|
|
|
30. functions catxfj
|
|
|
|
|
31. functions catxfn
|
|
|
|
|
32. functions deldataset
|
|
|
|
|
33. functions semicolonc
|
|
|
|
|
34. functions semicolonn
|
|
|
|
|
35. format brackets
|
|
|
|
|
36. format semicolon
|
|
|
|
|
37. proto qsortincbyprocproto
|
|
|
|
|
38. functions frommissingtonumberbs
|
|
|
|
|
39. functions fromnumbertomissing
|
|
|
|
|
40. functions quicksort4notmiss
|
|
|
|
|
41. functions quicksorthash
|
|
|
|
|
42. functions quicksorthashsddv
|
|
|
|
|
43. functions quicksortlight
|
|
|
|
|
12. macro unziplibrary
|
|
|
|
|
13. macro zipevalf
|
|
|
|
|
14. macro ziplibrary
|
|
|
|
|
15. format bool
|
|
|
|
|
16. format boolz
|
|
|
|
|
17. format ceil
|
|
|
|
|
18. format floor
|
|
|
|
|
19. format int
|
|
|
|
|
20. functions arrfill
|
|
|
|
|
21. functions arrfillc
|
|
|
|
|
22. functions arrmissfill
|
|
|
|
|
23. functions arrmissfillc
|
|
|
|
|
24. functions arrmisstoleft
|
|
|
|
|
25. functions arrmisstoleftc
|
|
|
|
|
26. functions arrmisstoright
|
|
|
|
|
27. functions arrmisstorightc
|
|
|
|
|
28. functions bracketsc
|
|
|
|
|
29. functions bracketsn
|
|
|
|
|
30. functions catxfc
|
|
|
|
|
31. functions catxfi
|
|
|
|
|
32. functions catxfj
|
|
|
|
|
33. functions catxfn
|
|
|
|
|
34. functions deldataset
|
|
|
|
|
35. functions semicolonc
|
|
|
|
|
36. functions semicolonn
|
|
|
|
|
37. format brackets
|
|
|
|
|
38. format semicolon
|
|
|
|
|
39. proto qsortincbyprocproto
|
|
|
|
|
40. functions frommissingtonumberbs
|
|
|
|
|
41. functions fromnumbertomissing
|
|
|
|
|
42. functions quicksort4notmiss
|
|
|
|
|
43. functions quicksorthash
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
*SAS package generated by generatePackage, version 20211111*
|
|
|
|
|
|
|
|
|
|
The SHA256 hash digest for package BasePlus:
|
|
|
|
|
`B34E352EC52E05B8BBE1816E6104F47677CBFDEAF7CD71B8BF04FDBFA01B0EF0`
|
|
|
|
|
`319109732B5CBD99ADDA6D48EA26DA5236622F9C5D332F94EF282F1C9DCE73F9`
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
# Content description ############################################################################################
|
|
|
|
|
@@ -3254,6 +3267,233 @@ The output:
|
|
|
|
|

|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
## >>> `%zipLibrary()` macro: <<< <a name="ziplibrary-macro"></a> #######################
|
|
|
|
|
|
|
|
|
|
The zipLibrary() macro allows to zip content of a SAS library.
|
|
|
|
|
|
|
|
|
|
Files can be zipped into a single file (named as the input library)
|
|
|
|
|
or into multiple files (named as "dataset.sas7bdat.zip").
|
|
|
|
|
If a file is indexed also the index file is zipped.
|
|
|
|
|
|
|
|
|
|
Source files can be deleted after compression.
|
|
|
|
|
|
|
|
|
|
Status of compression and processing time is reported.
|
|
|
|
|
|
|
|
|
|
See examples below for the details.
|
|
|
|
|
|
|
|
|
|
### SYNTAX: ###################################################################
|
|
|
|
|
|
|
|
|
|
The basic syntax is the following, the `<...>` means optional parameters:
|
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~sas
|
|
|
|
|
%zipLibrary(
|
|
|
|
|
lib
|
|
|
|
|
<,mode=>
|
|
|
|
|
<,clean=>
|
|
|
|
|
<,libOut=>
|
|
|
|
|
<,compression=>
|
|
|
|
|
)
|
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
|
|
|
|
|
|
**Arguments description**:
|
|
|
|
|
|
|
|
|
|
1. `lib` - *Required*, a name of the library to be zipped.
|
|
|
|
|
Must be a valid SAS V7, V8, or V9 library.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
* `mode = S` - *Optional*, default value is `S`,
|
|
|
|
|
indicates mode of compression
|
|
|
|
|
generates single zip file (`SINGLE/S`)
|
|
|
|
|
or multiple files (`MULTI/M`)
|
|
|
|
|
|
|
|
|
|
* `clean = 0` - *Optional*, default value is `0`,
|
|
|
|
|
should datasets be deleted after zipping?
|
|
|
|
|
`1` means *yes*, `0` means *no*.
|
|
|
|
|
|
|
|
|
|
* `libOut =` - *Optional*, default value is empty,
|
|
|
|
|
output library for a single zip file.
|
|
|
|
|
|
|
|
|
|
* `compression =` - *Optional*, default value is `6`,
|
|
|
|
|
specifies the compression level
|
|
|
|
|
`0` to `9`, where `0` is no compression
|
|
|
|
|
and `9` is maximum compression.
|
|
|
|
|
|
|
|
|
|
### EXAMPLES AND USECASES: ####################################################
|
|
|
|
|
|
|
|
|
|
**EXAMPLE 1.** Generate data:
|
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas
|
|
|
|
|
|
|
|
|
|
options dlcreatedir;
|
|
|
|
|
libname test1 "%sysfunc(pathname(work))/test1";
|
|
|
|
|
libname test2 "%sysfunc(pathname(work))/test2";
|
|
|
|
|
libname test3 (test1 test2);
|
|
|
|
|
libname test4 "%sysfunc(pathname(work))/test4";
|
|
|
|
|
options nodlcreatedir;
|
|
|
|
|
|
|
|
|
|
%put %sysfunc(pathname(test3));
|
|
|
|
|
%put %sysfunc(pathname(test4));
|
|
|
|
|
|
|
|
|
|
data
|
|
|
|
|
test1.A(index=(model))
|
|
|
|
|
test1.B
|
|
|
|
|
test2.C
|
|
|
|
|
test2.D(index=(model make io=(invoice origin)))
|
|
|
|
|
;
|
|
|
|
|
set sashelp.cars;
|
|
|
|
|
run;
|
|
|
|
|
|
|
|
|
|
data test1.B2 / view=test1.B2;
|
|
|
|
|
set test1.B;
|
|
|
|
|
output;
|
|
|
|
|
output;
|
|
|
|
|
run;
|
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
**EXAMPLE 2.** Zip content of test3 library
|
|
|
|
|
into the same location in one zip file:
|
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas
|
|
|
|
|
%zipLibrary(test3)
|
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
**EXAMPLE 3.** Zip content of test3 library
|
|
|
|
|
into the same location in multiple zip files:
|
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas
|
|
|
|
|
%zipLibrary(test3, mode=MULTI)
|
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
**EXAMPLE 4.** Zip content of test3 library
|
|
|
|
|
with maximum compression level
|
|
|
|
|
into different location in one zip file
|
|
|
|
|
and delete source files:
|
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas
|
|
|
|
|
%zipLibrary(test3, clean=1, libOut=test4, compression=9)
|
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
## >>> `%unzipLibrary()` macro: <<< <a name="unziplibrary-macro"></a> #######################
|
|
|
|
|
|
|
|
|
|
The unzipLibrary() macro allows to unzip content of a SAS library.
|
|
|
|
|
It is a *counterpart* to the `%zipLibrary()` macro and is *not* intended to work
|
|
|
|
|
with zip files generated by other software (though it may in some cases).
|
|
|
|
|
|
|
|
|
|
Files can be unzipped from a single file
|
|
|
|
|
or from multiple files (named e.g. "dataset.sas7bdat.zip").
|
|
|
|
|
If a file is indexed also the index file is unzipped.
|
|
|
|
|
|
|
|
|
|
Source files can be deleted after decompression.
|
|
|
|
|
|
|
|
|
|
Status of decompression and processing time is reported.
|
|
|
|
|
|
|
|
|
|
See examples below for the details.
|
|
|
|
|
|
|
|
|
|
### SYNTAX: ###################################################################
|
|
|
|
|
|
|
|
|
|
The basic syntax is the following, the `<...>` means optional parameters:
|
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~sas
|
|
|
|
|
%unzipLibrary(
|
|
|
|
|
path
|
|
|
|
|
<,zip=>
|
|
|
|
|
<,mode=>
|
|
|
|
|
<,clean=>
|
|
|
|
|
<,libOut=>
|
|
|
|
|
)
|
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
|
|
|
|
|
|
**Arguments description**:
|
|
|
|
|
|
|
|
|
|
1. `path` - *Required*, a path pointing to zipped file(s) location.
|
|
|
|
|
|
|
|
|
|
* `zip =` - *Optional*, When `mode=S` a name of the
|
|
|
|
|
zip file containing SAS files to be unzipped.
|
|
|
|
|
|
|
|
|
|
* `mode = S` - *Optional*, default value is `S`,
|
|
|
|
|
indicates mode of decompression
|
|
|
|
|
read from a single zip file (`SINGLE/S`)
|
|
|
|
|
or from multiple files (`MULTI/M`)
|
|
|
|
|
|
|
|
|
|
* `clean = 0` - *Optional*, default value is `0`,
|
|
|
|
|
should zip files be deleted after unzipping?
|
|
|
|
|
`1` means *yes*, `0` means *no*.
|
|
|
|
|
|
|
|
|
|
* `libOut =` - *Optional*, default value is empty,
|
|
|
|
|
output library for a single zip file
|
|
|
|
|
decompression.
|
|
|
|
|
|
|
|
|
|
### EXAMPLES AND USECASES: ####################################################
|
|
|
|
|
|
|
|
|
|
**EXAMPLE 1.** Generate data:
|
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas
|
|
|
|
|
|
|
|
|
|
options dlcreatedir;
|
|
|
|
|
libname test1 "%sysfunc(pathname(work))/test1";
|
|
|
|
|
libname test2 "%sysfunc(pathname(work))/test2";
|
|
|
|
|
libname test3 (test1 test2);
|
|
|
|
|
libname test4 "%sysfunc(pathname(work))/test4";
|
|
|
|
|
options nodlcreatedir;
|
|
|
|
|
|
|
|
|
|
%put %sysfunc(pathname(test3));
|
|
|
|
|
%put %sysfunc(pathname(test4));
|
|
|
|
|
|
|
|
|
|
data
|
|
|
|
|
test1.A(index=(model))
|
|
|
|
|
test1.B
|
|
|
|
|
test2.C
|
|
|
|
|
test2.D(index=(model make io=(invoice origin)))
|
|
|
|
|
;
|
|
|
|
|
set sashelp.cars;
|
|
|
|
|
run;
|
|
|
|
|
|
|
|
|
|
data test1.B2 / view=test1.B2;
|
|
|
|
|
set test1.B;
|
|
|
|
|
output;
|
|
|
|
|
output;
|
|
|
|
|
run;
|
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
**EXAMPLE 2.** Use data from Example 1.
|
|
|
|
|
First zip content of the `test3` library
|
|
|
|
|
to `test4` location into one zip file
|
|
|
|
|
and delete source files.
|
|
|
|
|
Next unzip `test3.zip` library into the
|
|
|
|
|
`test4` location and delete the zip file.
|
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas
|
|
|
|
|
%zipLibrary(test3, clean=1, libOut=test4)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
%unzipLibrary(%sysfunc(pathname(test4)), zip=test3, clean=1)
|
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
**EXAMPLE 3.** Use data from Example 1.
|
|
|
|
|
First zip content of the `test1` library
|
|
|
|
|
into multiple zip files and delete source files.
|
|
|
|
|
Next unzip `*.zip` files in `test1`
|
|
|
|
|
location and delete zipped files
|
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas
|
|
|
|
|
%zipLibrary(test1, mode=M, clean=1)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
%unzipLibrary(%sysfunc(pathname(test1)), mode=M, clean=1)
|
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
**EXAMPLE 4.** First zip content of the `sashelp` library
|
|
|
|
|
into `work` library.
|
|
|
|
|
Next unzip `sashelp.zip` file in `work`
|
|
|
|
|
location and delete zip file.
|
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas
|
|
|
|
|
%zipLibrary(sashelp, mode=S, clean=0, libOut=work)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
%unzipLibrary(%sysfunc(pathname(work)), zip=sashelp, mode=S, clean=1)
|
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
## License ####################################################################
|
|
|
|
|
|