From ea866123d91f3e1b1581ebae3988e1e7eff30886 Mon Sep 17 00:00:00 2001 From: "Bart Jablonski (yabwon)" Date: Wed, 11 May 2022 23:44:34 +0200 Subject: [PATCH] The BasePlus package [ver. 1.17] The BasePlus package [ver. 1.17] - new macro `%LDSNM()`, which extends functionality of the `%LDSN()` was added. - documentation updated hash: 619D4B2562F1D9E42C9C5DCB326E8F4D6A020B5D0CEE29A6174F65F8E1B0E7BD --- README.md | 4 +- packages/README.md | 4 +- packages/SHA256_for_packages.txt | 5 +- packages/baseplus.md | 255 +++++++++++++++++++++++++------ packages/baseplus.zip | Bin 82528 -> 84739 bytes 5 files changed, 220 insertions(+), 48 deletions(-) diff --git a/README.md b/README.md index bafcdc0..47668f9 100644 --- a/README.md +++ b/README.md @@ -146,7 +146,7 @@ SHA256 digest for macroArray: DF63B0E027827A82038F1C8422787A0BC569BA93104BA1778D [Documentation for macroArray](https://github.com/yabwon/SAS_PACKAGES/blob/main/packages/macroarray.md "Documentation for macroArray") -- **BasePlus**\[1.16\] adds a bunch of functionalities I am missing in BASE SAS, such as: +- **BasePlus**\[1.17\] adds a bunch of functionalities I am missing in BASE SAS, such as: ```sas call arrMissToRight(myArray); call arrFillMiss(17, myArray); @@ -164,7 +164,7 @@ format x bool.; %zipLibrary(sashelp,libOut=work) ``` -SHA256 digest for BasePlus: 4CD3926B9842925C86B80B5B47B47BEA1FB9707826B545B9B4D52AE97BC3617E +SHA256 digest for BasePlus: 619D4B2562F1D9E42C9C5DCB326E8F4D6A020B5D0CEE29A6174F65F8E1B0E7BD [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 e8fc3c0..b887ebe 100644 --- a/packages/README.md +++ b/packages/README.md @@ -90,7 +90,7 @@ SHA256 digest for macroArray: DF63B0E027827A82038F1C8422787A0BC569BA93104BA1778D --- -- **BasePlus**\[1.16\] adds a bunch of functionalities I am missing in BASE SAS, such as: +- **BasePlus**\[1.17\] adds a bunch of functionalities I am missing in BASE SAS, such as: ```sas call arrMissToRight(myArray); call arrFillMiss(17, myArray); @@ -108,7 +108,7 @@ format x bool.; %zipLibrary(sashelp,libOut=work) ``` -SHA256 digest for BasePlus: 4CD3926B9842925C86B80B5B47B47BEA1FB9707826B545B9B4D52AE97BC3617E +SHA256 digest for BasePlus: 619D4B2562F1D9E42C9C5DCB326E8F4D6A020B5D0CEE29A6174F65F8E1B0E7BD [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 20671bb..be1d187 100644 --- a/packages/SHA256_for_packages.txt +++ b/packages/SHA256_for_packages.txt @@ -1,5 +1,8 @@ +/* 20220511 */ +BasePlus: 619D4B2562F1D9E42C9C5DCB326E8F4D6A020B5D0CEE29A6174F65F8E1B0E7BD + /* 20220509 */ -BasePlus:4CD3926B9842925C86B80B5B47B47BEA1FB9707826B545B9B4D52AE97BC3617E +BasePlus: 4CD3926B9842925C86B80B5B47B47BEA1FB9707826B545B9B4D52AE97BC3617E /* 20220508 */ BasePlus: 0331C673052D5221DA98C5CC93295634D8A0BC62C7D2FEF9D0D85B0B2DEDE4E9 diff --git a/packages/baseplus.md b/packages/baseplus.md index 1a8e0f0..2268c5f 100644 --- a/packages/baseplus.md +++ b/packages/baseplus.md @@ -46,6 +46,7 @@ * [`%zipLibrary()` macro](#ziplibrary-macro) * [`%unzipLibrary()` macro](#unziplibrary-macro) * [`%LDSN()` macro](#ldsn-macro) + * [`%LDsNm()` macro](#ldsnm-macro) * [`%LVarNm()` macro](#lvarnm-macro) * [`%LVarNmLab()` macro](#lvarnmlab-macro) @@ -55,7 +56,7 @@ --- -# The BasePlus package [ver. 1.16] ############################################### +# The BasePlus package [ver. 1.17] ############################################### The **BasePlus** package implements useful functions and functionalities I miss in the BASE SAS. @@ -227,52 +228,53 @@ Package contains: 5. macro functionexists 6. macro getvars 7. macro ldsn -8. macro lvarnm -9. macro lvarnmlab -10. macro qdeduplistx -11. macro qgetvars -12. macro qzipevalf -13. macro raincloudplot -14. macro symdelglobal -15. macro unziplibrary -16. macro zipevalf -17. macro ziplibrary -18. format bool -19. format boolz -20. format ceil -21. format floor -22. format int -23. functions arrfill -24. functions arrfillc -25. functions arrmissfill -26. functions arrmissfillc -27. functions arrmisstoleft -28. functions arrmisstoleftc -29. functions arrmisstoright -30. functions arrmisstorightc -31. functions bracketsc -32. functions bracketsn -33. functions catxfc -34. functions catxfi -35. functions catxfj -36. functions catxfn -37. functions deldataset -38. functions semicolonc -39. functions semicolonn -40. format brackets -41. format semicolon -42. proto qsortincbyprocproto -43. functions frommissingtonumberbs -44. functions fromnumbertomissing -45. functions quicksort4notmiss -46. functions quicksorthash -47. functions quicksorthashsddv -48. functions quicksortlight +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 *SAS package generated by generatePackage, version 20220420* The SHA256 hash digest for package BasePlus: -`4CD3926B9842925C86B80B5B47B47BEA1FB9707826B545B9B4D52AE97BC3617E` +`619D4B2562F1D9E42C9C5DCB326E8F4D6A020B5D0CEE29A6174F65F8E1B0E7BD` --- # Content description ############################################################################################ @@ -3521,6 +3523,10 @@ run; The LDSN (Long DataSet Names) macro function allows to use an "arbitrary" text string to name a dataset. +The LDSN macro has some limitation described below, to overcome them +another macro, with different name: LDSNM (Long DataSet Names Modified) +was created. See its description to learn how to use it. + --- The idea for the macro came from the following story: @@ -3607,6 +3613,12 @@ The basic syntax is the following, the `<...>` means optional parameters: ) ~~~~~~~~~~~~~~~~~~~~~~~ +The text string is concider as *"fully qualified dataset name"*, i.e. macro +assumes it may contain library as prefix and data set options as sufix. +See the `%LDsNm()` macro for comparison. + +--- + ### EXAMPLES AND USECASES: #################################################### **EXAMPLE 1.** @@ -3628,6 +3640,163 @@ run; --- +## >>> `%LDSNM()` macro: <<< ####################### + +The LDSNM (Long DataSet Names Modified) macro function +allows to use an "arbitrary" text string to name a dataset. + +The LDSN macro had some limitation (see its documentation), to overcome them +another `%LDSNM()` (Long DataSet Names Modified) macro was created. + +The main idea behind the `%LDSNM()` is the same as for `%LDSN()` - see the description there. + +--- + +The `%LDSNM()` works differently then the `%LDSN()`. + +The `%LDSN()` assumed that *both* libname and dataset options *could* +be passed as elements in macro argument, e.g. + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas +data %LDSN( WORK.peanut butter & jelly with a hot-dog in [a box] and s*t*a*r*s (drop = sex) ); + set sashelp.class; +run; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +The `%LDSNM()`, in contrary, assumes that both libname and dataset options are +passed **outside** the macro, i.e. + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas +data WORK.%LDSNM( peanut butter & jelly with a hot-dog in [a box] and s*t*a*r*s ) (drop = sex); + set sashelp.class; +run; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +This approach reduces some limitations the LDSN has. + +The **additional** feature of the `%LDSNM()` is that when the macro is called +a global macrovariable, which name is the same as hashed dataset name, is created. +The macrovariable value is the text of the argument of the macro. For example +the following macro call: + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas +data %LDSNM(John "x" 'y' dog); + set sashelp.class; + where name = 'John'; +run; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +creates `DSN_BF1F8C4D6495B34A_` macrovariable with value: `JOHN "X" 'Y' DOG`. + +The macrovariable is useful when combined with `symget()` function and +the `indsname=` option to get the original text string value back, +like in this example: + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas +data test; + set %LDSNM(John "x" 'y' dog) indsname = i; + + indsname = symget(scan(i,-1,".")); +run; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +See examples below for the details. + +--- + +The `%LDSN()` macro executes like a pure macro code. + +**Known "Limitations":** + +- dataset name _cannot_ contain _unpaired_ round brackets(`(` and `)`) + (but unmatched `[]` and `{}` are allowed)! + +- dataset name _cannot_ contain _unpaired_ quotes (`'` and `"`), + text: `a "hot-dog"` is ok, but `John's dog` is not! + +**Behaviour:** + +- dataset name text is *converted to upcase* + +- dataset name text *leading and trailing spaces are ignored*, + e.g. the following will give the same hash digest: + `%ldsn(test)`, `%ldsn( test)`, `%ldsn(test )`. + +- macro calls of the form: + `data %LDSN(); run;` or `data %LDSN( ); run;` are resolved + to empty string, so the result is equivalent to `data; run;` + +- created macrovariable is _global_ in scope. + +### SYNTAX: ################################################################### + +The basic syntax is the following, the `<...>` means optional parameters: +~~~~~~~~~~~~~~~~~~~~~~~sas +%LDSNM( + arbitrary text string (in line with limitations) +) +~~~~~~~~~~~~~~~~~~~~~~~ + +The text string is concider as *"only dataset name"*, i.e. macro does not +assume it contain library as prefix or data set options as sufix. +See the `%LDSN()` macro for comparison. + +--- + +### EXAMPLES AND USECASES: #################################################### + +**EXAMPLE 1.** +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas +data %LDSNM(John "x" 'y' & dog); + set sashelp.class; + where name = 'John'; +run; + +data %LDSNM(John "x"[ 'y' & dog); + set sashelp.class; + where name = 'John'; +run; + +data %LDSNM(John "x" 'y'} & dog); + set sashelp.class; + where name = 'John'; +run; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +**EXAMPLE 2.** +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas +data work.%LDsNm( peanut butter & jelly, a hot-dog in [a box], and s(*)t(*)a(*)r(*)s!! ) (drop = sex rename=(name=first_name) where = (age in (12,13,14))) +; + set sashelp.class; +run; + +data test; + set work.%LDsNm( peanut butter & jelly, a hot-dog in [a box], and s(*)t(*)a(*)r(*)s!! ) indsname=i; + + indsname=symget(scan(i,-1,".")); +run; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +**EXAMPLE 3.** +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas +data work.%LDsNm( . ); + set sashelp.class; +run; + +data %LDsNm( ); + set sashelp.class; +run; + + +data %LDsNm(); + set sashelp.class; +run; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +--- + ## >>> `%LVarNm()` macro: <<< ####################### The LVarNm() macro function works like the LDSN() macro function, but for variables. diff --git a/packages/baseplus.zip b/packages/baseplus.zip index 18e626a700c2866f6efea844950a275596eee794..cc3b9f902201df5df84b615f1161a68d06f920f7 100644 GIT binary patch delta 16966 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 DxgG(m delta 14749 zcmZ|0bzGED*ETvsBOub<-QC^YA)$1)l=RRcor83DBOoE&jnW|?Asy2F4fs6gdwtJ2 z_m4mJTzg&DUTZfq>kdkRT?>ZAP*s42!2|#R2!QI8Qcb0C$)?SC40g~GH~M20-a{Bs z^SG+uCoXe7xkGl-K6SmOgbh7;>W{>+aO7l&Tv9avE8WM*)t~R-XfWQ|bCcwx9Mpoe#dBhkoUx zVX?s1ugz`527YaUT{XTOf)977l^<0}wYuSTfwarQPFqV#t6f(hWOeS}#`aN~Fy{FM zW#8@|^)Fw)eq5Az7g4-l^|j?Ftvb~bG5c)VYLF{?Q?8*-9ovRA+EA5fH#*6pk@E;6 zQ2{zo+LanJ*0?Pgz9_ihy>o<};MyZ59YJSQW;6zYPDV*K?dPF?K^i=GE8I#4<*?f z@};&svsRoHT113#%*-q~cZDk*M{e+w?R%ZYVpmXHoV*X^-1XdqbBDt0b!Z6ht}um* z+R%``;MglcrK;OCH=;$8cbyg6BeEAw=Ahhi2UMQbCh#4F^t?SsqnGUwoP+BhtQTW` zbC-Tg%y@-W-(&l7(k%o+SFMv=T@i{X`PzuD zvF&V0JSO}c<6y5^xLzxVH@}dVy~_`R7gW0tqC#pWBzY77hP& zm7J-4c3fTd=iE-lhEDvXA1>W2h$t(EPWQdF1MR5lmvhjS5uUVr(&+G^2)d+W;~S4I zA5w|DRGLh2?PBc;)pEyapzc>k%vi*}0JYRz&i;AM?oKefvyl!0M^J>Oi^U}r?VJUY zGG{Y~j(X2PKL%G!E+Nmg7DofeU@36kBd1@&-h864x=#PN`dTpd!U&B%QBq^>l`-K2p7ez+4 zWAnHtAQm?k>W(9Y{dB#}T7=cm^lrY9g4rs^Tm(cNku=<7E1CMG!Tx3~w$o99f;X_g zmgLJC!hwpDWY3+{UGU^%0D(jU8 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