From 7e5c98976bfd6d51c759dde86451c756799e0ba3 Mon Sep 17 00:00:00 2001 From: Bart Jablonski Date: Thu, 26 Oct 2023 13:26:13 +0200 Subject: [PATCH] The BasePlus package [ver. 1.32.0] The BasePlus package [ver. 1.32.0] New `%monthShift()` macro added: ```sas %put %monthShift(2023,1,-3); ``` Doc. updated. --- packages/README.md | 6 +- packages/SHA256_for_packages.txt | 3 + packages/baseplus.md | 306 +++++++++++++++++++++++-------- packages/baseplus.zip | Bin 287196 -> 289082 bytes 4 files changed, 237 insertions(+), 78 deletions(-) diff --git a/packages/README.md b/packages/README.md index 274ea0f..6fe47dd 100644 --- a/packages/README.md +++ b/packages/README.md @@ -86,7 +86,7 @@ SHA256 digest for macroArray: F*E9C0C58FB36AC40C76A518066B8C6F9942202A9DB2C2D737 --- -- **BasePlus**\[1.31.0\] adds a bunch of functionalities I am missing in BASE SAS, such as: +- **BasePlus**\[1.32.0\] adds a bunch of functionalities I am missing in BASE SAS, such as: ```sas call arrMissToRight(myArray); call arrFillMiss(17, myArray); @@ -111,8 +111,10 @@ format x bool.; %put %repeatTxt(#,15,s=$) HELLO SAS! %repeatTxt(#,15,s=$); %put %date() %time() %datetime(); + +%put %monthShift(2023,1,-5); ``` -SHA256 digest for BasePlus: F*7EF23E80A2C03B29402183D97ECFF608B62BEDD9458848709B52DC362E6201B9 +SHA256 digest for BasePlus: F*81EF4FA7E1D9363A991B686F38C6569FFB22024CB9C67A9395EEF6D4257D508E [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 ce34e0d..b9223f4 100644 --- a/packages/SHA256_for_packages.txt +++ b/packages/SHA256_for_packages.txt @@ -1,3 +1,6 @@ +/* 20231026 */ +BasePlus: F*81EF4FA7E1D9363A991B686F38C6569FFB22024CB9C67A9395EEF6D4257D508E + /* 20231012 */ BasePlus: F*7EF23E80A2C03B29402183D97ECFF608B62BEDD9458848709B52DC362E6201B9 diff --git a/packages/baseplus.md b/packages/baseplus.md index c71d251..026e536 100644 --- a/packages/baseplus.md +++ b/packages/baseplus.md @@ -64,6 +64,7 @@ * [`%today()` macro](#today-macro) * [`%time()` macro](#time-macro) * [`%datetime()` macro](#datetime-macro) + * [`%monthShift()` macro](#monthshift-macro) * [`%translate()` macro](#translate-macro) * [`%tranwrd()` macro](#tranwrd-macro) * [`%findDSwithVarVal()` macro](#finddswithvarval-macro) @@ -77,7 +78,7 @@ --- -# The BasePlus package [ver. 1.31.0] ############################################### +# The BasePlus package [ver. 1.32.0] ############################################### The **BasePlus** package implements useful functions and functionalities I miss in the BASE SAS. @@ -85,6 +86,7 @@ functions and functionalities I miss in the BASE SAS. It is inspired by various people, e.g. - at the SAS-L discussion list - at the communities.sas.com (SASware Ballot Ideas) +- at StackOverflow - at the Office... - etc. @@ -100,8 +102,6 @@ Kudos to all who inspired me to generate this package: *Kurt Bremser*, *Leonid Batkhan*. -Recording from the SAS Explore 2022 conference: [A BasePlus Package for SAS](https://communities.sas.com/t5/SAS-Explore-Presentations/A-BasePlus-Package-for-SAS/ta-p/838246 "A BasePlus Package for SAS") (September 27th-29th, 2022). - --- ### BASIC EXAMPLES AND USECASES: #################################################### @@ -345,90 +345,101 @@ run; %put %today() %date() %time() %datetime(); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +**EXAMPLE 24** Months shifting: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas +%put + Past: %monthShift(2023, 1, -1) + Current: %monthShift(2023, 1 ) + Future: %monthShift(2023, 1, +1) +; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + --- Package contains: -1. macro bppipe -2. macro deduplistc -3. macro deduplistp -4. macro deduplists -5. macro deduplistx -6. macro dirsandfiles -7. macro functionexists -8. macro getvars -9. macro intslist -10. macro ldsn -11. macro ldsnm -12. macro lvarnm -13. macro lvarnmlab -14. macro qdeduplistx -15. macro qgetvars -16. macro qzipevalf -17. macro raincloudplot -18. macro repeattxt -19. macro splitdsintoblocks -20. macro splitdsintoparts -21. macro symdelglobal -22. macro unziplibrary -23. macro zipevalf -24. macro ziplibrary -25. format bool -26. format boolz -27. format ceil -28. format floor -29. format int -30. function arrfill -31. function arrfillc -32. function arrmissfill -33. function arrmissfillc -34. function arrmisstoleft -35. function arrmisstoleftc -36. function arrmisstoright -37. function arrmisstorightc -38. function bracketsc -39. function bracketsn -40. function catxfc -41. function catxfi -42. function catxfj -43. function catxfn -44. function deldataset -45. function semicolonc -46. function semicolonn -47. format brackets -48. format semicolon -49. proto qsortincbyprocproto -50. function frommissingtonumberbs -51. function fromnumbertomissing -52. function quicksort4notmiss -53. function quicksorthash -54. function quicksorthashsddv -55. function quicksortlight -56. macro date -57. macro datetime -58. macro filepath -59. macro finddswithvarval -60. macro fmt -61. macro gettitle -62. macro infmt -63. macro letters -64. macro libpath -65. macro minclude -66. macro replist -67. macro time -68. macro today -69. macro translate -70. macro tranwrd -71. macro workpath +1. macro bppipe +2. macro deduplistc +3. macro deduplistp +4. macro deduplists +5. macro deduplistx +6. macro dirsandfiles +7. macro functionexists +8. macro getvars +9. macro intslist +10. macro ldsn +11. macro ldsnm +12. macro lvarnm +13. macro lvarnmlab +14. macro qdeduplistx +15. macro qgetvars +16. macro qzipevalf +17. macro raincloudplot +18. macro repeattxt +19. macro splitdsintoblocks +20. macro splitdsintoparts +21. macro symdelglobal +22. macro unziplibrary +23. macro zipevalf +24. macro ziplibrary +25. format bool +26. format boolz +27. format ceil +28. format floor +29. format int +30. function arrfill +31. function arrfillc +32. function arrmissfill +33. function arrmissfillc +34. function arrmisstoleft +35. function arrmisstoleftc +36. function arrmisstoright +37. function arrmisstorightc +38. function bracketsc +39. function bracketsn +40. function catxfc +41. function catxfi +42. function catxfj +43. function catxfn +44. function deldataset +45. function semicolonc +46. function semicolonn +47. format brackets +48. format semicolon +49. proto qsortincbyprocproto +50. function frommissingtonumberbs +51. function fromnumbertomissing +52. function quicksort4notmiss +53. function quicksorthash +54. function quicksorthashsddv +55. function quicksortlight +56. macro date +57. macro datetime +58. macro filepath +59. macro finddswithvarval +60. macro fmt +61. macro gettitle +62. macro infmt +63. macro letters +64. macro libpath +65. macro minclude +66. macro monthshift +67. macro replist +68. macro time +69. macro today +70. macro translate +71. macro tranwrd +72. macro workpath + Package contains additional content, run: %loadPackageAddCnt(BasePlus) to load it or look for the baseplus_AdditionalContent directory in the Packages fileref localization (only if additional content was deployed during the installation process). -* SAS package generated by generatePackage, version 20231009 * +* SAS package generated by generatePackage, version 20231024 * The SHA256 hash digest for package BasePlus: -`F*7EF23E80A2C03B29402183D97ECFF608B62BEDD9458848709B52DC362E6201B9` +`F*81EF4FA7E1D9363A991B686F38C6569FFB22024CB9C67A9395EEF6D4257D508E` --- # Content description ############################################################################################ @@ -5107,6 +5118,149 @@ The basic syntax is the following, the `<...>` means optional parameters: --- +## >>> `%monthShift()` macro: <<< ####################### + +The monthShift() macro is a utility macro +which allows to shift "year-month" period by +a given number of "periods" (months). + +The result is in the `YYYYMM` format but can be altered. + +See examples below for the details. + +The `%monthShift()` macro executes like a pure macro code. + +### SYNTAX: ################################################################### + +The basic syntax is the following, the `<...>` means optional parameters: +~~~~~~~~~~~~~~~~~~~~~~~sas +%monthShift( + < Y> + <,M> + <,shift> + <,ofmt=> +) +~~~~~~~~~~~~~~~~~~~~~~~ + +**Arguments description**: + +1. `Y` - *Optional*, a year from which counting starts. + If null the value is set to *system year*. + +2. `M` - *Optional*, a month from which counting starts. + If null the value is set to `1`. Can be a number + (`1` to `12`) or a name (`June`, `OCTOBER`) or + a three letters short (`JAN`, `apr`). + +3. `shift` - *Optional*, number of periods to shift. + If null the value is set to `0`. + Positive value shifts to the "future", + negative value shifts to the "past", + Can be an expression (e.g. `1+2*3`, see examples). + +* `ofmt=YYMMn6.` - *Optional*, it is a format name used to + display the result. Default value is `YYMMn6.` + See examples. + +--- + +### EXAMPLES AND USECASES: #################################################### + +**EXAMPLE 1.** Shift one up and one down: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas +%put + Past: %monthShift(2023, 1, -1) + Current: %monthShift(2023, 1 ) + Future: %monthShift(2023, 1, +1) +; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +**EXAMPLE 2.** Shift by expression: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + %let n = 2; + %put + %monthShift(2023, 1, +1 + &n.*3) + ; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +**EXAMPLE 3.** Shift with default values: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + %put %monthShift(); + %put %monthShift(2023); + %put %monthShift(2023,Jan); +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +**EXAMPLE 4.** Shift with months names: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + %put + %monthShift(2023,Jan,-1) + %monthShift(2023,Feb,-2) + %monthShift(2023,Mar,-3) + %monthShift(2023,Apr,-4) + %monthShift(2023,May,-5) + %monthShift(2023,Jun,-6) + %monthShift(2023,Jul,-7) + %monthShift(2023,Aug,-8) + %monthShift(2023,Sep,-9) + %monthShift(2023,Oct,-10) + %monthShift(2023,Nov,-11) + %monthShift(2023,Dec,-12) + ; + + %put + %monthShift(2023,January,12) + %monthShift(2023,February,11) + %monthShift(2023,March,10) + %monthShift(2023,April,9) + %monthShift(2023,May,8) + %monthShift(2023,June,7) + %monthShift(2023,July,6) + %monthShift(2023,August,5) + %monthShift(2023,September,4) + %monthShift(2023,October,3) + %monthShift(2023,November,2) + %monthShift(2023,December,1) + ; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +**EXAMPLE 5.** Play with formatting: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + %put + %monthShift(2023, 1, +1 ) + %monthShift(2023, 1, +1, ofmt=yymm7. ) + %monthShift(2023, 1, +1, ofmt=yymmd7.) + %monthShift(2023, 1, +1, ofmt=yymms7.) + ; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +**EXAMPLE 6.** Read monthly data with `noDSNFERR` option: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + data + A202210 A202211 A202212 + A202301 A202302 A202303 + A202304 A202305 A202306 + A202307 A202308 A202309 + ; + set sashelp.class; + run; + + + options noDSNFERR; + data ALL; + set + A%monthShift(2023, 9, -12) - A%monthShift(2023, 9) + ; + run; + options DSNFERR; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +--- + ## >>> `%translate()` macro: <<< ####################### diff --git a/packages/baseplus.zip b/packages/baseplus.zip index 257d4a1faeaad2abf8add507b9843c858dd78b3d..7f90b6fe5ab88ce1d4133868b3de23df714c4f69 100644 GIT binary patch delta 16814 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 KEmDU%0Qf%_s&ujd delta 14784 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 N