From 8807a1560e4d5cc2acdbefef654c7909ac7e3808 Mon Sep 17 00:00:00 2001 From: Bartosz Jablonski Date: Thu, 15 Dec 2022 17:56:08 +0100 Subject: [PATCH] SAS Packages Framework, version 20221215 SAS Packages Framework, version 20221215 Changes in the framework: - Bug fix for `formats` and `proto` with cherry picking. - Packages regenerated with the latest framework version: - SQLinDS [2.2.4] - DFA [0.5.4] - macroArray [1.0.4] - BasePlus [1.18.4] - GSM [0.20.4] - dynMacroArray [0.2.4] - New macro `%bpPIPE()` in BasePlus package. - Documentation updated. --- README.md | 40 +++++--- SPF/Macros/extendpackagesfileref.sas | 4 +- SPF/Macros/generatepackage.sas | 52 ++++++---- SPF/Macros/helppackage.sas | 6 +- SPF/Macros/installpackage.sas | 6 +- SPF/Macros/listpackages.sas | 6 +- SPF/Macros/loadpackage.sas | 4 +- SPF/Macros/loadpackages.sas | 4 +- SPF/Macros/previewpackage.sas | 4 +- SPF/Macros/unloadpackage.sas | 4 +- SPF/Macros/verifypackage.sas | 4 +- SPF/SPFinit.md | 22 ++-- SPF/SPFinit.sas | 96 +++++++++-------- packages/README.md | 32 +++--- packages/SHA256_for_packages.txt | 9 ++ packages/baseplus.md | 148 +++++++++++++++++---------- packages/baseplus.zip | Bin 85315 -> 87377 bytes packages/dfa.md | 6 +- packages/dfa.zip | Bin 47396 -> 48138 bytes packages/dynmacroarray.zip | Bin 13535 -> 14326 bytes packages/gsm.md | 6 +- packages/gsm.zip | Bin 16809 -> 17573 bytes packages/macroarray.md | 6 +- packages/macroarray.zip | Bin 50583 -> 51364 bytes packages/sqlinds.md | 6 +- packages/sqlinds.zip | Bin 13389 -> 14142 bytes 26 files changed, 267 insertions(+), 198 deletions(-) diff --git a/README.md b/README.md index e51781c..134da97 100644 --- a/README.md +++ b/README.md @@ -14,7 +14,7 @@ In this repository we are presenting the **SAS Packages Framework** which allows ### Current version: -**The latest version** of SPF is **`20221212`**. +**The latest version** of SPF is **`20221215`**. To get started with SAS Packages try this [**`Getting Started with SAS Packages`**](https://github.com/yabwon/SAS_PACKAGES/blob/main/SPF/Documentation/Getting_Started_with_SAS_Packages.pdf "Getting Started with SAS Packages") presentation (see the `./SPF/Documentation` directory). @@ -174,29 +174,28 @@ If you find the SPF useful **share info** about it or **give it a [star](https:/ Packages: -- **SQLinDS**\[2.2.3\], based on Mike Rhoads' article *Use the Full Power of SAS in Your Function-Style Macros*. The package allows to write SQL queries in the data step, e.g. +- **SQLinDS**\[2.2.4\], based on Mike Rhoads' article *Use the Full Power of SAS in Your Function-Style Macros*. The package allows to write SQL queries in the data step, e.g. ```sas data class; set %SQL(select * from sashelp.class order by age); run; ``` -SHA256 digest for SQLinDS: D5A66E60602270E5FB1E592FA3E0C2F2C640BC077FE799A2223CB9BA275F6F47 +SHA256 digest for SQLinDS: 42677CEBB0778A6B72DE9C0071B66A345811EE470289E3847D7737F782E709E0 [Documentation for SQLinDS](https://github.com/yabwon/SAS_PACKAGES/blob/main/packages/sqlinds.md "Documentation for SQLinDS") -- **MacroCore**\[1\], a macro library for SAS application developers. Over 100 macros for Base SAS, metadata, and Viya. Provided by the [SASjs framework](https://sasjs.io "SASjs framework"). +[SQLinDS in SASPAC](https://github.com/SASPAC/sqlinds "SQLinDS in SASPAC") -SHA256 digest for MacroCore: A23C29529F3CE7D0C8BEE9545C5D22D5B5594907547374A5135B8E5A48D7687B -[Documentation for MacroCore](https://core.sasjs.io "Documentation for MacroCore") +- **DFA** (Dynamic Function Arrays)\[0.5.4\], contains set of macros and FCMP functions which implement: a dynamically allocated array, a stack, a fifo queue, an ordered stack, and a priority queue, run `%helpPackage(DFA,createDFArray)` to find examples. -- **DFA** (Dynamic Function Arrays)\[0.5.3\], contains set of macros and FCMP functions which implement: a dynamically allocated array, a stack, a fifo queue, an ordered stack, and a priority queue, run `%helpPackage(DFA,createDFArray)` to find examples. - -SHA256 digest for DFA: 7520CF21CBF1FD4AD2BC05C5DD343E508FCEA507575EBC060B4AD322FB80AB04 +SHA256 digest for DFA: 6DEB02BE1C30453FBC688AF1F561709C7D6BF10B3B67988B238853A2A9D53034 [Documentation for DFA](https://github.com/yabwon/SAS_PACKAGES/blob/main/packages/dfa.md "Documentation for DFA") -- **macroArray**\[1.0.3\], implementation of an array concept in a macrolanguage, e.g. +[DFA in SASPAC](https://github.com/SASPAC/dfa "DFA in SASPAC") + +- **macroArray**\[1.0.4\], implementation of an array concept in a macrolanguage, e.g. ```sas %array(ABC[17] (111:127), macarray=Y); @@ -215,12 +214,13 @@ SHA256 digest for DFA: 7520CF21CBF1FD4AD2BC05C5DD343E508FCEA507575EBC060B4AD322F which = 1:H:2 ); ``` -SHA256 digest for macroArray: 440920272D1838505EA5C033B1C448C612DE2FCCFD57F157BB90ED980E4001CC +SHA256 digest for macroArray: 8584C249C308B5E8B620ED5F695BC58CD426172FB2EACD5FF9C6899F9DE2B470 [Documentation for macroArray](https://github.com/yabwon/SAS_PACKAGES/blob/main/packages/macroarray.md "Documentation for macroArray") +[MacroArray in SASPAC](https://github.com/SASPAC/macroarray "MacroArray in SASPAC") -- **BasePlus**\[1.17.3\] adds a bunch of functionalities I am missing in BASE SAS, such as: +- **BasePlus**\[1.18.4\] adds a bunch of functionalities I am missing in BASE SAS, such as: ```sas call arrMissToRight(myArray); call arrFillMiss(17, myArray); @@ -237,22 +237,28 @@ format x bool.; %rainCloudPlot(sashelp.cars,DriveTrain,Invoice) %zipLibrary(sashelp,libOut=work) + +%bpPIPE(ls -la ~/) ``` -SHA256 digest for BasePlus: D8DBB7CC5952331FA59FEBBBDD15BC543FE3C89A8BA9150FE6AF5E412868EBE7 +SHA256 digest for BasePlus: A6F1977DC4EC22A39DDC7BCE68CF562AF54351A3D385D488EC3067B5A7C0F3CB [Documentation for BasePlus](https://github.com/yabwon/SAS_PACKAGES/blob/main/packages/baseplus.md "Documentation for BasePlus") -- **GSM** (Generate Secure Macros)\[0.20.3\], package allows +[BasePlus in SASPAC](https://github.com/SASPAC/baseplus "BasePlus in SASPAC") + +- **GSM** (Generate Secure Macros)\[0.20.4\], package allows to create secured macros stored in SAS Proc FCMP functions. The dataset with functions can be shared between different operating systems and allows to generate macros on site without showing their code. -SHA256 digest for GSM: 50D8340E080BEA459E68BE315146AD3B809930DB8DC7B23C7A492C3815ACD83F +SHA256 digest for GSM: 83EC349DF97EFA71187536E8CC6CD62215CE675D20DA355E14D4ACE3FBC6D524 [Documentation for GSM](https://github.com/yabwon/SAS_PACKAGES/blob/main/packages/gsm.md "Documentation for GSM") -- **dynMacroArray**\[0.2.3\], set of macros (wrappers for a hash table) emulating dynamic array in the data step (macro predecessor of DFA). Development of this package is currently on hold. +[GSM in SASPAC](https://github.com/SASPAC/gsm "GSM in SASPAC") -SHA256 digest for dynMacroArray: 440920272D1838505EA5C033B1C448C612DE2FCCFD57F157BB90ED980E4001CC +- **dynMacroArray**\[0.2.4\], set of macros (wrappers for a hash table) emulating dynamic array in the data step (macro predecessor of DFA). Development of this package is currently on hold. + +SHA256 digest for dynMacroArray: 7800F36877DC0B9A94B1AC8FFDF8B43ADB216F11B5B26343E41165E7F5E32FC0 ### ====== diff --git a/SPF/Macros/extendpackagesfileref.sas b/SPF/Macros/extendpackagesfileref.sas index d7239df..83d8efb 100644 --- a/SPF/Macros/extendpackagesfileref.sas +++ b/SPF/Macros/extendpackagesfileref.sas @@ -6,7 +6,7 @@ when empty the "packages" value is used */ )/secure /*** HELP END ***/ -des = 'Macro to list directories pointed by "packages" fileref, version 20221212. Run %extendPackagesFileref(HELP) for help info.' +des = 'Macro to list directories pointed by "packages" fileref, version 20221215. Run %extendPackagesFileref(HELP) for help info.' ; %if %QUPCASE(&packages.) = HELP %then @@ -22,7 +22,7 @@ des = 'Macro to list directories pointed by "packages" fileref, version 20221212 %put ### This is short help information for the `extendPackagesFileref` macro #; %put #-----------------------------------------------------------------------------------------#;; %put # #; - %put # Macro to list directories pointed by 'packages' fileref, version `20221212` #; + %put # Macro to list directories pointed by 'packages' fileref, version `20221215` #; %put # #; %put # A SAS package is a zip file containing a group #; %put # of SAS codes (macros, functions, data steps generating #; diff --git a/SPF/Macros/generatepackage.sas b/SPF/Macros/generatepackage.sas index 54f1879..bae3941 100644 --- a/SPF/Macros/generatepackage.sas +++ b/SPF/Macros/generatepackage.sas @@ -23,7 +23,7 @@ default value 1 means "delete tests work" */ )/ secure minoperator /*** HELP END ***/ -des = 'Macro to generate SAS packages, version 20221212. Run %generatePackage() for help info.' +des = 'Macro to generate SAS packages, version 20221215. Run %generatePackage() for help info.' ; %if (%superq(filesLocation) = ) OR (%qupcase(&filesLocation.) = HELP) %then %do; @@ -38,7 +38,7 @@ des = 'Macro to generate SAS packages, version 20221212. Run %generatePackage() %put ### This is short help information for the `generatePackage` macro #; %put #-------------------------------------------------------------------------------#; %put # #; - %put # Macro to generate SAS packages, version `20221212` #; + %put # Macro to generate SAS packages, version `20221215` #; %put # #; %put # A SAS package is a zip file containing a group #; %put # of SAS codes (macros, functions, data steps generating #; @@ -1172,30 +1172,18 @@ data _null_; /* header for multiple functions in one FCMP run */ put "proc fcmp outlib = work.%lowcase(&packageName.fcmp).package ; "; end; - if 1 = FIRST.type and upcase(type)='PROTO' then + if 1 = isProto and upcase(type)='PROTO' then do; /* macro variable for test if cherry picking used PROTO */ put 'data _null_; '; put ' call symputX("cherryPick_PROTO", 0, "L"); '; put 'run; '; + end; + if 1 = FIRST.type and upcase(type)='PROTO' then + do; /* header for multiple functions in one PROTO run */ put "proc proto package = work.%lowcase(&packageName.proto).package ; "; end; - if 1 = FIRST.type and upcase(type)='IMLMODULE' then - do; - /* macro variable for test if cherry picking used IML */ - put 'data _null_; '; - put ' call symputX("cherryPick_IML", 0, "L"); '; - put ' call symputX("cherryPick_IML_ALL", 0, "L"); '; - put 'run; '; - /* header, for IML modules */ - put "proc iml ; "; - end; - if 1 = FIRST.type and upcase(type)='FORMATS' then - do; - /* header, for FORMATS */ - put "proc format lib = work.%lowcase(&packageName.format) ; "; - end; if 1 = isFormat and upcase(type)=:'FORMAT' then do; /* macro variable for test if cherry picking used FORMAT */ @@ -1203,6 +1191,27 @@ data _null_; put ' call symputX("cherryPick_FORMAT", 0, "L"); '; put 'run; '; end; + if 1 = FIRST.type and upcase(type)='FORMATS' then + do; + /* header, for FORMATS */ + put "proc format lib = work.%lowcase(&packageName.format) ; "; + end; + if 1 = isIMLmodule and upcase(type)='IMLMODULE' then + do; + /* macro variable for test if cherry picking used IML */ + put 'data _null_; '; + put ' call symputX("cherryPick_IML_ALL", 0, "L"); '; + put 'run; '; + end; + if 1 = FIRST.type and upcase(type)='IMLMODULE' then + do; + /* macro variable for test if cherry picking used IML */ + put 'data _null_; '; + put ' call symputX("cherryPick_IML", 0, "L"); '; + put 'run; '; + /* header, for IML modules */ + put "proc iml ; "; + end; /* HEADERS for IML, FCMP, and PROTO - end */ put ' ' / @@ -1323,7 +1332,7 @@ data _null_; %end; put '`.;''' / ' !! '' %put The macro generated: '' !! put(dtCASLudf, datetime19.-L) !! ";"' / - ' !! '' %put with the SAS Packages Framework version 20221212.;''' / + ' !! '' %put with the SAS Packages Framework version 20221215.;''' / ' !! '' %put ****************************************************************************;''' / ' !! '' %GOTO theEndOfTheMacro;''' / ' !! '' %end;''' ; @@ -1424,6 +1433,7 @@ data _null_; put 'options cmplib = (%unquote(%sysfunc(compress(' / '%sysfunc(getoption(cmplib))' / ',%str(()) ))));'; + /* proc delete is adde because "empty" PROTO creates dataset too */ put "proc delete data=work.%lowcase(&packageName.proto); run;"; put '%end;'; end; @@ -1495,7 +1505,7 @@ data _null_; %end; put '`.;' / ' %put The macro generated: ''' " !! put(dtIML, datetime19.-L) !! " '''; ' / - ' %put with the SAS Packages Framework version 20221212.; ' / + ' %put with the SAS Packages Framework version 20221215.; ' / ' %put ****************************************************************************; ' / ' %GOTO theEndOfTheMacro; ' / ' %end; ' / @@ -2103,7 +2113,7 @@ data _null_; put ' end ; '; %end; - put 'put "***"; put "* SAS package generated by generatePackage, version 20221212 *"; put "***";'; + put 'put "***"; put "* SAS package generated by generatePackage, version 20221215 *"; put "***";'; put 'run; ' /; diff --git a/SPF/Macros/helppackage.sas b/SPF/Macros/helppackage.sas index 9327dad..8a6a408 100644 --- a/SPF/Macros/helppackage.sas +++ b/SPF/Macros/helppackage.sas @@ -24,7 +24,7 @@ */ )/secure /*** HELP END ***/ -des = 'Macro to get help about SAS package, version 20221212. Run %helpPackage() for help info.' +des = 'Macro to get help about SAS package, version 20221215. Run %helpPackage() for help info.' ; %if (%superq(packageName) = ) OR (%qupcase(&packageName.) = HELP) %then %do; @@ -39,7 +39,7 @@ des = 'Macro to get help about SAS package, version 20221212. Run %helpPackage() %put ### This is short help information for the `helpPackage` macro #; %put #-------------------------------------------------------------------------------#; %put # #; - %put # Macro to get help about SAS packages, version `20221212` #; + %put # Macro to get help about SAS packages, version `20221215` #; %put # #; %put # A SAS package is a zip file containing a group #; %put # of SAS codes (macros, functions, data steps generating #; @@ -169,7 +169,7 @@ TODO: - add MD5(&packageName.) value hash instead "package" word in filenames [DONE] */ -/* Macros to install SAS packages, version 20221212 */ +/* Macros to install SAS packages, version 20221215 */ /* A SAS package is a zip file containing a group of files with SAS code (macros, functions, data steps generating data, etc.) wrapped up together and %INCLUDEed by diff --git a/SPF/Macros/installpackage.sas b/SPF/Macros/installpackage.sas index bc19e0d..44b982d 100644 --- a/SPF/Macros/installpackage.sas +++ b/SPF/Macros/installpackage.sas @@ -14,7 +14,7 @@ /secure minoperator /*** HELP END ***/ -des = 'Macro to install SAS package, version 20221212. Run %%installPackage() for help info.' +des = 'Macro to install SAS package, version 20221215. Run %%installPackage() for help info.' ; %if (%superq(packagesNames) = ) OR (%qupcase(&packagesNames.) = HELP) %then %do; @@ -29,7 +29,7 @@ des = 'Macro to install SAS package, version 20221212. Run %%installPackage() fo %put ### This is short help information for the `installPackage` macro #; %put #--------------------------------------------------------------------------------------------#;; %put # #; - %put # Macro to install SAS packages, version `20221212` #; + %put # Macro to install SAS packages, version `20221215` #; %put # #; %put # A SAS package is a zip file containing a group #; %put # of SAS codes (macros, functions, data steps generating #; @@ -458,7 +458,7 @@ des = 'Macro to install SAS package, version 20221212. Run %%installPackage() fo /* Macro to list SAS packages in packages folder. - Version 20221212 + Version 20221215 A SAS package is a zip file containing a group of SAS codes (macros, functions, data steps generating diff --git a/SPF/Macros/listpackages.sas b/SPF/Macros/listpackages.sas index 0425851..16085b9 100644 --- a/SPF/Macros/listpackages.sas +++ b/SPF/Macros/listpackages.sas @@ -1,7 +1,7 @@ /*+listPackages+*/ %macro listPackages()/secure PARMBUFF -des = 'Macro to list SAS packages from `packages` fileref, type %listPackages(HELP) for help, version 20221212.' +des = 'Macro to list SAS packages from `packages` fileref, type %listPackages(HELP) for help, version 20221215.' ; %if %QUPCASE(&SYSPBUFF.) = %str(%(HELP%)) %then %do; @@ -16,7 +16,7 @@ des = 'Macro to list SAS packages from `packages` fileref, type %listPackages(HE %put ### This is short help information for the `listPackages` macro #; %put #-----------------------------------------------------------------------------------------#;; %put # #; - %put # Macro to list available SAS packages, version `20221212` #; + %put # Macro to list available SAS packages, version `20221215` #; %put # #; %put # A SAS package is a zip file containing a group #; %put # of SAS codes (macros, functions, data steps generating #; @@ -166,7 +166,7 @@ options ls = &ls_tmp. ps = &ps_tmp. ¬es_tmp. &source_tmp.; /* Macro to generate SAS packages. - Version 20221212 + Version 20221215 A SAS package is a zip file containing a group of SAS codes (macros, functions, data steps generating diff --git a/SPF/Macros/loadpackage.sas b/SPF/Macros/loadpackage.sas index e1814bf..f36264d 100644 --- a/SPF/Macros/loadpackage.sas +++ b/SPF/Macros/loadpackage.sas @@ -31,7 +31,7 @@ */ )/secure /*** HELP END ***/ -des = 'Macro to load SAS package, version 20221212. Run %loadPackage() for help info.' +des = 'Macro to load SAS package, version 20221215. Run %loadPackage() for help info.' minoperator ; %if (%superq(packageName) = ) OR (%qupcase(&packageName.) = HELP) %then @@ -47,7 +47,7 @@ minoperator %put ### This is short help information for the `loadPackage` macro #; %put #-------------------------------------------------------------------------------#; %put # #; - %put # Macro to *load* SAS packages, version `20221212` #; + %put # Macro to *load* SAS packages, version `20221215` #; %put # #; %put # A SAS package is a zip file containing a group #; %put # of SAS codes (macros, functions, data steps generating #; diff --git a/SPF/Macros/loadpackages.sas b/SPF/Macros/loadpackages.sas index 083ced5..89dfe9d 100644 --- a/SPF/Macros/loadpackages.sas +++ b/SPF/Macros/loadpackages.sas @@ -11,7 +11,7 @@ */ )/secure /*** HELP END ***/ -des = 'Macro to load multiple SAS packages at one run, version 20221212. Run %loadPackages() for help info.' +des = 'Macro to load multiple SAS packages at one run, version 20221215. Run %loadPackages() for help info.' parmbuff ; %if (%superq(packagesNames) = ) OR (%qupcase(&packagesNames.) = HELP) %then @@ -27,7 +27,7 @@ parmbuff %put ### This is short help information for the `loadPackageS` macro #; %put #-------------------------------------------------------------------------------#; %put # #; - %put # Macro wrapper for the loadPackage macro, version `20221212` #; + %put # Macro wrapper for the loadPackage macro, version `20221215` #; %put # #; %put # A SAS package is a zip file containing a group #; %put # of SAS codes (macros, functions, data steps generating #; diff --git a/SPF/Macros/previewpackage.sas b/SPF/Macros/previewpackage.sas index 50dff20..3073694 100644 --- a/SPF/Macros/previewpackage.sas +++ b/SPF/Macros/previewpackage.sas @@ -23,7 +23,7 @@ */ )/secure /*** HELP END ***/ -des = 'Macro to preview content of a SAS package, version 20221212. Run %previewPackage() for help info.' +des = 'Macro to preview content of a SAS package, version 20221215. Run %previewPackage() for help info.' ; %if (%superq(packageName) = ) OR (%qupcase(&packageName.) = HELP) %then %do; @@ -38,7 +38,7 @@ des = 'Macro to preview content of a SAS package, version 20221212. Run %preview %put ### This is short help information for the `previewPackage` macro #; %put #-------------------------------------------------------------------------------#; %put # #; - %put # Macro to get previwe of a SAS packages, version `20221212` #; + %put # Macro to get previwe of a SAS packages, version `20221215` #; %put # #; %put # A SAS package is a zip file containing a group #; %put # of SAS codes (macros, functions, data steps generating #; diff --git a/SPF/Macros/unloadpackage.sas b/SPF/Macros/unloadpackage.sas index 21cf00a..1b7d060 100644 --- a/SPF/Macros/unloadpackage.sas +++ b/SPF/Macros/unloadpackage.sas @@ -20,7 +20,7 @@ */ )/secure /*** HELP END ***/ -des = 'Macro to unload SAS package, version 20221212. Run %unloadPackage() for help info.' +des = 'Macro to unload SAS package, version 20221215. Run %unloadPackage() for help info.' ; %if (%superq(packageName) = ) OR (%qupcase(&packageName.) = HELP) %then %do; @@ -35,7 +35,7 @@ des = 'Macro to unload SAS package, version 20221212. Run %unloadPackage() for h %put ### This is short help information for the `unloadPackage` macro #; %put #-------------------------------------------------------------------------------#; %put # #; - %put # Macro to unload SAS packages, version `20221212` #; + %put # Macro to unload SAS packages, version `20221215` #; %put # #; %put # A SAS package is a zip file containing a group #; %put # of SAS codes (macros, functions, data steps generating #; diff --git a/SPF/Macros/verifypackage.sas b/SPF/Macros/verifypackage.sas index 1ab2ce3..ab6118f 100644 --- a/SPF/Macros/verifypackage.sas +++ b/SPF/Macros/verifypackage.sas @@ -13,7 +13,7 @@ hashing_file() function, SAS 9.4M6 */ )/secure /*** HELP END ***/ -des = 'Macro to verify SAS package with the hash digest, version 20221212. Run %verifyPackage() for help info.' +des = 'Macro to verify SAS package with the hash digest, version 20221215. Run %verifyPackage() for help info.' ; %if (%superq(packageName) = ) OR (%qupcase(&packageName.) = HELP) %then %do; @@ -28,7 +28,7 @@ des = 'Macro to verify SAS package with the hash digest, version 20221212. Run % %put ### This is short help information for the `verifyPackage` macro #; %put #-------------------------------------------------------------------------------#; %put # #; - %put # Macro to verify SAS package with it hash digest, version `20221212` #; + %put # Macro to verify SAS package with it hash digest, version `20221215` #; %put # #; %put # A SAS package is a zip file containing a group #; %put # of SAS codes (macros, functions, data steps generating #; diff --git a/SPF/SPFinit.md b/SPF/SPFinit.md index d72d4fb..23835b6 100644 --- a/SPF/SPFinit.md +++ b/SPF/SPFinit.md @@ -21,7 +21,7 @@ A **SAS package** is an automatically generated, single, stand alone *zip* file The *purpose of a package* is to be a simple, and easy to access, code sharing medium, which will allow: on the one hand, to separate the code complex dependencies created by the developer from the user experience with the final product and, on the other hand, reduce developer's and user's unnecessary frustration related to a remote deployment process. -In this repository we are presenting the **SAS Packages Framework** which allows to develop and use SAS packages. The latest version of SPF is **`20221212`**. +In this repository we are presenting the **SAS Packages Framework** which allows to develop and use SAS packages. The latest version of SPF is **`20221215`**. **To get started with SAS Packages** try this [**`Getting Started with SAS Packages`**](https://github.com/yabwon/SAS_PACKAGES/blob/main/SPF/Documentation/Getting_Started_with_SAS_Packages.pdf "Getting Started with SAS Packages") presentation (see the `./SPF/Documentation` directory). @@ -39,7 +39,7 @@ After assigning the directory do not change them when using the SPF since it may ## This is short help information for the `installPackage` macro -------------------------------------------------------------------------------------------- - Macro to install SAS packages, version `20221212` + Macro to install SAS packages, version `20221215` A SAS package is a zip file containing a group of SAS codes (macros, functions, data steps generating @@ -141,7 +141,7 @@ filename packages "C:/SAS_PACKAGES"; ## This is short help information for the `helpPackage` macro ------------------------------------------------------------------------------- - Macro to get help about SAS packages, version `20221212` + Macro to get help about SAS packages, version `20221215` A SAS package is a zip file containing a group of SAS codes (macros, functions, data steps generating @@ -212,7 +212,7 @@ filename packages "C:/SAS_PACKAGES"; %* setup a directory for packages; ## This is short help information for the `loadPackage` macro ------------------------------------------------------------------------------- - Macro to *load* SAS packages, version `20221212` + Macro to *load* SAS packages, version `20221215` A SAS package is a zip file containing a group of SAS codes (macros, functions, data steps generating @@ -353,7 +353,7 @@ If created, those macros are automatically deleted when the `%unloadPackage()` m ## This is short help information for the `loadPackageS` macro ------------------------------------------------------------------------------- - Macro wrapper for the loadPackage macro, version `20221212` + Macro wrapper for the loadPackage macro, version `20221215` A SAS package is a zip file containing a group of SAS codes (macros, functions, data steps generating @@ -402,7 +402,7 @@ filename packages "C:/SAS_PACKAGES"; %* setup a directory for packages; ## This is short help information for the `unloadPackage` macro ------------------------------------------------------------------------------- - Macro to unload SAS packages, version `20221212` + Macro to unload SAS packages, version `20221215` A SAS package is a zip file containing a group of SAS codes (macros, functions, data steps generating @@ -467,7 +467,7 @@ filename packages "C:/SAS_PACKAGES"; %* setup a directory for packages; ## This is short help information for the `listPackages` macro ----------------------------------------------------------------------------------------- - Macro to list available SAS packages, version `20221212` + Macro to list available SAS packages, version `20221215` A SAS package is a zip file containing a group of SAS codes (macros, functions, data steps generating @@ -508,7 +508,7 @@ filename packages "C:/SAS_PACKAGES"; %* setup a directory for packages; ## This is short help information for the `verifyPackage` macro ------------------------------------------------------------------------------- - Macro to verify SAS package with it hash digest, version `20221212` + Macro to verify SAS package with it hash digest, version `20221215` A SAS package is a zip file containing a group of SAS codes (macros, functions, data steps generating @@ -562,7 +562,7 @@ filename packages "C:/SAS_PACKAGES"; %* set-up a directory for packages; ## This is short help information for the `previewPackage` macro ------------------------------------------------------------------------------- - Macro to get previwe of a SAS packages, version `20221212` + Macro to get previwe of a SAS packages, version `20221215` A SAS package is a zip file containing a group of SAS codes (macros, functions, data steps generating @@ -629,7 +629,7 @@ filename packages "C:/SAS_PACKAGES"; %* setup a directory for packages; ## This is short help information for the `generatePackage` macro ------------------------------------------------------------------------------- - Macro to generate SAS packages, version `20221212` + Macro to generate SAS packages, version `20221215` A SAS package is a zip file containing a group of SAS codes (macros, functions, data steps generating @@ -813,7 +813,7 @@ All files have to have `.sas` extension. Other files are ignored. ## This is short help information for the `extendPackagesFileref` macro ----------------------------------------------------------------------------------------- - Macro to list directories pointed by 'packages' fileref, version `20221212` + Macro to list directories pointed by 'packages' fileref, version `20221215` A SAS package is a zip file containing a group of SAS codes (macros, functions, data steps generating diff --git a/SPF/SPFinit.sas b/SPF/SPFinit.sas index 77087ad..c3dd9ce 100644 --- a/SPF/SPFinit.sas +++ b/SPF/SPFinit.sas @@ -42,7 +42,7 @@ - to unload, or - to generate SAS packages. - Version 20221212. + Version 20221215. See examples below. A SAS package is a zip file containing a group of files @@ -86,7 +86,7 @@ */ )/secure /*** HELP END ***/ -des = 'Macro to load SAS package, version 20221212. Run %loadPackage() for help info.' +des = 'Macro to load SAS package, version 20221215. Run %loadPackage() for help info.' minoperator ; %if (%superq(packageName) = ) OR (%qupcase(&packageName.) = HELP) %then @@ -102,7 +102,7 @@ minoperator %put ### This is short help information for the `loadPackage` macro #; %put #-------------------------------------------------------------------------------#; %put # #; - %put # Macro to *load* SAS packages, version `20221212` #; + %put # Macro to *load* SAS packages, version `20221215` #; %put # #; %put # A SAS package is a zip file containing a group #; %put # of SAS codes (macros, functions, data steps generating #; @@ -329,7 +329,7 @@ minoperator */ )/secure /*** HELP END ***/ -des = 'Macro to unload SAS package, version 20221212. Run %unloadPackage() for help info.' +des = 'Macro to unload SAS package, version 20221215. Run %unloadPackage() for help info.' ; %if (%superq(packageName) = ) OR (%qupcase(&packageName.) = HELP) %then %do; @@ -344,7 +344,7 @@ des = 'Macro to unload SAS package, version 20221212. Run %unloadPackage() for h %put ### This is short help information for the `unloadPackage` macro #; %put #-------------------------------------------------------------------------------#; %put # #; - %put # Macro to unload SAS packages, version `20221212` #; + %put # Macro to unload SAS packages, version `20221215` #; %put # #; %put # A SAS package is a zip file containing a group #; %put # of SAS codes (macros, functions, data steps generating #; @@ -489,7 +489,7 @@ des = 'Macro to unload SAS package, version 20221212. Run %unloadPackage() for h */ )/secure /*** HELP END ***/ -des = 'Macro to get help about SAS package, version 20221212. Run %helpPackage() for help info.' +des = 'Macro to get help about SAS package, version 20221215. Run %helpPackage() for help info.' ; %if (%superq(packageName) = ) OR (%qupcase(&packageName.) = HELP) %then %do; @@ -504,7 +504,7 @@ des = 'Macro to get help about SAS package, version 20221212. Run %helpPackage() %put ### This is short help information for the `helpPackage` macro #; %put #-------------------------------------------------------------------------------#; %put # #; - %put # Macro to get help about SAS packages, version `20221212` #; + %put # Macro to get help about SAS packages, version `20221215` #; %put # #; %put # A SAS package is a zip file containing a group #; %put # of SAS codes (macros, functions, data steps generating #; @@ -634,7 +634,7 @@ TODO: - add MD5(&packageName.) value hash instead "package" word in filenames [DONE] */ -/* Macros to install SAS packages, version 20221212 */ +/* Macros to install SAS packages, version 20221215 */ /* A SAS package is a zip file containing a group of files with SAS code (macros, functions, data steps generating data, etc.) wrapped up together and %INCLUDEed by @@ -657,7 +657,7 @@ TODO: /secure minoperator /*** HELP END ***/ -des = 'Macro to install SAS package, version 20221212. Run %%installPackage() for help info.' +des = 'Macro to install SAS package, version 20221215. Run %%installPackage() for help info.' ; %if (%superq(packagesNames) = ) OR (%qupcase(&packagesNames.) = HELP) %then %do; @@ -672,7 +672,7 @@ des = 'Macro to install SAS package, version 20221212. Run %%installPackage() fo %put ### This is short help information for the `installPackage` macro #; %put #--------------------------------------------------------------------------------------------#;; %put # #; - %put # Macro to install SAS packages, version `20221212` #; + %put # Macro to install SAS packages, version `20221215` #; %put # #; %put # A SAS package is a zip file containing a group #; %put # of SAS codes (macros, functions, data steps generating #; @@ -1101,7 +1101,7 @@ des = 'Macro to install SAS package, version 20221212. Run %%installPackage() fo /* Macro to list SAS packages in packages folder. - Version 20221212 + Version 20221215 A SAS package is a zip file containing a group of SAS codes (macros, functions, data steps generating @@ -1122,7 +1122,7 @@ des = 'Macro to install SAS package, version 20221212. Run %%installPackage() fo /*+listPackages+*/ %macro listPackages()/secure PARMBUFF -des = 'Macro to list SAS packages from `packages` fileref, type %listPackages(HELP) for help, version 20221212.' +des = 'Macro to list SAS packages from `packages` fileref, type %listPackages(HELP) for help, version 20221215.' ; %if %QUPCASE(&SYSPBUFF.) = %str(%(HELP%)) %then %do; @@ -1137,7 +1137,7 @@ des = 'Macro to list SAS packages from `packages` fileref, type %listPackages(HE %put ### This is short help information for the `listPackages` macro #; %put #-----------------------------------------------------------------------------------------#;; %put # #; - %put # Macro to list available SAS packages, version `20221212` #; + %put # Macro to list available SAS packages, version `20221215` #; %put # #; %put # A SAS package is a zip file containing a group #; %put # of SAS codes (macros, functions, data steps generating #; @@ -1287,7 +1287,7 @@ options ls = &ls_tmp. ps = &ps_tmp. ¬es_tmp. &source_tmp.; /* Macro to generate SAS packages. - Version 20221212 + Version 20221215 A SAS package is a zip file containing a group of SAS codes (macros, functions, data steps generating @@ -1324,7 +1324,7 @@ options ls = &ls_tmp. ps = &ps_tmp. ¬es_tmp. &source_tmp.; default value 1 means "delete tests work" */ )/ secure minoperator /*** HELP END ***/ -des = 'Macro to generate SAS packages, version 20221212. Run %generatePackage() for help info.' +des = 'Macro to generate SAS packages, version 20221215. Run %generatePackage() for help info.' ; %if (%superq(filesLocation) = ) OR (%qupcase(&filesLocation.) = HELP) %then %do; @@ -1339,7 +1339,7 @@ des = 'Macro to generate SAS packages, version 20221212. Run %generatePackage() %put ### This is short help information for the `generatePackage` macro #; %put #-------------------------------------------------------------------------------#; %put # #; - %put # Macro to generate SAS packages, version `20221212` #; + %put # Macro to generate SAS packages, version `20221215` #; %put # #; %put # A SAS package is a zip file containing a group #; %put # of SAS codes (macros, functions, data steps generating #; @@ -2473,30 +2473,18 @@ data _null_; /* header for multiple functions in one FCMP run */ put "proc fcmp outlib = work.%lowcase(&packageName.fcmp).package ; "; end; - if 1 = FIRST.type and upcase(type)='PROTO' then + if 1 = isProto and upcase(type)='PROTO' then do; /* macro variable for test if cherry picking used PROTO */ put 'data _null_; '; put ' call symputX("cherryPick_PROTO", 0, "L"); '; put 'run; '; + end; + if 1 = FIRST.type and upcase(type)='PROTO' then + do; /* header for multiple functions in one PROTO run */ put "proc proto package = work.%lowcase(&packageName.proto).package ; "; end; - if 1 = FIRST.type and upcase(type)='IMLMODULE' then - do; - /* macro variable for test if cherry picking used IML */ - put 'data _null_; '; - put ' call symputX("cherryPick_IML", 0, "L"); '; - put ' call symputX("cherryPick_IML_ALL", 0, "L"); '; - put 'run; '; - /* header, for IML modules */ - put "proc iml ; "; - end; - if 1 = FIRST.type and upcase(type)='FORMATS' then - do; - /* header, for FORMATS */ - put "proc format lib = work.%lowcase(&packageName.format) ; "; - end; if 1 = isFormat and upcase(type)=:'FORMAT' then do; /* macro variable for test if cherry picking used FORMAT */ @@ -2504,6 +2492,27 @@ data _null_; put ' call symputX("cherryPick_FORMAT", 0, "L"); '; put 'run; '; end; + if 1 = FIRST.type and upcase(type)='FORMATS' then + do; + /* header, for FORMATS */ + put "proc format lib = work.%lowcase(&packageName.format) ; "; + end; + if 1 = isIMLmodule and upcase(type)='IMLMODULE' then + do; + /* macro variable for test if cherry picking used IML */ + put 'data _null_; '; + put ' call symputX("cherryPick_IML_ALL", 0, "L"); '; + put 'run; '; + end; + if 1 = FIRST.type and upcase(type)='IMLMODULE' then + do; + /* macro variable for test if cherry picking used IML */ + put 'data _null_; '; + put ' call symputX("cherryPick_IML", 0, "L"); '; + put 'run; '; + /* header, for IML modules */ + put "proc iml ; "; + end; /* HEADERS for IML, FCMP, and PROTO - end */ put ' ' / @@ -2624,7 +2633,7 @@ data _null_; %end; put '`.;''' / ' !! '' %put The macro generated: '' !! put(dtCASLudf, datetime19.-L) !! ";"' / - ' !! '' %put with the SAS Packages Framework version 20221212.;''' / + ' !! '' %put with the SAS Packages Framework version 20221215.;''' / ' !! '' %put ****************************************************************************;''' / ' !! '' %GOTO theEndOfTheMacro;''' / ' !! '' %end;''' ; @@ -2725,6 +2734,7 @@ data _null_; put 'options cmplib = (%unquote(%sysfunc(compress(' / '%sysfunc(getoption(cmplib))' / ',%str(()) ))));'; + /* proc delete is adde because "empty" PROTO creates dataset too */ put "proc delete data=work.%lowcase(&packageName.proto); run;"; put '%end;'; end; @@ -2796,7 +2806,7 @@ data _null_; %end; put '`.;' / ' %put The macro generated: ''' " !! put(dtIML, datetime19.-L) !! " '''; ' / - ' %put with the SAS Packages Framework version 20221212.; ' / + ' %put with the SAS Packages Framework version 20221215.; ' / ' %put ****************************************************************************; ' / ' %GOTO theEndOfTheMacro; ' / ' %end; ' / @@ -3404,7 +3414,7 @@ data _null_; put ' end ; '; %end; - put 'put "***"; put "* SAS package generated by generatePackage, version 20221212 *"; put "***";'; + put 'put "***"; put "* SAS package generated by generatePackage, version 20221215 *"; put "***";'; put 'run; ' /; @@ -4268,7 +4278,7 @@ TODO: (in Polish) */ )/secure /*** HELP END ***/ -des = 'Macro to load multiple SAS packages at one run, version 20221212. Run %loadPackages() for help info.' +des = 'Macro to load multiple SAS packages at one run, version 20221215. Run %loadPackages() for help info.' parmbuff ; %if (%superq(packagesNames) = ) OR (%qupcase(&packagesNames.) = HELP) %then @@ -4284,7 +4294,7 @@ parmbuff %put ### This is short help information for the `loadPackageS` macro #; %put #-------------------------------------------------------------------------------#; %put # #; - %put # Macro wrapper for the loadPackage macro, version `20221212` #; + %put # Macro wrapper for the loadPackage macro, version `20221215` #; %put # #; %put # A SAS package is a zip file containing a group #; %put # of SAS codes (macros, functions, data steps generating #; @@ -4381,7 +4391,7 @@ parmbuff hashing_file() function, SAS 9.4M6 */ )/secure /*** HELP END ***/ -des = 'Macro to verify SAS package with the hash digest, version 20221212. Run %verifyPackage() for help info.' +des = 'Macro to verify SAS package with the hash digest, version 20221215. Run %verifyPackage() for help info.' ; %if (%superq(packageName) = ) OR (%qupcase(&packageName.) = HELP) %then %do; @@ -4396,7 +4406,7 @@ des = 'Macro to verify SAS package with the hash digest, version 20221212. Run % %put ### This is short help information for the `verifyPackage` macro #; %put #-------------------------------------------------------------------------------#; %put # #; - %put # Macro to verify SAS package with it hash digest, version `20221212` #; + %put # Macro to verify SAS package with it hash digest, version `20221215` #; %put # #; %put # A SAS package is a zip file containing a group #; %put # of SAS codes (macros, functions, data steps generating #; @@ -4567,7 +4577,7 @@ des = 'Macro to verify SAS package with the hash digest, version 20221212. Run % */ )/secure /*** HELP END ***/ -des = 'Macro to preview content of a SAS package, version 20221212. Run %previewPackage() for help info.' +des = 'Macro to preview content of a SAS package, version 20221215. Run %previewPackage() for help info.' ; %if (%superq(packageName) = ) OR (%qupcase(&packageName.) = HELP) %then %do; @@ -4582,7 +4592,7 @@ des = 'Macro to preview content of a SAS package, version 20221212. Run %preview %put ### This is short help information for the `previewPackage` macro #; %put #-------------------------------------------------------------------------------#; %put # #; - %put # Macro to get previwe of a SAS packages, version `20221212` #; + %put # Macro to get previwe of a SAS packages, version `20221215` #; %put # #; %put # A SAS package is a zip file containing a group #; %put # of SAS codes (macros, functions, data steps generating #; @@ -4709,7 +4719,7 @@ des = 'Macro to preview content of a SAS package, version 20221212. Run %preview when empty the "packages" value is used */ )/secure /*** HELP END ***/ -des = 'Macro to list directories pointed by "packages" fileref, version 20221212. Run %extendPackagesFileref(HELP) for help info.' +des = 'Macro to list directories pointed by "packages" fileref, version 20221215. Run %extendPackagesFileref(HELP) for help info.' ; %if %QUPCASE(&packages.) = HELP %then @@ -4725,7 +4735,7 @@ des = 'Macro to list directories pointed by "packages" fileref, version 20221212 %put ### This is short help information for the `extendPackagesFileref` macro #; %put #-----------------------------------------------------------------------------------------#;; %put # #; - %put # Macro to list directories pointed by 'packages' fileref, version `20221212` #; + %put # Macro to list directories pointed by 'packages' fileref, version `20221215` #; %put # #; %put # A SAS package is a zip file containing a group #; %put # of SAS codes (macros, functions, data steps generating #; diff --git a/packages/README.md b/packages/README.md index 8318435..f51f65c 100644 --- a/packages/README.md +++ b/packages/README.md @@ -10,7 +10,7 @@ Packages: --- -- **SQLinDS**\[2.2.3\], based on Mike Rhoads' article *Use the Full Power of SAS in Your Function-Style Macros*. The package allows to write SQL queries in the data step, e.g. +- **SQLinDS**\[2.2.4\], based on Mike Rhoads' article *Use the Full Power of SAS in Your Function-Style Macros*. The package allows to write SQL queries in the data step, e.g. ```sas data class; set %SQL( @@ -22,21 +22,13 @@ data class; WH = weight + height; run; ``` -SHA256 digest for SQLinDS: D5A66E60602270E5FB1E592FA3E0C2F2C640BC077FE799A2223CB9BA275F6F47 +SHA256 digest for SQLinDS: 42677CEBB0778A6B72DE9C0071B66A345811EE470289E3847D7737F782E709E0 [Documentation for SQLinDS](https://github.com/yabwon/SAS_PACKAGES/blob/main/packages/sqlinds.md "Documentation for SQLinDS") --- -- **MacroCore**\[1\], a macro library for SAS application developers. Over 100 macros for Base SAS, metadata, and Viya. Provided by the [SASjs framework](https://sasjs.io "SASjs framework"). - -SHA256 digest for MacroCore: A23C29529F3CE7D0C8BEE9545C5D22D5B5594907547374A5135B8E5A48D7687B - -[Documentation for MacroCore](https://core.sasjs.io "Documentation for MacroCore") - ---- - -- **DFA** (Dynamic Function Arrays)\[0.5.3\], contains set of macros and FCMP functions which implement: a dynamically allocated array, a stack, a fifo queue, an ordered stack, and a priority queue, run `%helpPackage(DFA,createDFArray)` to find examples. +- **DFA** (Dynamic Function Arrays)\[0.5.4\], contains set of macros and FCMP functions which implement: a dynamically allocated array, a stack, a fifo queue, an ordered stack, and a priority queue, run `%helpPackage(DFA,createDFArray)` to find examples. ```sas %createDFArray(ArrDynamic, resizefactor=17); @@ -63,13 +55,13 @@ data _null_; end; run; ``` -SHA256 digest for DFA: 7520CF21CBF1FD4AD2BC05C5DD343E508FCEA507575EBC060B4AD322FB80AB04 +SHA256 digest for DFA: 6DEB02BE1C30453FBC688AF1F561709C7D6BF10B3B67988B238853A2A9D53034 [Documentation for DFA](https://github.com/yabwon/SAS_PACKAGES/blob/main/packages/dfa.md "Documentation for DFA") --- -- **macroArray**\[1.0.3\], implementation of an array concept in a macro language, e.g. +- **macroArray**\[1.0.4\], implementation of an array concept in a macro language, e.g. ```sas %array(ABC[17] (111:127), macarray=Y); @@ -88,13 +80,13 @@ SHA256 digest for DFA: 7520CF21CBF1FD4AD2BC05C5DD343E508FCEA507575EBC060B4AD322F which = 1:H:2 ); ``` -SHA256 digest for macroArray: 244B88C82AD7E6E93B8B85BC701ECDDB20B68F38B16C500EE9B49E1167ADC298 +SHA256 digest for macroArray: 8584C249C308B5E8B620ED5F695BC58CD426172FB2EACD5FF9C6899F9DE2B470 [Documentation for macroArray](https://github.com/yabwon/SAS_PACKAGES/blob/main/packages/macroarray.md "Documentation for macroArray") --- -- **BasePlus**\[1.17.3\] adds a bunch of functionalities I am missing in BASE SAS, such as: +- **BasePlus**\[1.18.4\] adds a bunch of functionalities I am missing in BASE SAS, such as: ```sas call arrMissToRight(myArray); call arrFillMiss(17, myArray); @@ -112,25 +104,25 @@ format x bool.; %zipLibrary(sashelp,libOut=work) ``` -SHA256 digest for BasePlus: D8DBB7CC5952331FA59FEBBBDD15BC543FE3C89A8BA9150FE6AF5E412868EBE7 +SHA256 digest for BasePlus: A6F1977DC4EC22A39DDC7BCE68CF562AF54351A3D385D488EC3067B5A7C0F3CB [Documentation for BasePlus](https://github.com/yabwon/SAS_PACKAGES/blob/main/packages/baseplus.md "Documentation for BasePlus") --- -- **GSM** (Generate Secure Macros)\[0.20.3\], package allows +- **GSM** (Generate Secure Macros)\[0.20.4\], package allows to create secured macros stored in SAS Proc FCMP functions. The dataset with functions can be shared between different operating systems and allows to generate macros on site without showing their code. -SHA256 digest for GSM: 50D8340E080BEA459E68BE315146AD3B809930DB8DC7B23C7A492C3815ACD83F +SHA256 digest for GSM: 83EC349DF97EFA71187536E8CC6CD62215CE675D20DA355E14D4ACE3FBC6D524 [Documentation for GSM](https://github.com/yabwon/SAS_PACKAGES/blob/main/packages/gsm.md "Documentation for GSM") --- -- **dynMacroArray**\[0.2.3\], set of macros (wrappers for a hash table) emulating dynamic array in the data step (macro predecessor of DFA). Development of this package is currently on hold. +- **dynMacroArray**\[0.2.4\], set of macros (wrappers for a hash table) emulating dynamic array in the data step (macro predecessor of DFA). Development of this package is currently on hold. -SHA256 digest for dynMacroArray: 440920272D1838505EA5C033B1C448C612DE2FCCFD57F157BB90ED980E4001CC +SHA256 digest for dynMacroArray: 7800F36877DC0B9A94B1AC8FFDF8B43ADB216F11B5B26343E41165E7F5E32FC0 --- diff --git a/packages/SHA256_for_packages.txt b/packages/SHA256_for_packages.txt index 7e077a1..2a55fc0 100644 --- a/packages/SHA256_for_packages.txt +++ b/packages/SHA256_for_packages.txt @@ -1,3 +1,12 @@ +/* 20221215 */ +BasePlus: A6F1977DC4EC22A39DDC7BCE68CF562AF54351A3D385D488EC3067B5A7C0F3CB +DFA: 6DEB02BE1C30453FBC688AF1F561709C7D6BF10B3B67988B238853A2A9D53034 +dynMacroArray: 7800F36877DC0B9A94B1AC8FFDF8B43ADB216F11B5B26343E41165E7F5E32FC0 +GSM: 83EC349DF97EFA71187536E8CC6CD62215CE675D20DA355E14D4ACE3FBC6D524 +macroArray: 8584C249C308B5E8B620ED5F695BC58CD426172FB2EACD5FF9C6899F9DE2B470 +SQLinDS: 42677CEBB0778A6B72DE9C0071B66A345811EE470289E3847D7737F782E709E0 + + /* 20221125 */ BasePlus: D8DBB7CC5952331FA59FEBBBDD15BC543FE3C89A8BA9150FE6AF5E412868EBE7 DFA: 7520CF21CBF1FD4AD2BC05C5DD343E508FCEA507575EBC060B4AD322FB80AB04 diff --git a/packages/baseplus.md b/packages/baseplus.md index 2f2173a..b856736 100644 --- a/packages/baseplus.md +++ b/packages/baseplus.md @@ -49,14 +49,14 @@ * [`%LDsNm()` macro](#ldsnm-macro) * [`%LVarNm()` macro](#lvarnm-macro) * [`%LVarNmLab()` macro](#lvarnmlab-macro) - + * [`%bpPIPE()` macro](#bppipe-macro) * [License](#license) --- -# The BasePlus package [ver. 1.17.3] ############################################### +# The BasePlus package [ver. 1.18.4] ############################################### The **BasePlus** package implements useful functions and functionalities I miss in the BASE SAS. @@ -220,63 +220,69 @@ data MyNextDataset; run; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +**Example 12**: List, to the log, content of `home` directory. +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas +%bpPIPE(ls -la ~/) +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + --- Package contains: -1. macro deduplistc -2. macro deduplistp -3. macro deduplists -4. macro deduplistx -5. macro functionexists -6. macro getvars -7. macro ldsn -8. macro ldsnm -9. macro lvarnm -10. macro lvarnmlab -11. macro qdeduplistx -12. macro qgetvars -13. macro qzipevalf -14. macro raincloudplot -15. macro symdelglobal -16. macro unziplibrary -17. macro zipevalf -18. macro ziplibrary -19. format bool -20. format boolz -21. format ceil -22. format floor -23. format int -24. functions arrfill -25. functions arrfillc -26. functions arrmissfill -27. functions arrmissfillc -28. functions arrmisstoleft -29. functions arrmisstoleftc -30. functions arrmisstoright -31. functions arrmisstorightc -32. functions bracketsc -33. functions bracketsn -34. functions catxfc -35. functions catxfi -36. functions catxfj -37. functions catxfn -38. functions deldataset -39. functions semicolonc -40. functions semicolonn -41. format brackets -42. format semicolon -43. proto qsortincbyprocproto -44. functions frommissingtonumberbs -45. functions fromnumbertomissing -46. functions quicksort4notmiss -47. functions quicksorthash -48. functions quicksorthashsddv -49. functions quicksortlight +1. macro bppipe +2. macro deduplistc +3. macro deduplistp +4. macro deduplists +5. macro deduplistx +6. macro functionexists +7. macro getvars +8. macro ldsn +9. macro ldsnm +10. macro lvarnm +11. macro lvarnmlab +12. macro qdeduplistx +13. macro qgetvars +14. macro qzipevalf +15. macro raincloudplot +16. macro symdelglobal +17. macro unziplibrary +18. macro zipevalf +19. macro ziplibrary +20. format bool +21. format boolz +22. format ceil +23. format floor +24. format int +25. functions arrfill +26. functions arrfillc +27. functions arrmissfill +28. functions arrmissfillc +29. functions arrmisstoleft +30. functions arrmisstoleftc +31. functions arrmisstoright +32. functions arrmisstorightc +33. functions bracketsc +34. functions bracketsn +35. functions catxfc +36. functions catxfi +37. functions catxfj +38. functions catxfn +39. functions deldataset +40. functions semicolonc +41. functions semicolonn +42. format brackets +43. format semicolon +44. proto qsortincbyprocproto +45. functions frommissingtonumberbs +46. functions fromnumbertomissing +47. functions quicksort4notmiss +48. functions quicksorthash +49. functions quicksorthashsddv +50. functions quicksortlight -*SAS package generated by generatePackage, version 20221125* +*SAS package generated by generatePackage, version 20221215* The SHA256 hash digest for package BasePlus: -`D8DBB7CC5952331FA59FEBBBDD15BC543FE3C89A8BA9150FE6AF5E412868EBE7` +`A6F1977DC4EC22A39DDC7BCE68CF562AF54351A3D385D488EC3067B5A7C0F3CB` --- # Content description ############################################################################################ @@ -3934,6 +3940,42 @@ The basic syntax is the following, the `<...>` means optional parameters: --- +## >>> `%bpPIPE()` macro: <<< ####################### + +The bpPIPE() [Base Plus PIPE] macro executes OS command +and print to the log output of the execution. + +Under the hood it uses `_` filename reference to PIPE device. + +### SYNTAX: ################################################################### + +The basic syntax is the following, the `<...>` means optional parameters: +~~~~~~~~~~~~~~~~~~~~~~~sas +%bpPIPE( ) +~~~~~~~~~~~~~~~~~~~~~~~ + +**Arguments description**: + +* **NO Arguments** - Everything inside brackets is treated as an OS command. + +--- + +### EXAMPLES AND USECASES: #################################################### + +**EXAMPLE 1.** List, to the log, content of D and C drives: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + %bpPIPE(D: & dir & dir "C:\") +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +**EXAMPLE 2.** List, to the log, content of `home` directory: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + %bpPIPE(ls -halt ~/) +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +--- + + ## License #################################################################### Copyright (c) since 2020 Bartosz Jablonski diff --git a/packages/baseplus.zip b/packages/baseplus.zip index eb85b9d18e2975647ded85e8d84a6d19a862cbba..1334c44e02746c77498a0919d263fd9c7968af29 100644 GIT binary patch delta 15225 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 Jf^<00@9DH9p#$CB~;4Z~y>0egXjtXoDBy z;Ty`MX*f4uA5R;B+;K*7rct&pb>;O!O95ELxHFx= zyKYiptWBZYa!7S8D%8_{Xt?mBGn8Zcj;?djaA6)h2UZvtn&V9+$DkJ(Jw?Tyh@AMT~jNw@TH0g@R~NPNEyuY2nq*NNc}L7C?|meGDN z)}PnPTCR6!eWBqW4=5XHX54jMUVF0Wk4&YFd7E)tWT<}mYG}ZSQkV8}>{FbZY!ufk zgWvK4p+E@{LEI==cB3v4P02~o#+MvqPN1kP9+SSbfZ$twF`T)ETc6& zLzg^L1w2kp<3Ws29I=Ig??Dk1b)2C zap5MmsuIDrtNYNmB&z9o0xdi2<0c~Bg*$AvE60;wLsM+{-lU1%q`L5-JWC+Mp;IJR1E~M&r zcR&~yZN;+QXPp`kcPH_tul(Uh#U78PbEM+8U!ck1mR+aE*S2!Mk9>DBY`E!0H89vHfsEV*ewk@Z|_Q0d2(b?lddQ>S}T34ofsjZm|YO9Z6vDHzd*Nvf>c+ zYJ0Pzd`Fb+y0mZ6=Or0qK+Fu{S|^yJR{e2`QIu~l99}u;#Cu`kvK-uQ_8gD<*tpPp zZFfG3)=ZT@-s)?oW*y0~cw?;0n`GNpb(?e3mc1B74JC|9eIR27bq~ZQzNx;4589o< zgBnXiFBrf%{hCxcQ?kXSRZ8qG{{1^&6sn}N3C@mS3Hbcl( zNDZ?ArVjSbE%Io(_FfF1D-laM%j{O?Gx2}k6J@qCXH)(HMz0rSu$MaS=Fj0zltT!D z=NDRZ$*uvAv6I36vSzkC=+<8jFlp=a=&qMy{gnSkjIKHvG}Pc4l2%*y_IfR@!%>Qb zKgggPJ;Mp+7d`*Sqx+BkN;aV3n7o@bBnD>F>Z6YY#ik#tV3?>@D^i@~Fq*?P9Yi?` zNejMtW!;#L)IKmf27@_+5k)(#klFA3Pf?I{YP`!}jYX$oGFz<>@d{Zc@3UTD#+Duh zs69rhJ#uv0f{<&q;0Uza^;jlT*|}F1nI?*q_EfU=+DIwT&2iWr_xfdjc^f2^o5M;g z1oLFnL~%%0%*i~RxoB3b`1(^5P0?#z~jfBDm3luX~NEiEt34yP0Z zB>0q3txQSt8iY@Q3ug-o>X<{^@6WTO?CA+6JMXsf0zkB|sA@ow(yER;9&NECJzuK0 z`N0$&Gozpd#lGeF*|HYf5@~%RWQF?OS?BsQD>$MtVv=zI0#XSoU!?DKj^>D#+Y~m+ z{9%=9>+VYR*NYk|4QAp!&W9ovoHT)Lp2s! ztj;fKKHX{pO@?I_G#imt!*571aWL&;N_LbpuTwyHUTL(i?8ALZ1|vvDs<@b-Nrv?< z0qF+&@;jUxp9A4dNAxF=JP_CM-u=?~K+n-u@y)zmZGkb2SAgu7V6YAnLN= zIlLNZX{B4>mk6dpCMHi=RhqN3Wt4g4I95l<9xN)GjZT^NJ7H=}JXKq|f*rtM#%g8jlHEm52ZOhZSCPnFR?{$3c(l37W{3d0uL} zy?9Jo2ACeWj+VU2p5b&!mPr(sbD7^YS_X_r5Jt9rjg5jxrMq+z>lO(e90AI+R3xv# z8~t+b1?bah_%1TaPGof-OpM+lAz^>2BN}_yT2UsSA12hEGV?KBLe<2T^_?jx<^MgcQhBNF9fAk-NVq

