From 9277a83561b3035ded9e44caea1cf63b7622f5f3 Mon Sep 17 00:00:00 2001 From: yabwon Date: Wed, 2 Dec 2020 21:16:27 +0100 Subject: [PATCH] BasePlus, version 0.99 BasePlus, version 0.99 New features: * `brackets.` format * `semicolon.` format * `bracketsC()` function * `bracketsN()` function * `semicolonC()` function * `semicolonN()` function * `%zipEvalf()` macro * `%QzipEvalf()` macro --- README.md | 4 +- packages/README.md | 4 +- packages/SHA256_for_packages.txt | 3 + packages/baseplus.md | 513 ++++++++++++++++++++++++++++--- packages/baseplus.zip | Bin 54025 -> 62824 bytes 5 files changed, 484 insertions(+), 40 deletions(-) diff --git a/README.md b/README.md index bdfd9ef..e11f80f 100644 --- a/README.md +++ b/README.md @@ -140,7 +140,7 @@ SHA256 digest for macroArray: 0F1B985E2FC34C91D2A3BD237DC294502A76913B71266D7670 [Documentation for macroArray](https://github.com/yabwon/SAS_PACKAGES/blob/main/packages/macroarray.md "Documentation for macroArray") -- **BasePlus**\[0.9\] adds a bunch of functionalities I am missing in BASE SAS, such as: +- **BasePlus**\[0.99\] adds a bunch of functionalities I am missing in BASE SAS, such as: ``` call arrMissToRight(myArray); call arrFillMiss(17, myArray); @@ -154,7 +154,7 @@ format x bool.; %put %getVars(sashelp.class, pattern = ght$, sep = +, varRange = _numeric_); ``` -SHA256 digest for BasePlus: B25A3992B6FCD13528BEE462B3ADD0F5A6D15E607A6DABAA984CA66B0AD69415 +SHA256 digest for BasePlus: 7933E6BCFDCA7C04EAAC537773574799759007A5D2AED639E86CF4EA631F1351 [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 99d0a2b..e2d3a10 100644 --- a/packages/README.md +++ b/packages/README.md @@ -90,7 +90,7 @@ SHA256 digest for macroArray: 0F1B985E2FC34C91D2A3BD237DC294502A76913B71266D7670 --- -- **BasePlus**\[0.9\] adds a bunch of functionalities I am missing in BASE SAS, such as: +- **BasePlus**\[0.99\] adds a bunch of functionalities I am missing in BASE SAS, such as: ``` call arrMissToRight(myArray); call arrFillMiss(17, myArray); @@ -104,7 +104,7 @@ format x bool.; %put %getVars(sashelp.class, pattern = ght$, sep = +, varRange = _numeric_); ``` -SHA256 digest for BasePlus: B25A3992B6FCD13528BEE462B3ADD0F5A6D15E607A6DABAA984CA66B0AD69415 +SHA256 digest for BasePlus: 7933E6BCFDCA7C04EAAC537773574799759007A5D2AED639E86CF4EA631F1351 [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 eac0768..1a8208a 100644 --- a/packages/SHA256_for_packages.txt +++ b/packages/SHA256_for_packages.txt @@ -1,3 +1,6 @@ +/* 20201202 */ +BasePlus: 7933E6BCFDCA7C04EAAC537773574799759007A5D2AED639E86CF4EA631F1351 + /* 20201130 */ DFA: 1FC8D030D576C33F1B5DEB27E17534946209BC148D57A1357CA025ED1E69AEB8 diff --git a/packages/baseplus.md b/packages/baseplus.md index 44a75cb..c4989e8 100644 --- a/packages/baseplus.md +++ b/packages/baseplus.md @@ -33,12 +33,20 @@ * [`%dedupListP()` macro](#deduplistp-macro) * [`%dedupListX()` macro](#deduplistx-macro) * [`%QdedupListX()` macro](#qdeduplistx-macro) - + * [`brackets.` format](#brackets-format) + * [`semicolon.` format](#semicolon-format) + * [`bracketsC()` function](#bracketsc-function) + * [`bracketsN()` function](#bracketsn-function) + * [`semicolonC()` function](#semicolonc-function) + * [`semicolonN()` function](#semicolonn-function) + * [`%zipEvalf()` macro](#zipevalf-macro) + * [`%QzipEvalf()` macro](#qzipevalf-macro) + * [License](#license) --- -# The BasePlus package [ver. 0.9] ############################################### +# The BasePlus package [ver. 0.99] ############################################### The **BasePlus** package implements useful functions and functionalities I miss in the BASE SAS. @@ -162,47 +170,61 @@ Kudos to all who inspired me to generate this package: %put *%dedupListS(&list.)*; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +**Example 8**: Zip elements of two space separated list. +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas +%let x = %zipEvalf(1 2 3 4 5 6, 2018 2019 2020, argMd=5, function=MDY, format=date11.); +%put &=x; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + --- Package contains: - 1. macro deduplistc - 2. macro deduplistp - 3. macro deduplists - 4. macro deduplistx - 5. macro getvars - 6. macro qdeduplistx - 7. macro qgetvars - 8. macro symdelglobal - 9. format bool - 10. format boolz - 11. format ceil - 12. format floor - 13. format int - 14. functions arrfill - 15. functions arrfillc - 16. functions arrmissfill - 17. functions arrmissfillc - 18. functions arrmisstoleft - 19. functions arrmisstoleftc - 20. functions arrmisstoright - 21. functions arrmisstorightc - 22. functions catxfc - 23. functions catxfi - 24. functions catxfj - 25. functions catxfn - 26. functions deldataset - 27. proto qsortincbyprocproto - 28. functions frommissingtonumberbs - 29. functions fromnumbertomissing - 30. functions quicksort4notmiss - 31. functions quicksorthash - 32. functions quicksorthashsddv - 33. functions quicksortlight +1. macro deduplistc +2. macro deduplistp +3. macro deduplists +4. macro deduplistx +5. macro getvars +6. macro qdeduplistx +7. macro qgetvars +8. macro qzipevalf +9. macro symdelglobal +10. macro zipevalf +11. format bool +12. format boolz +13. format ceil +14. format floor +15. format int +16. functions arrfill +17. functions arrfillc +18. functions arrmissfill +19. functions arrmissfillc +20. functions arrmisstoleft +21. functions arrmisstoleftc +22. functions arrmisstoright +23. functions arrmisstorightc +24. functions bracketsc +25. functions bracketsn +26. functions catxfc +27. functions catxfi +28. functions catxfj +29. functions catxfn +30. functions deldataset +31. functions semicolonc +32. functions semicolonn +33. format brackets +34. format semicolon +35. proto qsortincbyprocproto +36. functions frommissingtonumberbs +37. functions fromnumbertomissing +38. functions quicksort4notmiss +39. functions quicksorthash +40. functions quicksorthashsddv +41. functions quicksortlight *SAS package generated by generatePackage, version 20201115* The SHA256 hash digest for package BasePlus: -`B25A3992B6FCD13528BEE462B3ADD0F5A6D15E607A6DABAA984CA66B0AD69415` +`7933E6BCFDCA7C04EAAC537773574799759007A5D2AED639E86CF4EA631F1351` --- # Content description ############################################################################################ @@ -2491,6 +2513,425 @@ XlistXofXxXseparatedXvalues --- +## >>> `brackets.` format: <<< ####################### + +The **brackets** format adds brackets around a text or a number. +Leading and trailing spaces are dropped before adding brackets. + +### EXAMPLES AND USECASES: #################################################### + +**Example 1.** + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas +data _null_; + input x; + if x < 0 then put x= brackets.; + else put x= best32.; +cards; +2 +1 +0 +-1 +-2 +; +run; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +--- + +## >>> `semicolon.` format: <<< ####################### + +The **semicolon** format adds semicolon after text or number. +Leading and trailing spaces are dropped before adding semicolon. + +### EXAMPLES AND USECASES: #################################################### + +**Example 1.** + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas +data _null_; + x = 1; + y = "A"; + put x= semicolon. y= $semicolon.; +run; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +--- + +## >>> `bracketsC()` function: <<< ####################### + +The **bracketsC()** function is internal function used by the *brackets* format. +Returns character value of length 32767. + +### SYNTAX: ################################################################### + +The basic syntax is the following: +~~~~~~~~~~~~~~~~~~~~~~~sas +bracketsC(X) +~~~~~~~~~~~~~~~~~~~~~~~ + +**Arguments description**: + +1. `X` - Character value. + +--- + +## >>> `bracketsN()` function: <<< ####################### + +The **bracketsN()** function is internal function used by the *brackets* format. +Returns character value of length 34. + +### SYNTAX: ################################################################### + +The basic syntax is the following: +~~~~~~~~~~~~~~~~~~~~~~~sas +bracketsN(X) +~~~~~~~~~~~~~~~~~~~~~~~ + +**Arguments description**: + +1. `X` - Numeric value. + +--- + +## >>> `semicolonC()` function: <<< ####################### + +The **semicolonC()** function is internal function used by the *semicolon* format. +Returns character value of length 32767. + +### SYNTAX: ################################################################### + +The basic syntax is the following: +~~~~~~~~~~~~~~~~~~~~~~~sas +semicolonC(X) +~~~~~~~~~~~~~~~~~~~~~~~ + +**Arguments description**: + +1. `X` - Character value. + +--- + +## >>> `semicolonN()` function: <<< ####################### + +The **semicolonN()** function is internal function used by the *semicolon* format. +Returns character value of length 33. + +### SYNTAX: ################################################################### + +The basic syntax is the following: +~~~~~~~~~~~~~~~~~~~~~~~sas +semicolonN(X) +~~~~~~~~~~~~~~~~~~~~~~~ + +**Arguments description**: + +1. `X` - Numeric value. + +--- + +## >>> `%QzipEvalf()` macro: <<< ####################### + +The zipEvalf() and QzipEvalf() macro functions +allow to use a function on elements of pair of +space separated lists. + +For two space separated lists of text strings the corresponding +elements are taken and the macro applies a function, provided by user, +to calculate result of the function on taken elements. + +When one of the lists is shorter then elements are "reused" starting +from the beginning. + +The zipEvalf() returns unquoted value [by %unquote()]. +The QzipEvalf() returns quoted value [by %superq()]. + +See examples below for the details. + +The `%QzipEvalf()` macro executes like a pure macro code. + +### SYNTAX: ################################################################### + +The basic syntax is the following, the `<...>` means optional parameters: +~~~~~~~~~~~~~~~~~~~~~~~sas +%QzipEvalf( + first + ,second + <,function=> + <,operator=> + <,argBf=> + <,argMd=> + <,argAf=> + <,format=> +) +~~~~~~~~~~~~~~~~~~~~~~~ + +**Arguments description**: + +1. `first` - *Required*, a space separated list of texts. + +2. `second` - *Required*, a space separated list of texts. + +* `function = cat` - *Optional*, default value is `cat`, + a function which will be applied + to corresponding pairs of elements of + the first and the second list. + +* `operator =` - *Optional*, default value is empty, + arithmetic infix operator used with elements + the first and the second list. The first + list is used on the left side of the operator + the second list is used on the right side + of the operator. + +* `argBf =` - *Optional*, default value is empty, + arguments of the function inserted + *before* elements the first list. + If multiple should be comma separated. + +* `argMd =` - *Optional*, default value is empty, + arguments of the function inserted + *between* elements the first list and + the second list. + If multiple should be comma separated. + +* `argAf =` - *Optional*, default value is empty, + arguments of the function inserted + *after* elements the second list. + If multiple should be comma separated. + +* `format=` - *Optional*, default value is empty, + indicates a format which should be used + to format the result, does not work when + the `operator=` is used. + +### EXAMPLES AND USECASES: #################################################### + +See examples in `%zipEvalf()` help for the details. + +--- + +## >>> `%zipEvalf()` macro: <<< ####################### + +The zipEvalf() and QzipEvalf() macro functions +allow to use a function on elements of pair of +space separated lists. + +For two space separated lists of text strings the corresponding +elements are taken and the macro applies a function, provided by user, +to calculate result of the function on taken elements. + +When one of the lists is shorter then elements are "reused" starting +from the beginning. + +The zipEvalf() returns unquoted value [by %unquote()]. +The QzipEvalf() returns quoted value [by %superq()]. + +See examples below for the details. + +The `%zipEvalf()` macro executes like a pure macro code. + +### SYNTAX: ################################################################### + +The basic syntax is the following, the `<...>` means optional parameters: +~~~~~~~~~~~~~~~~~~~~~~~sas +%zipEvalf( + first + ,second + <,function=> + <,operator=> + <,argBf=> + <,argMd=> + <,argAf=> + <,format=> +) +~~~~~~~~~~~~~~~~~~~~~~~ + +**Arguments description**: + +1. `first` - *Required*, a space separated list of texts. + +2. `second` - *Required*, a space separated list of texts. + +* `function = cat` - *Optional*, default value is `cat`, + a function which will be applied + to corresponding pairs of elements of + the first and the second list. + +* `operator =` - *Optional*, default value is empty, + arithmetic infix operator used with elements + the first and the second list. The first + list is used on the left side of the operator + the second list is used on the right side + of the operator. + +* `argBf =` - *Optional*, default value is empty, + arguments of the function inserted + *before* elements the first list. + If multiple should be comma separated. + +* `argMd =` - *Optional*, default value is empty, + arguments of the function inserted + *between* elements the first list and + the second list. + If multiple should be comma separated. + +* `argAf =` - *Optional*, default value is empty, + arguments of the function inserted + *after* elements the second list. + If multiple should be comma separated. + +* `format=` - *Optional*, default value is empty, + indicates a format which should be used + to format the result, does not work when + the `operator=` is used. + +### EXAMPLES AND USECASES: #################################################### + +**EXAMPLE 1.** Simple concatenation of elements: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas +%let x = %zipEvalf(1 2 3 4 5 6, q w e r t y); +%put &=x; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +**EXAMPLE 2.** Shorter list is "reused": +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas +%let x = %zipEvalf(1 2 3 4 5 6, a b c); +%put &=x; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +**EXAMPLE 3.** Use of the `operator=`, shorter list is "reused": +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas +%let y = %zipEvalf(1 2 3 4 5 6, 100 200, operator = +); +%put &=y; + +%let z = %zipEvalf(1 2 3 4 5 6 8 9 10, 1 2 3 4 5 6 8 9 10, operator = **); +%put &=z; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +**EXAMPLE 4.** Format result: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas +%let x = %zipEvalf(1 2 3 4 5 6, q w e r t y, format=$upcase.); +%put &=x; + +%put * +%zipEvalf( + ą ż ś ź ę ć ń ó ł +,Ą Ż Ś Ź Ę Ć Ń Ó Ł +,format = $brackets. +) +*; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +**EXAMPLE 5.** Use with macrovariables: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas +%let abc = 10 100 1000; +%put * +%zipEvalf( +%str(1 2 3 4 5 6 7 8 9) +,&abc. +,function = sum +) +*; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +**EXAMPLE 6.** If one of elements is empty: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas +%put * +%zipEvalf( + abc efg +, +) +*; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +**EXAMPLE 7.** Use of the `function=`, shorter list is "reused": +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas +%put * +%zipEvalf( + a b c +,efg +,function = catx +,argBf = %str(,) +,format = $brackets. +) +*; + +%put * +%zipEvalf( + a b c +,efg +,function = catx +,argBf = %str( ) +,format = $upcase. +) +*; + +%put * +%zipEvalf( + %str(! @ # $ [ ] % ^ & * ) +,1 2 3 4 5 6 7 8 9 +,function = catx +,argBf = %str( ) +,format = $quote. +) +*; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +**EXAMPLE 8.** Use inside resolve: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas +data _null_; +z = resolve(' +%zipEvalf( + %nrstr(! @ # $ [ ] % ^ & *) +,1 2 3 4 5 6 7 8 9 +,function = catx +,argBf = %str(.) +,format = $quote. +)'); +put z=; +run; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +**EXAMPLE 9.** Use in data step: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas +data test; + %zipEvalf( + a b c d e f g + ,1 2 3 4 5 6 7 + ,function = catx + ,argBf = = + ,format = $semicolon. + ) +run; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +**EXAMPLE 10.** With 9.4M6 hashing() function: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas +%put %zipEvalf(MD5 SHA1 SHA256 SHA384 SHA512 CRC32, abcd, function = HASHING); +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +**EXAMPLE 11.** Use middle argument: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas +%let x = %zipEvalf(1 2 3 4 5 6, 2020, argMd=5, function=MDY, format=date11.); +%put &=x; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +--- + + + + ## License #################################################################### Copyright (c) 2020 Bartosz Jablonski diff --git a/packages/baseplus.zip b/packages/baseplus.zip index a67760b9916321d1a895e009ce4b1f06091a98c7..94c186a35d6b4caa3b0cd6c42a8f98ac723f4858 100644 GIT binary patch delta 19229 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 Vuj7$XuT=pk09{^*kmOfF{U6Sn9z6g6 delta 10462 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