From 68e1562c1935a80893d00b071d2718e488fb706d Mon Sep 17 00:00:00 2001 From: yabwon Date: Tue, 3 Nov 2020 13:26:14 +0100 Subject: [PATCH] BasePlus, version 0.9 New parameter `mcArray=` added to the `%getVars()` macro. *Optional*, default value is blank. 1) When *null* - the macro behaves like a macro function and returns a text string with variables list. 2) When *not null* - behaviour of the macro is altered. In such case a macro array of selected variables, named with `mcArray` value as a prefix, is created. Furthermore a macro named as `mcArray` value is generated. (see the macroArray package for the details). When `mcArray=` parameter is active the `getVars` macro cannot be called within the `%put` statement. Execution like: `%put %getVars(..., mcArray=XXX);` will result with an Explicit & Radical Refuse Of Run (aka ERROR). --- README.md | 4 +-- packages/README.md | 4 +-- packages/SHA256_for_packages.txt | 3 ++ packages/baseplus.md | 50 +++++++++++++++++++++++++++---- packages/baseplus.zip | Bin 51190 -> 52337 bytes 5 files changed, 51 insertions(+), 10 deletions(-) diff --git a/README.md b/README.md index 4a0e2f0..c96ed22 100644 --- a/README.md +++ b/README.md @@ -119,7 +119,7 @@ SHA256 digest for macroArray: 75056F508E96296DC50096BBB054C58334DB913AD378859580 [Documentation for macroArray](https://github.com/yabwon/SAS_PACKAGES/blob/main/packages/macroarray.md "Documentation for macroArray") -- **BasePlus**\[0.8\] adds a bunch of functionalities I am missing in BASE SAS, such as: +- **BasePlus**\[0.9\] adds a bunch of functionalities I am missing in BASE SAS, such as: ``` call arrMissToRight(myArray); call arrFillMiss(17, myArray); @@ -133,7 +133,7 @@ format x bool.; %put %getVars(sashelp.class, pattern = ght$, sep = +, varRange = _numeric_); ``` -SHA256 digest for BasePlus: 9549378E5F81DA4DC421C366DF006D270261852336CE3DCD88FF8E2A759938C8 +SHA256 digest for BasePlus: 9AC9F71DBC890068BBD972311BEF3F0D1CA100C3F80A5C34C56B9646D04BFEFB [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 8f46f22..76433c1 100644 --- a/packages/README.md +++ b/packages/README.md @@ -88,7 +88,7 @@ SHA256 digest for macroArray: 75056F508E96296DC50096BBB054C58334DB913AD378859580 --- -- **BasePlus**\[0.8\] adds a bunch of functionalities I am missing in BASE SAS, such as: +- **BasePlus**\[0.9\] adds a bunch of functionalities I am missing in BASE SAS, such as: ``` call arrMissToRight(myArray); call arrFillMiss(17, myArray); @@ -102,7 +102,7 @@ format x bool.; %put %getVars(sashelp.class, pattern = ght$, sep = +, varRange = _numeric_); ``` -SHA256 digest for BasePlus: 9549378E5F81DA4DC421C366DF006D270261852336CE3DCD88FF8E2A759938C8 +SHA256 digest for BasePlus: 9AC9F71DBC890068BBD972311BEF3F0D1CA100C3F80A5C34C56B9646D04BFEFB [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 9986fec..123c010 100644 --- a/packages/SHA256_for_packages.txt +++ b/packages/SHA256_for_packages.txt @@ -1,3 +1,6 @@ +/* 20201103 */ +BasePlus: 9AC9F71DBC890068BBD972311BEF3F0D1CA100C3F80A5C34C56B9646D04BFEFB + /* 20201029 */ MacroCore: A23C29529F3CE7D0C8BEE9545C5D22D5B5594907547374A5135B8E5A48D7687B diff --git a/packages/baseplus.md b/packages/baseplus.md index 9841f48..5ed1e98 100644 --- a/packages/baseplus.md +++ b/packages/baseplus.md @@ -1,4 +1,4 @@ -- [The BasePlus package [ver. 0.8]](#baseplus-package) +- [The BasePlus package](#baseplus-package) - [Content description](#content-description) * [`%getVars()` macro](#getvars-macro) * [`%QgetVars()` macro](#qgetvars-macro) @@ -38,7 +38,7 @@ --- -# The BasePlus package [ver. 0.8] ############################################### +# The BasePlus package [ver. 0.9] ############################################### The **BasePlus** package implements useful functions and functionalities I miss in the BASE SAS. @@ -199,10 +199,10 @@ Package contains: 32. functions quicksorthashsddv 33. functions quicksortlight -*SAS package generated by generatePackage, version 20201018* +*SAS package generated by generatePackage, version 20201101* The SHA256 hash digest for package BasePlus: -`9549378E5F81DA4DC421C366DF006D270261852336CE3DCD88FF8E2A759938C8` +`9AC9F71DBC890068BBD972311BEF3F0D1CA100C3F80A5C34C56B9646D04BFEFB` --- # Content description ############################################################################################ @@ -229,7 +229,8 @@ The basic syntax is the following, the `<...>` means optional parameters: <,sep=> <,pattern=> <,varRange=> - <,quote=> + <,quote=> + <,mcArray=> ) ~~~~~~~~~~~~~~~~~~~~~~~ @@ -250,7 +251,20 @@ The basic syntax is the following, the `<...>` means optional parameters: * `quote =` - *Optional*, default value is blank, a quotation symbol to be used around values. - +* `mcArray=` - *Optional*, default value is blank. + 1) When *null* - the macro behaves like a macro function + and returns a text string with variables list. + 2) When *not null* - behaviour of the macro is altered. + In such case a macro array of selected variables, named + with `mcArray` value as a prefix, is created. + Furthermore a macro named as `mcArray` value is generated. + (see the macroArray package for the details). + When `mcArray=` parameter is active the `getVars` macro + cannot be called within the `%put` statement. Execution like: + `%put %getVars(..., mcArray=XXX);` will result with + an Explicit & Radical Refuse Of Run (aka ERROR). + + ### EXAMPLES AND USECASES: #################################################### **EXAMPLE 1.** A list of all variables from the @@ -454,6 +468,30 @@ run; %put #%getVars(class, varRange=%getVars(class, varRange=_numeric_, sep=%str(: )):, sep=\)#; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +**EXAMPLE 11.** Create a macro array `XYZ...` of variables names and an additional + macro `%XYZ()` which allows easy access to the list. Can be used with + the `%do_over()` macro (provided with the macroArray package). +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + data test; + array x[30]; + array y[30] $ ; + array z[30]; + run; + + %getVars(test + ,mcArray=XYZ + ,varRange=x10-numeric-z22 y6-y26 + ,pattern=(5|7)$ + ,quote=#) + + %put _user_; + %put *%XYZ(1)**%XYZ(2)*%XYZ(3)*; + + %* Load the macroArray package first. ; + %put %do_over(XYZ); +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + --- ## >>> `%QgetVars()` macro: <<< ####################### diff --git a/packages/baseplus.zip b/packages/baseplus.zip index a080d6ff642d6061f9573470f7b0769d6bd88ab9..80c949c7fa85be01d687427eedc6ca85936e05f0 100644 GIT binary patch delta 12646 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 J+W$uIzW|+O9P0o8 delta 11354 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 F{THm=>hb^p