diff --git a/README.md b/README.md
index de0ff7a..d303532 100644
--- a/README.md
+++ b/README.md
@@ -146,7 +146,7 @@ SHA256 digest for macroArray: 9FE227EF3144431B51063D599148BDD8873509D1B32F1AC297
[Documentation for macroArray](https://github.com/yabwon/SAS_PACKAGES/blob/main/packages/macroarray.md "Documentation for macroArray")
-- **BasePlus**\[1.0\] adds a bunch of functionalities I am missing in BASE SAS, such as:
+- **BasePlus**\[1.1\] adds a bunch of functionalities I am missing in BASE SAS, such as:
```sas
call arrMissToRight(myArray);
call arrFillMiss(17, myArray);
@@ -164,7 +164,7 @@ format x bool.;
%zipLibrary(sashelp,libOut=work)
```
-SHA256 digest for BasePlus: 4EDB786B9D6F6D6C5741B5CAC1CB169DD10D8196600B2CB385DDE479A54F0FA3
+SHA256 digest for BasePlus: 319109732B5CBD99ADDA6D48EA26DA5236622F9C5D332F94EF282F1C9DCE73F9
[Documentation for BasePlus](https://github.com/yabwon/SAS_PACKAGES/blob/main/packages/baseplus.md "Documentation for BasePlus")
diff --git a/packages/README.md b/packages/README.md
index da57acd..d55f96b 100644
--- a/packages/README.md
+++ b/packages/README.md
@@ -90,7 +90,7 @@ SHA256 digest for macroArray: 70032D27081A0EE15BC82B8F14D2A61700FA7C1F0D88B4DB51
---
-- **BasePlus**\[1.0\] adds a bunch of functionalities I am missing in BASE SAS, such as:
+- **BasePlus**\[1.1\] adds a bunch of functionalities I am missing in BASE SAS, such as:
```sas
call arrMissToRight(myArray);
call arrFillMiss(17, myArray);
@@ -108,7 +108,7 @@ format x bool.;
%zipLibrary(sashelp,libOut=work)
```
-SHA256 digest for BasePlus: 4EDB786B9D6F6D6C5741B5CAC1CB169DD10D8196600B2CB385DDE479A54F0FA3
+SHA256 digest for BasePlus: 319109732B5CBD99ADDA6D48EA26DA5236622F9C5D332F94EF282F1C9DCE73F9
[Documentation for BasePlus](https://github.com/yabwon/SAS_PACKAGES/blob/main/packages/baseplus.md "Documentation for BasePlus")
diff --git a/packages/SHA256_for_packages.txt b/packages/SHA256_for_packages.txt
index 18bebfb..0921aa9 100644
--- a/packages/SHA256_for_packages.txt
+++ b/packages/SHA256_for_packages.txt
@@ -1,3 +1,6 @@
+/* 20211114 */
+BasePlus: 319109732B5CBD99ADDA6D48EA26DA5236622F9C5D332F94EF282F1C9DCE73F9
+
/* 20211113 */
BasePlus: 4EDB786B9D6F6D6C5741B5CAC1CB169DD10D8196600B2CB385DDE479A54F0FA3
diff --git a/packages/baseplus.md b/packages/baseplus.md
index 18a2468..24804d6 100644
--- a/packages/baseplus.md
+++ b/packages/baseplus.md
@@ -44,13 +44,13 @@
* [`%functionExists()` macro](#functionexists-macro)
* [`%RainCloudPlot()` macro](#raincloudplot-macro)
* [`%zipLibrary()` macro](#ziplibrary-macro)
+ * [`%unzipLibrary()` macro](#unziplibrary-macro)
-
* [License](#license)
---
-# The BasePlus package [ver. 1.0] ###############################################
+# The BasePlus package [ver. 1.1] ###############################################
The **BasePlus** package implements useful
functions and functionalities I miss in the BASE SAS.
@@ -191,7 +191,9 @@ Kudos to all who inspired me to generate this package:
**Example 10**: Zip SAS library.
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas
-%zipLibrary(sashelp,libOut=work)
+%zipLibrary(sashelp, libOut=work)
+
+%unzipLibrary(%sysfunc(pathname(work)), zip=sashelp, mode=S, clean=1)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
@@ -211,46 +213,46 @@ Package contains:
9. macro qzipevalf
10. macro raincloudplot
11. macro symdelglobal
-12. macro zipevalf
-13. macro ziplibrary
-14. format bool
-15. format boolz
-16. format ceil
-17. format floor
-18. format int
-19. functions arrfill
-20. functions arrfillc
-21. functions arrmissfill
-22. functions arrmissfillc
-23. functions arrmisstoleft
-24. functions arrmisstoleftc
-25. functions arrmisstoright
-26. functions arrmisstorightc
-27. functions bracketsc
-28. functions bracketsn
-29. functions catxfc
-30. functions catxfi
-31. functions catxfj
-32. functions catxfn
-33. functions deldataset
-34. functions semicolonc
-35. functions semicolonn
-36. format brackets
-37. format semicolon
-38. proto qsortincbyprocproto
-39. functions frommissingtonumberbs
-40. functions fromnumbertomissing
-41. functions quicksort4notmiss
-42. functions quicksorthash
-43. functions quicksorthashsddv
-44. 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:
-`4EDB786B9D6F6D6C5741B5CAC1CB169DD10D8196600B2CB385DDE479A54F0FA3`
+`319109732B5CBD99ADDA6D48EA26DA5236622F9C5D332F94EF282F1C9DCE73F9`
---
# Content description ############################################################################################
@@ -3290,6 +3292,7 @@ The basic syntax is the following, the `<...>` means optional parameters:
<,mode=>
<,clean=>
<,libOut=>
+ <,compression=>
)
~~~~~~~~~~~~~~~~~~~~~~~
@@ -3304,13 +3307,18 @@ The basic syntax is the following, the `<...>` means optional parameters:
generates single zip file (`SINGLE/S`)
or multiple files (`MULTI/M`)
-* `clean = 0` - *Optional*, default value is 0,
+* `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:
@@ -3357,11 +3365,133 @@ run;
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-**EXAMPLE 4.** Zip content of test3 library
+**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: <<< #######################
+
+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)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
---
diff --git a/packages/baseplus.zip b/packages/baseplus.zip
index 350c6dc..2646273 100644
Binary files a/packages/baseplus.zip and b/packages/baseplus.zip differ