h4nk 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 diff --git a/packages/dfa.md b/packages/dfa.md index a47dacd..d0113a0 100644 --- a/packages/dfa.md +++ b/packages/dfa.md @@ -18,7 +18,7 @@ --- -# The DFA package [ver. 0.5.3] ############################################### +# The DFA package [ver. 0.5.4] ############################################### The **DFA** (a.k.a. *Dynamic Function Array*) package implements: - dynamic numeric and character arrays, @@ -52,10 +52,10 @@ Package contains: 12. exec generatearrays 13. clean generatearrays -*SAS package generated by generatePackage, version 20221125* +*SAS package generated by generatePackage, version 20221215* The SHA256 hash digest for package BasePlus: -`7520CF21CBF1FD4AD2BC05C5DD343E508FCEA507575EBC060B4AD322FB80AB04` +`6DEB02BE1C30453FBC688AF1F561709C7D6BF10B3B67988B238853A2A9D53034` --- # Content description ############################################################################################ diff --git a/packages/dfa.zip b/packages/dfa.zip index 8cadb25dd94963e465d31a8adf86a369b68570dc..9dbdf6224d1747ca846c490b30b4f7fbde801342 100644 GIT binary patch delta 9836 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 ############################################### +# The GSM package [ver. 0.20.4] ############################################### The **GSM** (a.k.a. *Generate Secure Macros*) package allows to create secured macros stored in SAS Proc FCMP functions. @@ -91,10 +91,10 @@ Package contains: Required SAS Components: `Base SAS Software` -*SAS package generated by generatePackage, version 20221125* +*SAS package generated by generatePackage, version 20221215* The SHA256 hash digest for package GSM: -`50D8340E080BEA459E68BE315146AD3B809930DB8DC7B23C7A492C3815ACD83F` +`83EC349DF97EFA71187536E8CC6CD62215CE675D20DA355E14D4ACE3FBC6D524` ## >>> `%GSM()` macro: <<< ####################### diff --git a/packages/gsm.zip b/packages/gsm.zip index 41156ed037192464876ecb8ab4362b1c8f1d3daf..eb903d94b54214891a8530da92787f37eca1e0c6 100644 GIT binary patch delta 8310 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 VK=l7{s^^0`O1wqBkod>?zW{^xzu5o) delta 7524 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 Y5`<8l9DuY%ZpySI2{hO{p}&d#2N=OG3IG5A diff --git a/packages/macroarray.md b/packages/macroarray.md index 6fe5166..ffa3fb7 100644 --- a/packages/macroarray.md +++ b/packages/macroarray.md @@ -19,7 +19,7 @@ --- -# The macroArray package [ver. 1.0.3] ############################################### +# The macroArray package [ver. 1.0.4] ############################################### The **macroArray** package implements a macro array facility: - `%array()`, @@ -75,10 +75,10 @@ Package contains: Required SAS Components: *Base SAS Software* -*SAS package generated by generatePackage, version 20221125* +*SAS package generated by generatePackage, version 20221215* The SHA256 hash digest for package macroArray: -`440920272D1838505EA5C033B1C448C612DE2FCCFD57F157BB90ED980E4001CC` +`8584C249C308B5E8B620ED5F695BC58CD426172FB2EACD5FF9C6899F9DE2B470` --- # Content description ############################################################################################ diff --git a/packages/macroarray.zip b/packages/macroarray.zip index 68d305c1ed3bb882d9a31d3b6ec4060c0f3f8f1c..9f668e9494e4a48c2d0b4440a73887434443e224 100644 GIT binary patch delta 9736 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℘Kpa_rf&$^c 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 delta 8933 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 diff --git a/packages/sqlinds.md b/packages/sqlinds.md index 62ea5a1..8982c00 100644 --- a/packages/sqlinds.md +++ b/packages/sqlinds.md @@ -8,7 +8,7 @@ --- -# The SQLinDS package [ver. 2.2.3] ############################################### +# The SQLinDS package [ver. 2.2.4] ############################################### The **SQLinDS** package is an implementation of the *macro-function-sandwich* concept introduced in the @@ -46,10 +46,10 @@ Package contains: Required SAS Components: *Base SAS Software* -*SAS package generated by generatePackage, version 20221125* +*SAS package generated by generatePackage, version 20221215* The SHA256 hash digest for package SQLinDS: -`D5A66E60602270E5FB1E592FA3E0C2F2C640BC077FE799A2223CB9BA275F6F47` +`42677CEBB0778A6B72DE9C0071B66A345811EE470289E3847D7737F782E709E0` --- # Content description ############################################################################################ diff --git a/packages/sqlinds.zip b/packages/sqlinds.zip index 7ac4fd1732718471497068de9593227783f0b698..9f27c100b61567b590c1d01f2ad00c9b808638db 100644 GIT binary patch delta 8605 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 RL+i6b$T;ZXkvRU2^IwUTb3p(A delta 7942 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⪼+OUxR0UEj@?r1o={-$WhF1X8muDnw8k;XDLSx;>#%A2_G=<( z=KTv`*XpFASHPxECRezMS&=p%UN<_PekyXJC7(>r-(J5AP{M%%5xQQVy}&F@V& z@i|&6C7qcfC}VjevFT7|bu`=cN~IWqHl0luROUCx4^KfMhUuN`dIRlBC|;F`N% zXV9Zoj2`5OP~|+58A=zx+e`v-2H#Jtl=q1V8|d=JlV#g=uOBs$sTD#~$Z=t#9@H#I zCl~CHn<_S`2RiQg6IZGLSUZvf=8#Gk<#_q#yK7VEdrz#$EPv^gvWpw4CR#Z8^2CaY zC=^1{l|1A0kB2(ErM5cN^tpj>E)XO%?hMix8z)Sz$4Kta1BNAo-QNNH{N*n|KYMvC zxw+Q_SOl6HHFh0>pf76dMw5AL>P^(_eofR|^$s-1-z?M5Tf3erceOL2!G5>Q&pCG#Y<6`z_r4SkdH`w-leDdr zRAIB%%rfri4L=$WkfQ~dg~VbnSbb!$&g{$PT^dauw=Ofc)Ps}?6Q%|5^~@?fWQ}=@ z$6l4dZy)FF5~P2Y?$j^7p<%pzM~)&t?du%%GCf1{8QImcz~URPtNws_-*mEmIm=c6 z3Jw1#3ZYh*dFHTWYGn9Op{=dpM$@trV2jJiB_}EJLL@oABS#0|y%S)x=oFbBGH}|t z?Wa$tU?m#Z%g(1Le0}CO6>6zE@XLVjM;@_3*iRz9+66j{jFFxZlu&b{OJ&DhF4jqJ zRj9Tr`m}R;!@x_5w9?2UilK4DJFF&d)^B(Z!zwB&A6{zS3}~!`pnP(^;%A3!wp^{} z(+A|?1056OHQGpk7Im|{lXN_W`m8|(tlH}7OBO~+C$x%MDTsV2x}-ChJLlUl*fcip zmowUWt5GlEX!fph^82w=ZiEg9%&iasKFP(6C_Nvgfjq_}?>;WE#w0jO5J_?7%(t1b zJ6$=okDGt$M%Gi|Hh%39`(NZlkImX85l#kdMl23MSVoAbqvfpW5NxLur(KBW4BHlc z$sR7N5Pp0*9fSlsOm>!C=ha(LAg$7jE7}tqFti{~q+R7E*dcuF_>MDCq>S=#Y=8}4 z!TOaCO(dakm(0=w7?!Vb=x0|Mcx!d+NCy!S zMg9yB`)wd2sZ{Wuel)egnV=eFr7c*bKYr(LD#hiUqiiCwc1kTaAmW;(!{i-sG7sUt zP%Jj@mQ;q|a?qw{G}(%OHS=Z#Z4wC<-dg)BRIx!E=ixr z0}>{qv%+Nzj$O48(`&Y_iQP$@!e&^gwX{8E^cOka+z6FZ` z0Ye3mVXAHuu)C!7_inFqGHGN>zYHr5E0zk+e&0_r2Kv@@L2+%QlR&J5>S~S z{9ah$(*{_K>vKd7WV#tXZO46rb2-%H>2b5uIjL9ITg{_47|TntOjQ_1y^D)D5Z7xu zn`w$7?ECx7=sYH`&&}Xu25F* zqGh@qHY!%z4-#Y7k?XImz%<+>z>3shTvHI#((b?;+8V;lV??kpp`VgM6uHNR_1U~e zNrGhTb#yK34o%qWJuSmN-6iPcl7hVLmvcJiUE%dNp@fF5G-L7G#W))pdQP>dr=QdX``h!1OJQAJicW z9l+VpZ%86^jaCRvuDH!FRrxO2I>atIo@aOB!Ji@}?@y|qmVz*)JGkb(G~NAFsc zABVo5`p?pA3KMh!aXnPjcsF~haDkL88%bsu>PcPo%HsM}Pm|*2wcW*C^W*JH5p%}u z-tnof7a~?i7%TVMQy~b&fu2@ph%NM;NBs!?BjUKp#C-QPKP59O(*s zxX;yea9WH8%fd;P#?SC@$0FoJ39eV{RH0qV72Xq_XQMqzx!|ZQRA9;z>p2;EDg$_g@PvwQ;UZb{wF^%2$i@~U zo#GLj9QrF6h9Jk#sFW#F6p=++7UI8TO}xshZpC9JAQqQ9YT%U| z`{|og>aUy$*io;WtYwVeB%U~^W7eavpS|_B%^tQYV*5Re{=i|Ai8I|uqhu~N%LYed z^=xnQ5(ltALl_-q*xm+9>+#e|oe~Q8zv%9n{k_X&BVW=^391b8M8%;QPivbV=@7xNj8eCgv>=7(QBAHEYxT55^8Bn4WE0l?VPf}5@2($>;m`rk7o4zrD-0d6+=D-!4MRg^X$IB z|BD?c^EtZ=W^E_|69BsT8 za?q9M@^ikQQm=PLeMcbW+2BW(aHYOp?p*C`Z{5dTH^XUp^uK~lQ<#Qs>&$)8uOJjg zvqt`zyL)24W9!y_lI>4B{sC1s=ql+^+Tv`xaUYur>n2nF2i7~DT)^)94MH|FS`+OZ zr8)-3-lb^XcVUJpa8--in=RZA-Mcbo57Yz9DbVN{B$uuGQ>eM!vOxR8d2P^>YVGr@ zajFkWWeUwKa$UT!h~{tS?Qb+yVy2s&!#f{1sb_5hJzf$PZ?F{jhleV1Hlem2eOKI4 z6-|1~ev&rC;geUrE(b#Mz>w%ZPI*hx6l$KL9hI1Yd%}FWA{h#3^hY+v)MNY#r&p2? zVUC06%T4l%3a$rf)E;x?nX&TiJAQ6o9Zl8mZ*c6ygz9sDK#&{s8<>XMjA7M1XV#PT z(^E(D-}N^pLhDAbeA-MmP<;+@gKsg6-ec4KnRrk{MFIyYH-H!qf;)V4@K)eQY`3cT zPQtWtEioVwpD$vB);sc>XA7hFfS=Z@v_>X2+t4F_%o4U>3NQ3MDZNd6pt!g(@lF{$9i(AA;QNxAZaKs55%o z-`Q8%izWE1#(8N*Es*QLh~U>9Z6wK0&(8JqE3Pwf)xgu9-h7`o;vl9Rlq*!+fUv@i z$HfBFN;ogY0;`vFFVwi0+(|k5dYC1_H!i=!XEOI^h5_KlIqPsE~>OBKiu_d#mxRwo2-~Kl;N|?&E^WgEOr%T_#nL3?2~}4yELM> z@E+xXD!`6%cfWO{I%7P`eG|{)C*xfVm-I_7Y<_8Alim0kRZBRw%;JgQH7v^2zZ>Th&=w&JI_` z`69B7S}n6tx3x~|m@{}WKjSkt-J}x4vo1Zc(Uo0=$~-x`Sd5DNjpjW^W95{veCXUB z1SmIEe?Tpw5+a2pcF-)w{;D#XA|d4nPlp*&lw5& zzt_K&fwMSaZdAwEDw+MpaFXuwp77qc7`Lu&0-%@&jOJ2=(0tQuKcV@1pO_Y&04r7S z#_~6G*1@-3J}2bEf>9GFH;vVhyz1?6a(7-Tf{VqaRJ``Dm+e~4rxM-0{;19K{gdyO ztM%9y5kydXrxWnaj=H&EDp0je*hSJUYlNwQA9`QTkr*U>qJ>k>w z2vFb^pz7gxQ1{&aneiUY&6L{ChEU7qfd%P}RY*T9Juzczc>L~X_A$wLu|@3?p(r%X z6&j|>NPK{s>?YW z*%o;1SN6q=xkDofoO6b{eFE<9!(GOik@f7EtB4~+GjENts$Q$mfBOGUANd$_^+`Ao zC<+l&AJ2jckMKt{sn2ACNBC!v$2tC=g)?u(f3%~&3M-gWK=AKtu%3X>{}YtJ0wVty zCj}&4{9AbelL@jI|26#`e8~LSEFB&M!u%uJ{(ay;G@zbPpFbL|i)CPdjit9GmzSlN zmMR=P!Jqs5{|LMPzUTh~{BPt1AvjNv1o#{NA8!6<7|`)&7=ZB~pZ|6WAOnHiJ#Bp* zZTHtS$RN-h#ozt@ck}})5XiyS#r^+6{jb!4aEbl}3u6R