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