From d769d10a613a75e463f9edf38a9d04cd27a3823d Mon Sep 17 00:00:00 2001 From: Bart Jablonski Date: Sat, 11 Nov 2023 17:31:17 +0100 Subject: [PATCH] BasePlus package [ver. 1.34.0] BasePlus package [ver. 1.34.0] - update in unzipArch macro - new zipArch macro added - documentation updated --- README.md | 2 +- baseplus.md | 348 ++- baseplus.zip | Bin 291735 -> 295726 bytes hist/1.34.0/baseplus.md | 6212 ++++++++++++++++++++++++++++++++++++++ hist/1.34.0/baseplus.zip | Bin 0 -> 295726 bytes 5 files changed, 6483 insertions(+), 79 deletions(-) create mode 100644 hist/1.34.0/baseplus.md create mode 100644 hist/1.34.0/baseplus.zip diff --git a/README.md b/README.md index 9b405be..437f158 100644 --- a/README.md +++ b/README.md @@ -52,7 +52,7 @@ libname NEW "%workPath()/new"; ``` and more. -SHA256 digest for the latest version of `BasePlus`: F*6214654B4575DC8E4BA3CF032924862C2F69A03A6384872BAA9F774EDF6A8DDA +SHA256 digest for the latest version of `BasePlus`: F*D84CE41A550DC2D5C092C70C04A796E8329F34087A603BEF0CD366910C162E80 [**Documentation for BasePlus**](./baseplus.md "Documentation for BasePlus") diff --git a/baseplus.md b/baseplus.md index 4303f16..66d02fe 100644 --- a/baseplus.md +++ b/baseplus.md @@ -45,6 +45,7 @@ * [`%RainCloudPlot()` macro](#raincloudplot-macro) * [`%zipLibrary()` macro](#ziplibrary-macro) * [`%unzipLibrary()` macro](#unziplibrary-macro) + * [`%zipArch()` macro](#ziparch-macro) * [`%unzipArch()` macro](#unziparch-macro) * [`%LDSN()` macro](#ldsn-macro) * [`%LDsNm()` macro](#ldsnm-macro) @@ -79,7 +80,7 @@ --- -# The BasePlus package [ver. 1.33.0] ############################################### +# The BasePlus package [ver. 1.34.0] ############################################### The **BasePlus** package implements useful functions and functionalities I miss in the BASE SAS. @@ -355,82 +356,128 @@ run; ; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +**EXAMPLE 25** Zipping and unzipping directories: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas +options dlCreateDir; +libname arch1 "%workPath()/testArch1"; +libname arch2 "%workPath()/testArch2"; + +filename arch1 "%workPath()/testArch1"; + +data _null_; + file arch1(test1.txt); + put "text for test file 1"; +data _null_; + file arch1(test2.txt); + put "text for test file 2"; +data _null_; + file arch1(test3.txt); + put "text for test file 3"; +run; + +data arch1.class(index=(name)); + set sashelp.class; +run; +data arch1.cars(index=(model)); + set sashelp.cars; +run; + +%zipArch( + archName2.zip +, pathRef = arch1 +, target = %workPath()/testArch2 +, list = 1 +, overwrite = 1 +) + +%unzipArch( + archName2.zip +, path = %workPath()/testArch2 +, target = %workPath()/testArch2 +, clean=1 +, list=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 unziparch -23. macro unziplibrary -24. macro zipevalf -25. macro ziplibrary -26. format bool -27. format boolz -28. format ceil -29. format floor -30. format int -31. function arrfill -32. function arrfillc -33. function arrmissfill -34. function arrmissfillc -35. function arrmisstoleft -36. function arrmisstoleftc -37. function arrmisstoright -38. function arrmisstorightc -39. function bracketsc -40. function bracketsn -41. function catxfc -42. function catxfi -43. function catxfj -44. function catxfn -45. function deldataset -46. function semicolonc -47. function semicolonn -48. format brackets -49. format semicolon -50. proto qsortincbyprocproto -51. function frommissingtonumberbs -52. function fromnumbertomissing -53. function quicksort4notmiss -54. function quicksorthash -55. function quicksorthashsddv -56. function quicksortlight -57. macro date -58. macro datetime -59. macro filepath -60. macro finddswithvarval -61. macro fmt -62. macro gettitle -63. macro infmt -64. macro letters -65. macro libpath -66. macro minclude -67. macro monthshift -68. macro replist -69. macro time -70. macro today -71. macro translate -72. macro tranwrd -73. 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 unziparch +23. macro unziplibrary +24. macro ziparch +25. macro zipevalf +26. macro ziplibrary +27. format bool +28. format boolz +29. format ceil +30. format floor +31. format int +32. functions arrfill +33. functions arrfillc +34. functions arrmissfill +35. functions arrmissfillc +36. functions arrmisstoleft +37. functions arrmisstoleftc +38. functions arrmisstoright +39. functions arrmisstorightc +40. functions bracketsc +41. functions bracketsn +42. functions catxfc +43. functions catxfi +44. functions catxfj +45. functions catxfn +46. functions deldataset +47. functions semicolonc +48. functions semicolonn +49. format brackets +50. format semicolon +51. proto qsortincbyprocproto +52. functions frommissingtonumberbs +53. functions fromnumbertomissing +54. functions quicksort4notmiss +55. functions quicksorthash +56. functions quicksorthashsddv +57. functions quicksortlight +58. macro date +59. macro datetime +60. macro filepath +61. macro finddswithvarval +62. macro fmt +63. macro gettitle +64. macro infmt +65. macro letters +66. macro libpath +67. macro minclude +68. macro monthshift +69. macro replist +70. macro time +71. macro today +72. macro translate +73. macro tranwrd +74. macro workpath @@ -441,7 +488,7 @@ localization (only if additional content was deployed during the installation pr * SAS package generated by generatePackage, version 20231107 * The SHA256 hash digest for package BasePlus: -`F*6214654B4575DC8E4BA3CF032924862C2F69A03A6384872BAA9F774EDF6A8DDA` +`F*D84CE41A550DC2D5C092C70C04A796E8329F34087A603BEF0CD366910C162E80` --- # Content description ############################################################################################ @@ -3773,6 +3820,136 @@ run; --- +## >>> `%zipArch()` macro: <<< ####################### + +The zipArch() macro allows to ZIP content of a directory. +Macro is OS independent, the `XCMD` option is not required. + +Content of zipped archive can be listed in the log. + +Errors of decompression and are reported. + +Macro **does not** include hidden files. + +See examples below for the details. + +### SYNTAX: ################################################################### + +The basic syntax is the following, the `<...>` means optional parameters: +~~~~~~~~~~~~~~~~~~~~~~~sas +%zipArch( + archName + ,path = + <,pathRef=> + <,target=> + <,targetRef=> + <,list=> + <,overwrite=> + <,dropList=> +) +~~~~~~~~~~~~~~~~~~~~~~~ + +**Arguments description**: + +1. `archName` - *Required*, name of the archive to be generated. + Name should be full, i.e., with the extension! + +2. `path=` - *Required/Optional*, location of a directory to ZIP. + The path should be provided unquoted. + Has priority over the `pathRef` parameter. + +* `pathRef=` - *Required/Optional*, fileref to location of a directory to ZIP. + The reference **has** to be pointing to single directory. + If provided with `path` - the `path` takes + priority over the `pathRef` parameter. + +* `target=` - *Optional*, a path pointing to target location where + the archive will be generated. + The path should be provided unquoted. + Default value is `WORK` location. + Has priority over the `targetRef` parameter. + +* `targetRef=` - *Optional*, fileref to a path pointing to target location + where the archive will be generated. + The reference **has** to be pointing to single directory. + If provided with `target` - the `target` takes + priority over the `targetRef` parameter. + +* `list = 0` - *Optional*, default value is `0`, + indicates if zip content should be listed in the log. + `1` means *yes*, `0` means *no*. + +* `overwrite = 0` - *Optional*, default value is `0`, + indicates if existing archive file should be overwritten. + `1` means *yes*, `0` means *no*. + +* `overwrite = 1` - *Technical*, default value is `1`, + indicates if the "to-be-zipped-files-list" + data set should be deleted. + `1` means *yes*, `0` means *no*. + +--- + +### EXAMPLES AND USECASES: #################################################### + +**EXAMPLE 1.** Zip a directory . Example requires the `basePlus` package. +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + +options dlCreateDir; +libname arch1 "%workPath()/testArch1"; +libname arch2 "%workPath()/testArch2"; + +filename arch1 "%workPath()/testArch1"; + +data _null_; + file arch1(test1.txt); + put "text for test file 1"; +data _null_; + file arch1(test2.txt); + put "text for test file 2"; +data _null_; + file arch1(test3.txt); + put "text for test file 3"; +run; + +data arch1.class(index=(name)); + set sashelp.class; +run; +data arch1.cars(index=(model)); + set sashelp.cars; +run; + + + +%zipArch( + archName1.zip +, path = %workPath()/testArch1 +, list = 1 +, overwrite = 1 + +) + +%zipArch( + archName2.zip +, pathRef = arch1 +, target = %workPath()/testArch2 +, list = 1 +, overwrite = 1 +) + + +%unzipArch( + archName2.zip +, path = %workPath()/testArch2 +, target = %workPath()/testArch2 +, clean=1 +, list=1 +); + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +--- + ## >>> `%unzipArch()` macro: <<< ####################### The unzipArch() macro allows to unzip content of a ZIP archive. @@ -3795,7 +3972,9 @@ The basic syntax is the following, the `<...>` means optional parameters: %unzipArch( archName <,path=> + <,pathRef=> <,target=> + <,targetRef=> <,list=> <,clean=> ) @@ -3804,17 +3983,24 @@ The basic syntax is the following, the `<...>` means optional parameters: **Arguments description**: 1. `archName` - *Required*, name of the ZIP archive to be extracted. - Name should be full, i.e., with the extension. + Name should be full, i.e., with the extension! * `path=` - *Optional*, a path pointing to zipped file location. The path should be provided unquoted. Default value is `WORK` location. +* `pathRef=` - *Optional*, a fileref to path pointing to zipped file location. + The `path`, if not null, has precedense over the `pathRef`. + * `target=` - *Optional*, a path pointing to target location where files will be extracted. The path should be provided unquoted. Default value is `WORK` location. +* `target=` - *Optional*, a fileref to path pointing to target location where + files will be extracted. + The `target`, if not null, has precedense over the `targetRef`. + * `list = 0` - *Optional*, default value is `0`, indicates if zip content should be listed in the log. `1` means *yes*, `0` means *no*. @@ -3850,15 +4036,21 @@ run; , list=1 ); + + +filename pR "%workPath()"; + %unzipArch( testArch.zip -, path = %workPath() -, target = %workPath() +, pathRef = pR +, targetRef = pR , clean=1 ); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +--- + ## >>> `%LDSN()` macro: <<< ####################### The LDSN (Long DataSet Names) macro function diff --git a/baseplus.zip b/baseplus.zip index 3c69e88c488104dbabfb317b203e746452a6802f..700e6c8be1cf6b41bd33bd7f2c81bef725bbf0ef 100644 GIT binary patch delta 24787 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�Wq@T}jFDD5L;8m+TSjue{99@K|TFKpL8)#my%5 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

wnzfOMYA9A6^doFJD*m{x4Bo zjTijiJEZE+!2QoC8npb+Gh&O3@Gsc(`7dH85EJU((6^{ah<}aHq=x@o+?hWACAH-W z{72r4!2dHqD#HE?j;W`{{Wq(9S|03Q19~z4KUdX8>wm<2?-m^8f5Y)QCH@k^P(VPr z1VBKTK&a_BuAo@SYHVl#EjyLNF{E$#)E|*rcJ?HbBQ{lPC~;k-z3NVA7}OK$>~tEP zw2=ZGt;1zWm?IH?pAHLF@AN>QNd5paw-;W%FW1>7bKVfvcZE7PliPmunt=Vb*40fM zgm95pe|ImC$Iix0p1#d{&$Z3qot=*tM{jTF$(|)15xzz3fsto`u|F&Y1%=~*@R5Cn z$x#@>km>Wgb(X!`}veuLP4eJ`LhCgw1E!E0TQIB_n^jq+2D*%HnIB_5N1tI$ghYa zCI`w5`HAneXk+;Rjy0|`Fr3J{=)=sSd+kV7m?43ZcUFi}(+RsW!(0j`@%`M8nR7|} zFj$ctm!PBfnWG$=8Bl?kiWcajyy&dT$8c>(aN~37bn!~tVFZr$zb*Fi(nq@au+_9@ zbdkyvP>OIfSirBww{4+DqxMY)vuG&%(%OV5i!sHlzT+zaosF}jdP=^NC1pOxQGFoy zxMVjdMny)eIl}m&FIrpjwwwH7X-pi*TB2Ks3A&Q3ITTJ?n;#Azp*c6#scliXBhdpc zp&hOs%o`o!!7dg46!yNe$bJ$|F7iU#o<#5p4plSrV`ckyv^@$OV~~N16kVJNp5cQg z-aPe2KjFPYGLCz}?rj&fyLAsnTo;%~Hl_hB^ZkZ!#|PR44(JSLj4e55 zxOn_5fs&4fUxWuDILxoi$aT z;?+8U<%*(4{EM}=r`EqmE z-Rc}OaX~0V&kAl!V9SBs#)x6gVSf$Stn@g;IJjU=f$Tw&_+HaH)?g$tq(NGHuc*LV za{I_2X*LT4uY~fW#Wg&aa=X}i(xRK54T>Xx4zz~#=7$O_ej$9M>;w2|0%*=vAZ%?? z-!uqHv}q$45r*?K3luwTnn3wq^wtf{Lb6(AUq)SPE0&TNGpp33H+eKNl?5tC*GtJv z;WFqpy|M(VC-wt=(_PJs*p-Shv*I*w^1Taf@2DR%-%q8rva*Zt6}Otwl5>NtwjB(> zOP=3Q->_|Wz;JGHSC532RK8dUIfhE+{U3}2b(2Q9PP+PL{oGp1zlpvS@)! z$|!U>k<%I@EfP;d1whOG9x?zsJ#5*!9U2TS*y$yjcGQYAm)v`zg6U6Di&4Op2HG^H zBLC)LAiE7tcXx+BTDH3CGjaOp(!eypY`{sS{P(b$LxBj#m{-gp1}GiIicmjUN_kRc z6VS;#UW%9LrS4$I4#s)fuz_3!a2iV>e_DA2?2{kAT9~^WLOI*;MWbR;Qt=FQ%3lr% ztUs`6zx}pERFLZw>x3sW(fb;CH5(~>joAB*u z8uE(yvy00m>ljkDX_KAqolDSin>!?Qs&V37DebSS$1X!^K^R!DI{UUke~e{IspzEt z8qYhr1iE?DYsywe#}mAsh0WGSGsT`XVXMpGQ>1wFDHn0s(Eg;hFJhcfV>WJXUT&Ij zj*^Abw&jKMY4k`UyKY*}4==3)*zsvPmK?2Q*^CG}HIKM!6#Y}|Wm76XKm$yBMvryq zeE|Wzvftioh>5q3rHoPhSpDV&R^eq(?;D<=Lx_bTg|x3R(M zqTlAOp#Vbl?~L{eEpNpWS__Wto24paq-pV^d77d_{0-3|{fxe=g-OYhD|)|Me&j}{ z`V;?xmpt2{mZQ%IkHzljFhAFRUQ(9lEsN_%IVTsrE3J)9y8qk3$H8yLv-$!iHX^enJl+(ZF}k}w6t8L_WsQG{-9PXUE5{VaZUDYpRUyZ4N9swSi7Ikesm_IyxFDEQ>Uk9&Q*@UnU%e>kch0co(SsGP`nlb!SCp(gb*tyhB~L-xhK!%!*nv%QUNK9S ze%GS$+534HPCl38FL)Z$v2;L7&}BZ!Vt2E-Woga!QyuZXqdor_3oo^(k8>=;aYXveEsp z675>`g%Pg0JqIGKA}Z_}_q0A%`d;A?yNK^1b^FlJtNp8sF2DH6SwZqVI9SX|8#bSG z%!(VWIOS1%qc7@p#g1}LXlcjYmhtYT-8N%Mb2A)!IjXffE5AsrS~9vfvnbtTr|hke zr!(Jf*)=DUTpfMyj~Wi>E?V7SZx7p^N zchdlm9|3He{2%*|c8x)8^^(@Zjcn(@S+DD!5$@V?s?xj68{2@;rfI`t$A&C}PM7R7 z{o%sG0{-K!+do(RX|-YJ_RpZ<($%@u(S6)O=K$v%yQ6DzUi*YD9eM@L(hj>sav!aE zn|gfkcrj<2eU4X@O|nVWSZ#K--YM#74N@8Pc@shp>-`39vWI_* zo~i6Pp63&1Y2f@`u^dZGe^ za!S;;EX(Xq(*OyAsFx(rrp!(cD2oc%AYB5(7VCjpT6(7sifO4}J}99jHv>>aOK*(8 z0a{8k1xd6tV=?HWrC~ELNK0LoK#PT$-&g}PS~9T(YP95N4@_w(W)(;Q7$@Zb_R&(h z;}ovg30ToDT$HCRntL2j0?MunYqiY2B+xaFfnvO(L+NEx-?;MFzh_ z+h`@-D1`a_Kuz=_6I`Z^&kDgqS`r=si|F_oj)6kFO&5ihf_*gg+cQ8CZ_GvD0x+g^ zi!Ot2XeU3^0(;u_P8~?6aoiRlqI;>?3F2v7PXAQjA|HYt+ONj|u%`JkpMrK;3K#)% zSTa;GWb3-i!9y=mdeL9WO)mlZl@K+(WR32oG_W>+{1!ix{QK=S&>)aB!HqtFq?UC7 z`bwKX^crGN*f!&^tzqs?KtctbE1mk*8~kc9AczPwXv#=SU4UQ{H3_~7@LV9NqeF$E zS`+?DE{h=Eqjza%&>%6Y=5r#m;tORcvx}7Xrl9}6a!a|OFPg9bSyG2tKNSW(O^m|G zMq$V^tR{7k)z;`JSQAL9Y@|FekI4SlL!2J!2tF|TDIXus!5~ICh7UzU*t?6=u%g&M z{6B5&$MH)nA&4E@0(qa{hQ>jpmPC>rbP6K%aPC7WMdd2EKZu;irg;B-Xe0;?hWGTf z6iN*a1(8bFc9OCUbi>+(VV`j4xyCw=`wFcOg(#&=vd_P!$)1LY$pU7uT~rv_j6h=i;b<^vfMd|%A+z`ZXu~5p*epZIFyRt%nTcG^WSC_}!$cmb zkIhOcGvOXs$0K#HVu(^yq(YexQWqSno_NP#YX~_X^Gr}?l_#NAD5;OlMt5Fqw?)UCD%GjSS^A<2uj(}9hLUr!S!yV$ z#ro8%NQxkKqj{&ru$X-xwuFg?i}{rPUtYxls2MKK z**_-l{_aKt+OGdG*Rc`E4JQ}i&ff_~kzad9z~OL`V?ax_mR(zYLxYWBa5$-nNxUOa;&qi^RD^g$Pf&_hWmpv<9?=Js;;0&&KnOfEH;>vn zZ$mS?3gt(Y(bJV0a0Q>#!>H1Ou*nyp&LR|ZDH_p&d->s0*!tEL7Z0%Hx(fyHN`?oNAGRUc1G!G>B?xHo+}0 z*d9p3(%s??T%no<7ky}whZ9qL3Q?#@%N%|gMSh99RdK82jTKr(y-<*|7~LwifZ+&* z!^o%1jI3aFlz46W*)=-s1v0sX`o*k*)ypW98q|sw2Wk?HY!hv9Ww2dK^Fw|?Y^zW7k z>N5?x!-ay<%h-t+RPiIO0B+d~G^Wi!k$EzRME1ecLTy+FK`c2Br^_G~aio6@;J7c) zgMqQ)!Hl8Q2fTqW5G+9ZJH~Alwor||T&ht8a(O`6=p%$@L|$m;cJyK4VsyLXFovqr z7eJ*SfCluABh~TRQg!U>)6r;lx6LOAHUoQjhZuV%j#QaL&FB_~8<&UBGT49ylF7@3 zc5$Q@9Ghaj$?<%cfNs%S5Ty=-H9rQk>P|}--b0~;@sR`O6ph#i_r{BN3)$;4i;pAJ zNrYnFD%_I+tPuircrRX@#b@!T1kBUmX9DpZWT5~l0@9(YKs=q|DaDK&m?I$Bcs!~p z#gSatgG_KKjCLkY452$(AxaUov!O0}>CHb4*?Yu`kdsDXtP<)j2Tcq$8YD*jQ3k); zLvk>A>K;UH@Cz)SQrt!g7ViRp{dGWnT0+LzO%lWv^lbtny;KkR z31TnDDTQ?lyp$lmP4-cWnQicWf_PD7CnCk)9dLP~c!k#sF84Zs>LnAM^ ############################################### + +The **BasePlus** package implements useful +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. + +Kudos to all who inspired me to generate this package: +*Mark Keintz*, +*Paul Dorfman*, +*Richard DeVenezia*, +*Christian Graffeuille*, +*Allan Bowe*, +*Anamaria Calai*, +*Michal Ludwicki*, +*Quentin McMullen*, +*Kurt Bremser*, +*Leonid Batkhan*. + +--- + +### BASIC EXAMPLES AND USECASES: #################################################### + +**Example 1**: One-dimensional array functions. + Array parameters to subroutine + calls must be 1-based. +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + data _null_; + array X[4] _temporary_ (. 1 . 2); + + call arrMissToRight(X); + do i = 1 to 4; + put X[i]= @; + end; + put; + + call arrFillMiss(17, X); + do i = 1 to 4; + put X[i]= @; + end; + put; + + call arrFill(42, X); + do i = 1 to 4; + put X[i]= @; + end; + run; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +**Example 2**: Delete dataset by name. +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + data toDrop; + x = 17; + run; + data _null_; + p = delDataset("toDrop"); + put p=; + run; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +**Example 3**: Strings concatenation with format. +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + data test; + x = 1 ; y = . ; z = 3 ; + t = "t"; u = " "; v = "v"; + + array a[*] x y z; + array b[*] t u v; + + length s1 s2 s3 s4 $ 17; + s1 = catXFn("z5.", "#", A); + s2 = catXFi("z5.", "#", A); + s3 = catXFc("upcase.", "*", B); + s4 = catXFj("upcase.", "*", B); + + put (_all_) (=); + run; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +**Example 4**: Useful formats. +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + data _null_; + input x @@; + put @1 x= @11 x= bool. @21 x= int. @31 x= ceil. @41 x= floor.; + cards; + . ._ .A -10 -3.14 0 3.14 10 + ; + run; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +**Example 5**: Getting variables names from datasets. +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + %put *%getVars(sashelp.class + ,pattern = ght$ + ,sep = + + ,varRange = _numeric_)*; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +**Example 6**: Quick sort as an alternative to call sortn() +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + data _null_; + array test[25000000] _temporary_ ; + + t = time(); + call streaminit(123); + do _N_ = 25000000 to 1 by -1; + test[_N_] = rand("uniform"); + end; + t = time() - t; + put "Array population time: " t; + + t = time(); + call quickSortLight (test); + t = time()-t; + put "Sorting time: " / t=; + run; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +**Example 7**: De-duplicate values from a space separated list. +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + %let list = 4 5 6 1 2 3 1 2 3 4 5 6; + %put *%dedupListS(&list.)*; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +**Example 8**: Zip elements of two space separated list. +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas +%let x = %zipEvalf(1 2 3 4 5 6, 2018 2019 2020, argMd=5, function=MDY, format=date11.); +%put &=x; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +**Example 9**: Simple Rain Cloud plot. +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas +%rainCloudPlot(sashelp.cars,DriveTrain,Invoice) +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +**Example 10**: Zip SAS library. +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas +%zipLibrary(sashelp, libOut=work) + +%unzipLibrary(%sysfunc(pathname(work)), zip=sashelp, mode=S, clean=1) +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +**Example 11**: Long dataset names. +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas +data %LDSN( work. peanut butter & jelly with a "Hot-Dog" in [a box], popcorn, and s*t*a*r*s (drop = sex rename=(name=first_name) where = (age in (12,13,14))) ); + set sashelp.class; +run; + +proc print data = %LDSN( work. peanut butter & jelly with a "Hot-Dog" in [a box], popcorn, and s*t*a*r*s ); +run; + +data MyNextDataset; + set %LDSN( work. peanut butter & jelly with a "Hot-Dog" in [a box], popcorn, and s*t*a*r*s ); + where age > 12; +run; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +**Example 12**: List, to the log, content of `home` directory. +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas +%bpPIPE(ls -la ~/) +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +**EXAMPLE 13** Get list of all files and directories from `C:\SAS_WORK\`: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas +%dirsAndFiles(C:\SAS_WORK\,ODS=work.result) +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +**EXAMPLE 14** Text repetition: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas +%put %repeatTxt(#,15,s=$) HELLO SAS! %repeatTxt(#,15,s=$); +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +**EXAMPLE 15** Integer list: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas +%put %intsList(42); +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +**EXAMPLE 16** Split dataset into blocks of 5 observations: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas +%splitDSIntoBlocks(5, sashelp.class, classBlock) +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +**EXAMPLE 17** Split dataset into 7 parts: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas +%splitDSIntoParts(7, sashelp.cars, carsPart) +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +**EXAMPLE 18** Return path to temporary file: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + filename f temp; + %put %filePath(f); +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +**EXAMPLE 19** Get titles: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + title1 j=c "Hi Roger" ; + title2 j=l "Good Morning" ; + title3 "How are you?" ; + title4 ; + title5 "Bye bye!" ; + + %put %GetTitle(1 2 3 5, dlm=s, qt='') ; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +**EXAMPLE 20** Format and informat macro variables values: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + %put %fmt(12345, date9.) %fmt(12345, yymmdd10.); + + %put %infmt($111234, dollar10.2); + %put %infmt($111.234, dollar10.2); + + %let text = ##%fmt(ABC, $char9., -C)##; + %put &text.; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +**EXAMPLE 21** "Macro including" a text file: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + filename f "%workpath()/testFile1.txt"; + data _null_; + file f; + put "13 14 15"; + run; + + data testDataset; + set sashelp.class; + where age in ( %mInclude(f) ); + run; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +**EXAMPLE 22** Repeating texts and lists: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas +options mprint; + +data work.A; + x=17; +data work.B; + x=42; +data work.C; + x=303; +run; + +data work.test5; + set + %repeatTxt(work.A work.B work.C, 5) + ; +run; + + +data Times2_A3B4C5; + set + %repList(work.A work.B work.C, times = 2, each = 3 4 5) + ; +run; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +**EXAMPLE 23** Date and time one-liners: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas +%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) +; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +**EXAMPLE 25** Zipping and unzipping directories: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas +options dlCreateDir; +libname arch1 "%workPath()/testArch1"; +libname arch2 "%workPath()/testArch2"; + +filename arch1 "%workPath()/testArch1"; + +data _null_; + file arch1(test1.txt); + put "text for test file 1"; +data _null_; + file arch1(test2.txt); + put "text for test file 2"; +data _null_; + file arch1(test3.txt); + put "text for test file 3"; +run; + +data arch1.class(index=(name)); + set sashelp.class; +run; +data arch1.cars(index=(model)); + set sashelp.cars; +run; + +%zipArch( + archName2.zip +, pathRef = arch1 +, target = %workPath()/testArch2 +, list = 1 +, overwrite = 1 +) + +%unzipArch( + archName2.zip +, path = %workPath()/testArch2 +, target = %workPath()/testArch2 +, clean=1 +, list=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 unziparch +23. macro unziplibrary +24. macro ziparch +25. macro zipevalf +26. macro ziplibrary +27. format bool +28. format boolz +29. format ceil +30. format floor +31. format int +32. functions arrfill +33. functions arrfillc +34. functions arrmissfill +35. functions arrmissfillc +36. functions arrmisstoleft +37. functions arrmisstoleftc +38. functions arrmisstoright +39. functions arrmisstorightc +40. functions bracketsc +41. functions bracketsn +42. functions catxfc +43. functions catxfi +44. functions catxfj +45. functions catxfn +46. functions deldataset +47. functions semicolonc +48. functions semicolonn +49. format brackets +50. format semicolon +51. proto qsortincbyprocproto +52. functions frommissingtonumberbs +53. functions fromnumbertomissing +54. functions quicksort4notmiss +55. functions quicksorthash +56. functions quicksorthashsddv +57. functions quicksortlight +58. macro date +59. macro datetime +60. macro filepath +61. macro finddswithvarval +62. macro fmt +63. macro gettitle +64. macro infmt +65. macro letters +66. macro libpath +67. macro minclude +68. macro monthshift +69. macro replist +70. macro time +71. macro today +72. macro translate +73. macro tranwrd +74. 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 20231107 * + +The SHA256 hash digest for package BasePlus: +`F*D84CE41A550DC2D5C092C70C04A796E8329F34087A603BEF0CD366910C162E80` + +--- +# Content description ############################################################################################ + +## >>> `%getVars()` macro: <<< ####################### + +The getVars() and QgetVars() macro functions +allow to extract variables names form a dataset +according to a given pattern into a list. + +The getVars() returns unquoted value [by %unquote()]. +The QgetVars() returns quoted value [by %superq()]. + +See examples below for the details. + +The `%getVars()` macro executes like a pure macro code. + +### SYNTAX: ################################################################### + +The basic syntax is the following, the `<...>` means optional parameters: +~~~~~~~~~~~~~~~~~~~~~~~sas +%getVars( + ds + <,sep=> + <,pattern=> + <,varRange=> + <,quote=> + <,mcArray=> +) +~~~~~~~~~~~~~~~~~~~~~~~ + +**Arguments description**: + +1. `ds` - *Required*, the name of the dataset from + which variables are to be taken. + +* `sep = %str( )` - *Optional*, default value `%str( )`, + a variables separator on the created list. + +* `pattern = .*` - *Optional*, default value `.*` (i.e. any text), + a variable name regexp pattern, case INSENSITIVE! + +* `varRange = _all_` - *Optional*, default value `_all_`, + a named range list of variables. + +* `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 + sashelp.class dataset: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + %put *%getVars(sashelp.class)*; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +**EXAMPLE 2.** A list of all variables from the + sashelp.class dataset separated + by backslash: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + %let x = %getVars(sashelp.class, sep=\); + %put &=x; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +**EXAMPLE 3.** Use of regular expressions: + a) A list of variables which name contains "i" or "a" +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + %put *%getVars(sashelp.class, pattern=i|a)*; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + b) A list of variables which name starts with "w" +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + %put *%getVars(sashelp.class, pattern=^w)*; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + c) A list of variables which name ends with "ght" +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + %put *%getVars(sashelp.class, pattern=ght$)*; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +**EXAMPLE 4.** A list of numeric variables which name + starts with "w" or "h" or ends with "x" +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + %put *%getVars(sashelp.class, sep=+, pattern=^(w|h)|x$, varRange=_numeric_)*; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +**EXAMPLE 5.** +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + data test; + array x[30]; + array y[30] $ ; + array z[30]; + run; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + a) A list of variables separated by a comma: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + %put *%getVars(test, sep=%str(,))*; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + b) A list of variables separated by a comma + with suffix 5 or 7: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + %put *%getVars(test, sep=%str(,), pattern=(5|7)$)*; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + c) A list of variables separated by a comma + with suffix 5 or 7 from a given variables range: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + %put *%getVars(test, sep=%str(,), varRange=x10-numeric-z22 y6-y26, pattern=(5|7)$)*; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +**EXAMPLE 6.** Case of quotes and special characters + when the quote= parameter is _not_ used: + + a) one single or double qiote: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + %put *%bquote(%getVars(sashelp.class, sep=%str(%")))*; + %put *%bquote(%getVars(sashelp.class, sep=%str(%')))*; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + b) two single or double qiotes: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + %put *"%bquote(%getVars(sashelp.class,sep=""))"*; + %put *%str(%')%bquote(%getVars(sashelp.class,sep=''))%str(%')*; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + c) coma separated double quote list: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + %put *"%getVars(sashelp.class,sep=%str(", "))"*; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + d) coma separated single quote list: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + %put *%str(%')%getVars(sashelp.class,sep=', ')%str(%')*; + %let x = %str(%')%getVars(sashelp.class,sep=', ')%str(%'); + + %put *%str(%')%QgetVars(sashelp.class,sep=', ')%str(%')*; + %let y = %str(%')%QgetVars(sashelp.class,sep=', ')%str(%'); + %let z = %unquote(&y.); +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + e) ampersand (&) as a separator [compare behaviour]: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + %put *%getVars(sashelp.class,sep=&)*; + %let x = %getVars(sashelp.class,sep=&); + + %put *%getVars(sashelp.class,sep=%str( & ))*; + %let x = %getVars(sashelp.class,sep=%str( & )); + + %put *%QgetVars(sashelp.class,sep=&)*; + %let y = %QgetVars(sashelp.class,sep=&); + %let z = %unquote(&y.); + + %put *%QgetVars(sashelp.class,sep=%str( & ))*; + %let y = %QgetVars(sashelp.class,sep=%str( & )); + %let z = %unquote(&y.); + + %put *%getVars(sashelp.class,sep=&)*; + %let x = %getVars(sashelp.class,sep=&); + + %put *%getVars(sashelp.class,sep=%str( & ))*; + %let x = %getVars(sashelp.class,sep=%str( & )); +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + f) percent (%) as a separator [compare behaviour]: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + %put *%QgetVars(sashelp.class,sep=%)*; + %let y = %QgetVars(sashelp.class,sep=%); + %let z = %unquote(&y.); + + %put *%QgetVars(sashelp.class,sep=%str( % ))*; + %let y = %QgetVars(sashelp.class,sep=%str( % )); + %let z = %unquote(&y.); +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +**EXAMPLE 7.** Case of quotes and special characters + when the quote= parameter is used: + +a) one single or double qiote: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + %put *%getVars(sashelp.class, quote=%str(%"))*; + %put *%getVars(sashelp.class, quote=%str(%'))*; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + b) two single or double quotes: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + %* this gives an error: ; + %* %put *%getVars(sashelp.class,quote="")*; + %* %put *%getVars(sashelp.class,quote='')*; + + %* this does not give an error: ; + %put *%QgetVars(sashelp.class,quote="")*; + %put *%QgetVars(sashelp.class,quote='')*; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + c) coma separated double quote list: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + %put *%getVars(sashelp.class,sep=%str(,),quote=%str(%"))*; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + d) coma separated single quote list: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + %let x = %getVars(sashelp.class,sep=%str(,),quote=%str(%')); + %put &=x.; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +**EXAMPLE 8.** Variables that start with `A` and do not end with `GHT`: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas +data class; + set sashelp.class; + Aeight = height; +run; + +%put *%getVars(class, pattern = ^A(.*)(?>> `%QgetVars()` macro: <<< ####################### + +The getVars() and QgetVars() macro functions +allow to extract variables names form a dataset +according to a given pattern into a list. + +The getVars() returns unquoted value [by %unquote()]. +The QgetVars() returns quoted value [by %superq()]. + +The `%QgetVars()` macro executes like a pure macro code. + +### SYNTAX: ################################################################### + +The basic syntax is the following, the `<...>` means optional parameters: +~~~~~~~~~~~~~~~~~~~~~~~sas +%QgetVars( + ds + <,sep=> + <,pattern=> + <,varRange=> + <,quote=> +) +~~~~~~~~~~~~~~~~~~~~~~~ + +**Arguments description**: + +1. `ds` - *Required*, the name of the dataset from + which variables are to be taken. + +* `sep = %str( )` - *Optional*, default value `%str( )`, + a variables separator on the created list. + +* `pattern = .*` - *Optional*, default value `.*` (i.e. any text), + a variable name regexp pattern, case INSENSITIVE! + +* `varRange = _all_` - *Optional*, default value `_all_`, + a named range list of variables. + +* `quote =` - *Optional*, default value is blank, a quotation + symbol to be used around values. + +### EXAMPLES AND USECASES: #################################################### + +See examples in `%getVars()` help for the details. + +--- + +## >>> `%symdelGlobal()` macro: <<< ####################### + +The `%symdelGlobal()` macro deletes all global macrovariables +created by the user. The only exceptions are read only variables +and variables the one which starts with SYS, AF, or FSP. +In that case a warning is printed in the log. + +One temporary global macrovariable `________________98_76_54_32_10_` +and a dataset, in `work` library, named `_%sysfunc(datetime(),hex7.)` +are created and deleted during the process. + +The `%symdelGlobal()` macro executes like a pure macro code. + +### SYNTAX: ################################################################### + +The basic syntax is the following, the `<...>` means optional parameters: +~~~~~~~~~~~~~~~~~~~~~~~sas +%symdelGlobal( + info +) +~~~~~~~~~~~~~~~~~~~~~~~ + +**Arguments description**: + +1. `info` - *Optional*, default value should be empty, + if set to `NOINFO` or `QUIET` then infos and + warnings about variables deletion are suspended. + + +### EXAMPLES AND USECASES: #################################################### + +**EXAMPLE 1.** Basic use-case one. + Delete global macrovariables, info notes + and warnings are printed in the log. + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + %let a = 1; + %let b = 2; + %let c = 3; + %let sys_my_var = 11; + %let af_my_var = 22; + %let fsp_my_var = 33; + %global / readonly read_only_x = 1234567890; + + %put _user_; + + %symdelGlobal(); + + %put _user_; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +**EXAMPLE 2.** Basic use-case two. + Delete global macrovariables in quite mode + No info notes and warnings are printed in the log. + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + %let a = 1; + %let b = 2; + %let c = 3; + %let sys_my_var = 11; + %let af_my_var = 22; + %let fsp_my_var = 33; + %global / readonly read_only_x = 1234567890; + + %put _user_; + %put *%symdelGlobal(NOINFO)*; + %put _user_; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +--- + +## >>> `bool.` format: <<< ####################### + +The **bool** format returns: +*zero* for 0 or missing, +*one* for other values. + +### EXAMPLES AND USECASES: #################################################### + +It allows for a %sysevalf()'ish +conversion-type [i.e. `%sysevalf(1.7 & 4.2, boolean)`] +inside the `%sysfunc()` [e.g. `%sysfunc(aFunction(), bool.)`] + +--- + +## >>> `boolz.` format: <<< ####################### + +The **boolz** format returns: +*zero* for 0 or missing, +*one* for other values. + +*Fuzz* value is 0. + +### EXAMPLES AND USECASES: #################################################### + +It allows for a %sysevalf()'ish +conversion-type [i.e. `%sysevalf(1.7 & 4.2, boolean)`] +inside the `%sysfunc()` [e.g. `%sysfunc(aFunction(), boolz.)`] + +--- + +## >>> `ceil.` format: <<< ####################### + +The **ceil** format is a "wrapper" for the `ceil()` function. + +### EXAMPLES AND USECASES: #################################################### + +It allows for a %sysevalf()'ish +conversion-type [i.e. `%sysevalf(1.7 + 4.2, ceil)`] +inside the `%sysfunc()` [e.g. `%sysfunc(aFunction(), ceil.)`] + +--- + +## >>> `floor.` format: <<< ####################### + +The **floor** format is a "wrapper" for the `floor()` function. + +### EXAMPLES AND USECASES: #################################################### + +It allows for a %sysevalf()'ish +conversion-type [i.e. `%sysevalf(1.7 + 4.2, floor)`] +inside the `%sysfunc()` [e.g. `%sysfunc(aFunction(), floor.)`] + +--- + +## >>> `int.` format: <<< ####################### + +The **int** format is a "wrapper" for the `int()` function. + +### EXAMPLES AND USECASES: #################################################### + +It allows for a %sysevalf()'ish +conversion-type [i.e. `%sysevalf(1.7 + 4.2, integer)`] +inside the `%sysfunc()` [e.g. `%sysfunc(aFunction(), int.)`] + +--- + +## >>> `arrFill()` subroutine: <<< ####################### + +The **arrFill()** subroutine is a wrapper +for the Call Fillmatrix() [a special FCMP subroutine]. + +A numeric array is filled with selected numeric value, e.g. + +for array `A = [. . . .]` the subroutine +`call arrFill(42, A)` returns `A = [42 42 42 42]` + +*Caution!* Array parameters to subroutine calls *must* be 1-based. + +### SYNTAX: ################################################################### + +The basic syntax is the following, the `<...>` means optional parameters: +~~~~~~~~~~~~~~~~~~~~~~~sas +call arrFill(N ,A) +~~~~~~~~~~~~~~~~~~~~~~~ + +**Arguments description**: + +1. `N` - Numeric value. + +2. `A` - Numeric array. + + +### EXAMPLES AND USECASES: #################################################### + +**Example 1.** +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas +data _null_; + array X[*] a b c; + + put "before: " (_all_) (=); + call arrFill(42, X); + put "after: " (_all_) (=); + +run; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +--- + +## >>> `arrFillC()` subroutine: <<< ####################### + +The **arrFillC()** subroutine fills +a character array with selected character value, e.g. + +for array `A = [" ", " ", " "]` the subroutine +`call arrFillC("B", A)` returns `A = ["B", "B", "B"]` + +*Caution!* Array parameters to subroutine calls *must* be 1-based. + +### SYNTAX: ################################################################### + +The basic syntax is the following, the `<...>` means optional parameters: +~~~~~~~~~~~~~~~~~~~~~~~sas +call arrFillC(C ,A) +~~~~~~~~~~~~~~~~~~~~~~~ + +**Arguments description**: + +1. `C` - Character value. + +2. `A` - Character array. + + +### EXAMPLES AND USECASES: #################################################### + +**Example 1.** +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas +data _null_; + array X[*] $ a b c; + + put "before: " (_all_) (=); + call arrFillC("ABC", X); + put "after: " (_all_) (=); + +run; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +--- + +## >>> `arrMissFill()` subroutine: <<< ####################### + +The **arrMissFill()** subroutine fills +all missing values (i.e. less or equal than `.Z`) +of a numeric array with selected numeric value, e.g. + +for array `A = [1 . . 4]` the subroutine +`call arrMissFill(42, A)` returns `A = [1 42 42 4]` + +*Caution!* Array parameters to subroutine calls *must* be 1-based. + +### SYNTAX: ################################################################### + +The basic syntax is the following, the `<...>` means optional parameters: +~~~~~~~~~~~~~~~~~~~~~~~sas +call arrMissFill(N ,A) +~~~~~~~~~~~~~~~~~~~~~~~ + +**Arguments description**: + +1. `N` - Numeric value. + +2. `A` - Numeric array. + + +### EXAMPLES AND USECASES: #################################################### + +**Example 1.** +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas +data have; + input a b c; +cards4; +1 . 3 +. 2 . +. . 3 +;;;; +run; + +data _null_; + set have ; + array X[*] a b c; + + put "before: " (_all_) (=); + call arrMissFill(42, X); + put "after: " (_all_) (=); + +run; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +--- + +## >>> `arrMissFillC()` subroutine: <<< ####################### + +The **arrMissFillC()** subroutine fills +all missing values of a character array +with selected character value, e.g. + +for array `A = ["A", " ", "C"]` the subroutine +`call arrMissFillC("B", A)` returns `A = ["A", "B", "C"]` + +*Caution!* Array parameters to subroutine calls *must* be 1-based. + +### SYNTAX: ################################################################### + +The basic syntax is the following, the `<...>` means optional parameters: +~~~~~~~~~~~~~~~~~~~~~~~sas +call arrMissFillC(C, A) +~~~~~~~~~~~~~~~~~~~~~~~ + +**Arguments description**: + +1. `C` - Character value. + +2. `A` - Character array. + + +### EXAMPLES AND USECASES: #################################################### + +**Example 1.** +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas +data have; + infile cards dsd dlm="," missover; + input (a b c) (: $ 1.); +cards4; +A, ,C + ,B, + , ,C +;;;; +run; + +data _null_; + set have ; + array X[*] $ a b c; + + put "before: " (_all_) (=); + call arrMissFillC("X", X); + put "after: " (_all_) (=); + +run; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +--- + +## >>> `arrMissToLeft()` subroutine: <<< ####################### + +The **arrMissToLeft()** subroutine shifts +all non-missing (i.e. greater than `.Z`) +numeric elements to the right side of an array +and missing values to the left, e.g. + +for array `A = [1 . 2 . 3]` the subroutine +`call arrMissToLeft(A)` returns `A = [. . 1 2 3]` + +All missing values are replaced with the dot (`.`) + +*Caution!* Array parameters to subroutine calls *must* be 1-based. + +### SYNTAX: ################################################################### + +The basic syntax is the following, the `<...>` means optional parameters: +~~~~~~~~~~~~~~~~~~~~~~~sas +call arrMissToLeft(A) +~~~~~~~~~~~~~~~~~~~~~~~ + +**Arguments description**: + +1. `A` - Numeric array. + + +### EXAMPLES AND USECASES: #################################################### + +**Example 1.** +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas +data have; + input a b c; +cards4; +1 . 3 +. 2 . +. . 3 +;;;; +run; + +data _null_; + set have ; + array X[*] a b c; + + put "before: " (_all_) (=); + call arrMissToLeft(X); + put "after: " (_all_) (=); + +run; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +--- + +## >>> `arrMissToLeftC()` subroutine: <<< ####################### + +The **arrMissToLeftC()** subroutine shifts +all non-missing (i.e. different than empty string) +character elements to the right side of an array +and all missing values to the left, e.g. + +for array `A = ["A", " ", "B", " ", "C"]` the subroutine +`call arrMissToLeftC(A)` returns `A = [" ", " ", "A", "B", "C"]` + +*Caution!* Array parameters to subroutine calls *must* be 1-based. + +### SYNTAX: ################################################################### + +The basic syntax is the following, the `<...>` means optional parameters: +~~~~~~~~~~~~~~~~~~~~~~~sas +call arrMissToLeftC(A) +~~~~~~~~~~~~~~~~~~~~~~~ + +**Arguments description**: + +1. `A` - Character array. + + +### EXAMPLES AND USECASES: #################################################### + +**Example 1.** +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas +data have; + infile cards dsd dlm="," missover; + input (a b c) (: $ 1.); +cards4; +A, ,C + ,B, + , ,C +;;;; +run; + +data _null_; + set have ; + array X[*] $ a b c; + + put "before: " (_all_) (=); + call arrMissToLeftC(X); + put "after: " (_all_) (=); + +run; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +--- + +## >>> `arrMissToRight()` subroutine: <<< ####################### + +The **arrMissToRight()** subroutine shifts +all non-missing (i.e. greater than `.Z`) +numeric elements to the left side of an array +and missing values to the right, e.g. + +for array `A = [1 . 2 . 3]` the subroutine +`call arrMissToRight(A)` returns `A = [1 2 3 . .]` + +All missing values are replaced with the dot (`.`) + +*Caution!* Array parameters to subroutine calls *must* be 1-based. + +### SYNTAX: ################################################################### + +The basic syntax is the following, the `<...>` means optional parameters: +~~~~~~~~~~~~~~~~~~~~~~~sas +call arrMissToRight(A) +~~~~~~~~~~~~~~~~~~~~~~~ + +**Arguments description**: + +1. `A` - Numeric array. + + +### EXAMPLES AND USECASES: #################################################### + +**Example 1.** +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas +data have; + input a b c; +cards4; +1 . 3 +. 2 . +. . 3 +;;;; +run; + +data _null_; + set have ; + array X[*] a b c; + + put "before: " (_all_) (=); + call arrMissToRight(X); + put "after: " (_all_) (=); + +run; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +--- + +## >>> `arrMissToRightC()` subroutine: <<< ####################### + +The **arrMissToRightC()** subroutine shifts +all non-missing (i.e. different than empty string) +character elements to the left side of an array +and missing values to the right, e.g. + +for array `A = ["A", " ", "B", " ", "C"]` the subroutine +`call arrMissToRightC(A)` returns `A = ["A", "B", "C", " ", " "]` + +*Caution!* Array parameters to subroutine calls *must* be 1-based. + +### SYNTAX: ################################################################### + +The basic syntax is the following, the `<...>` means optional parameters: +~~~~~~~~~~~~~~~~~~~~~~~sas +call arrMissToRightC(A) +~~~~~~~~~~~~~~~~~~~~~~~ + +**Arguments description**: + +1. `A` - Character array. + + +### EXAMPLES AND USECASES: #################################################### + +**Example 1.** +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas +data have; + infile cards dsd dlm="," missover; + input (a b c) (: $ 1.); +cards4; +A, ,C + ,B, + , ,C +;;;; +run; + +data _null_; + set have ; + array X[*] $ a b c; + + put "before: " (_all_) (=); + call arrMissToRightC(X); + put "after: " (_all_) (=); + +run; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +--- + +## >>> `catXFc()` function: <<< ####################### + +The **catXFc()** function is a wrapper +of the `catX()` function but with ability +to format character values. + +For array `A = ["a", " ", "c"]` the +`catXFc("upcase.", "*", A)` returns `"A*C"`. + +If format does not handle nulls they are ignored. + +*Caution!* Array parameters to function calls *must* be 1-based. + +### SYNTAX: ################################################################### + +The basic syntax is the following, the `<...>` means optional parameters: +~~~~~~~~~~~~~~~~~~~~~~~sas +catXFc(format, delimiter, A) +~~~~~~~~~~~~~~~~~~~~~~~ + +**Arguments description**: + +1. `format` - A name of the *character* format to be used. + +2. `delimiter` - A delimiter string to be used. + +3. `A` - Character array + + +### EXAMPLES AND USECASES: #################################################### + +**Example 1.** +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas +data _null_; + t = "t"; + u = " "; + v = "v"; + + array b[*] t u v; + + length s $ 17; + s = catXFc("upcase.", "*", B); + put (_all_) (=); +run; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +--- + +## >>> `catXFi()` function: <<< ####################### + +The **catXFi()** function is a wrapper +of the `catX()` function but with ability +to format numeric values but +IGNORES missing values (i.e. `._`, `.`, `.a`, ..., `.z`). + +For array `A = [0, ., 2]` the +`catXFi("date9.", "#", A)` returns +`"01JAN1960#03JAN1960"` + +*Caution!* Array parameters to function calls *must* be 1-based. + +### SYNTAX: ################################################################### + +The basic syntax is the following, the `<...>` means optional parameters: +~~~~~~~~~~~~~~~~~~~~~~~sas +catXFi(format, delimiter, A) +~~~~~~~~~~~~~~~~~~~~~~~ + +**Arguments description**: + +1. `format` - A name of the *numeric* format to be used. + +2. `delimiter` - A delimiter string to be used. + +3. `A` - Numeric array + + +### EXAMPLES AND USECASES: #################################################### + +**Example 1.** +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas +data _null_; + x = 1; + y = .; + z = 3; + + array a[*] x y z; + + length s $ 17; + s = catXFi("z5.", "#", A); + put (_all_) (=); +run; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +--- + +## >>> `catXFj()` function: <<< ####################### + +The **catXFj()** function is a wrapper +of the catX() function but with ability +to format character values. + +For array `A = ["a", " ", "c"]` the +`catXFj("upcase.", "*", A)` returns `"A**C"` + +If format does not handle nulls they are +printed as an empty string. + +*Caution!* Array parameters to function calls *must* be 1-based. + +### SYNTAX: ################################################################### + +The basic syntax is the following, the `<...>` means optional parameters: +~~~~~~~~~~~~~~~~~~~~~~~sas +catXFj(format, delimiter, A) +~~~~~~~~~~~~~~~~~~~~~~~ + +**Arguments description**: + +1. `format` - A name of the *character* format to be used. + +2. `delimiter` - A delimiter string to be used. + +3. `A` - Character array + + +### EXAMPLES AND USECASES: #################################################### + +**Example 1.** +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas +data _null_; + t = "t"; + u = " "; + v = "v"; + + array b[*] t u v; + + length s $ 17; + s = catXFj("upcase.", "*", B); + put (_all_) (=); +run; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +--- + +## >>> `catXFn()` function: <<< ####################### + +The **catXFn()** function is a wrapper +of the `catX()` function but with ability +to format numeric values. + +For array `A = [0, 1, 2]` the +`catXFn("date9.", "#", A)` returns +`"01JAN1960#02JAN1960#03JAN1960"` + +*Caution!* Array parameters to function calls *must* be 1-based. + +### SYNTAX: ################################################################### + +The basic syntax is the following, the `<...>` means optional parameters: +~~~~~~~~~~~~~~~~~~~~~~~sas +catXFn(format, delimiter, A) +~~~~~~~~~~~~~~~~~~~~~~~ + +**Arguments description**: + +1. `format` - A name of the *numeric* format to be used. + +2. `delimiter` - A delimiter string to be used. + +3. `A` - Numeric array + + +### EXAMPLES AND USECASES: #################################################### + +**Example 1.** +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas +data _null_; + x = 1; + y = .; + z = 3; + + array a[*] x y z; + + length s $ 17; + s = catXFn("z5.", "#", A); + put (_all_) (=); +run; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +--- + +## >>> `delDataset()` function: <<< ####################### + +The **delDataset()** function is a "wrapper" +for the `Fdelete()` function. +`delDataset()` function uses a text string with +a dataset name as an argument. + +Function checks for `*.sas7bdat`, `*.sas7bndx`, +and `*.sas7bvew` files and delete them. +Return code of 0 means dataset was deleted. + +For compound library files are +deleted from _ALL_ locations! + + +*Note:* +Currently only the BASE SAS engine datasets/views are deleted. + +Tested on Windows and Linux. Not tested on Z/OS. + +### SYNTAX: ################################################################### + +The basic syntax is the following, the `<...>` means optional parameters: +~~~~~~~~~~~~~~~~~~~~~~~sas +delDataset(lbds_) +~~~~~~~~~~~~~~~~~~~~~~~ + +**Arguments description**: + +1. `lbds_` - *Required*, character argument containing + name of the dataset/view to be deleted. + The `_last_` special name is honored. + +### EXAMPLES AND USECASES: #################################################### + +**EXAMPLE 1.** +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + data TEST1 TEST2(index=(x)); + x = 17; + run; + + data TEST3 / view=TEST3; + set test1; + run; + + data _null_; + p = delDataset("WORK.TEST1"); + put p=; + + p = delDataset("TEST2"); + put p=; + + p = delDataset("WORK.TEST3"); + put p=; + run; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +**Example 2.** +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + data TEST4; + x=42; + run; + data _null_; + p = delDataset("_LAST_"); + put p=; + run; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +**Example 3.** +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + options dlcreatedir; + libname user "%sysfunc(pathname(work))/user"; + + data TEST5; + x=42; + run; + + data _null_; + p = delDataset("test5"); + put p=; + run; + + libname user clear; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +**Example 4.** +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + data TEST6; + x=42; + run; + + %put *%sysfunc(delDataset(test6))*; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +**Example 5.** +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + options dlcreatedir; + libname L1 "%sysfunc(pathname(work))/L)1"; + libname L2 "%sysfunc(pathname(work))/L(2"; + libname L3 "%sysfunc(pathname(work))/L'3"; + + data L1.TEST7 L2.TEST7 L3.TEST7; + x=42; + run; + + libname L12 ("%sysfunc(pathname(work))/L(1" "%sysfunc(pathname(work))/L)2"); + libname L1L2 (L2 L3); + + %put *%sysfunc(delDataset(L12.test7))*; + %put *%sysfunc(delDataset(L1L2.test7))*; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +--- + +## >>> `qsortInCbyProcProto()` proto function: <<< ####################### + +The **qsortInCbyProcProto()** is external *C* function, +this is the implementation of the *Quick Sort* algorithm. + +The function is used **internally** by +functions in the *BasePlus* package. + +Asumptions: +- smaller subarray is sorted first, +- subarrays of *size < 11* are sorted by *insertion sort*, +- pivot is selected as median of low index value, + high index value, and (low+high)/2 index value. + +`!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!`
+`!CAUTION! Sorted array CANNOT contains SAS missing values !`
+`!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!`
+ +### SYNTAX: ################################################################### + +The basic syntax is the following: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas +qsortInCbyProcProto(arr, low, high) +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +**Arguments description**: + +1. `arr` - An array of double type to be sorted. + +2. `low` - An integer low index of starting position (from which the sorting is done). + +3. `high` - An integer high index of ending position (up to which the sorting is done). + + +### REFERENCES: #################################################### + +*Reference 1.* + +Insertion sort for arrays smaller then 11 elements: + +Based on the code from the following WikiBooks page [2020.08.14]: + +[https://pl.wikibooks.org/wiki/Kody_%C5%BAr%C3%B3d%C5%82owe/Sortowanie_przez_wstawianie](https://pl.wikibooks.org/wiki/Kody_%C5%BAr%C3%B3d%C5%82owe/Sortowanie_przez_wstawianie) + + +*Reference 2.* + +Iterative Quick Sort: + +Based on the code from the following pages [2020.08.14]: + +[https://www.geeksforgeeks.org/iterative-quick-sort/](https://www.geeksforgeeks.org/iterative-quick-sort/) + +[https://www.geeksforgeeks.org/c-program-for-iterative-quick-sort/](https://www.geeksforgeeks.org/c-program-for-iterative-quick-sort/) + +--- + +## >>> `fromMissingToNumberBS()` function: <<< ####################### + +The **fromMissingToNumberBS()** function +gets numeric missing value or a number +as an argument and returns an integer +from 1 to 29. + +For a numeric missing argument +the returned values are: +- 1 for `._` +- 2 for `.` +- 3 for `.a` +- ... +- 28 for `.z` and +- 29 for *all other*. + +The function is used **internally** by +functions in the *BasePlus* package. + +For *missing value arguments* the function +is an inverse of the `fromNumberToMissing()` function. + +### SYNTAX: ################################################################### + +The basic syntax is the following, the `<...>` means optional parameters: +~~~~~~~~~~~~~~~~~~~~~~~sas +fromMissingToNumberBS(x) +~~~~~~~~~~~~~~~~~~~~~~~ + +**Arguments description**: + +1. `x` - A numeric missing value or a number. + + +### EXAMPLES AND USECASES: #################################################### + +**EXAMPLE 1.** +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + data _null_; + do x = ._, ., .a, .b, .c, 42; + y = fromMissingToNumberBS(x); + put x= y=; + end; + run; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +--- + +## >>> `fromNumberToMissing()` function: <<< ####################### + +The **fromNumberToMissing()** function +gets a number as an argument and returns +a numeric missing value or zero. + +For a numeric argument +the returned values are: +- `._` for 1 +- `.` for 2 +- `.a` for 3 +- ... +- `.z` for 28 and +- `0` for *all other*. + +The function is used **internally** by +functions in the *BasePlus* package. + +For arguments 1,2,3, ..., and 28 the function +is an inverse of the `fromMissingToNumberBS()` function. + +### SYNTAX: ################################################################### + +The basic syntax is the following, the `<...>` means optional parameters: +~~~~~~~~~~~~~~~~~~~~~~~sas +fromNumberToMissing(x) +~~~~~~~~~~~~~~~~~~~~~~~ + +**Arguments description**: + +1. `x` - A numeric value. + + +### EXAMPLES AND USECASES: #################################################### + +**EXAMPLE 1.** +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + data _null_; + do x = 1 to 29; + y = fromNumberToMissing(x); + put x= y=; + end; + run; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +--- + +## >>> `quickSort4NotMiss()` subroutine: <<< ####################### + +The **quickSort4NotMiss()** subroutine is an alternative to the +`CALL SORTN()` subroutine for 1-based big arrays (i.e. `> 10'000'000` elements) +when memory used by `call sortn()` may be an issue. +For smaller arrays the memory footprint is not significant. + +The subroutine is based on an iterative quick sort algorithm +implemented in the `qsortInCbyProcProto()` *C* prototype function. + + +**Caution 1!** Array _CANNOT_ contains missing values! + +**Caution 2!** Array parameters to subroutine calls must be 1-based. + +### SYNTAX: ################################################################### + +The basic syntax is the following, the `<...>` means optional parameters: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas +call quickSort4NotMiss(A) +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +**Arguments description**: + +1. `A` - Argument is a 1-based array of NOT missing numeric values. + + +### EXAMPLES AND USECASES: #################################################### + +**EXAMPLE 1.** For session with 8GB of RAM, + array of size 250'000'000 with values in range + from 0 to 99'999'999 and _NO_ missing values. +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + %let size = 250000000; + options fullstimer; + + data _null_; + array test[&size.] _temporary_ ; + + t = time(); + call streaminit(123); + do _N_ = &size. to 1 by -1; + test[_N_] = int(100000000*rand("uniform")); + end; + t = time() - t; + put "Array population time: " t; + + put "First 50 elements before sorting:"; + do _N_ = 1 to 20; + put test[_N_] = @; + end; + + t = time(); + call quickSort4NotMiss (test); + t = time()-t; + put "Sorting time: " / t=; + + put; put "First 50 elements after sorting:"; + do _N_ = 1 to 20; + put test[_N_] = @; + end; + run; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +**Example 2.** Resources comparison for + session with 8GB of RAM. + + Array of size 250'000'000 with random values + from 0 to 999'999'999 and _NO_ missing values. +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + Array: + Population time 8.82s + memory 1'953'470.62k + OS Memory 1'977'436.00k + + Call quickSort4NotMiss: + Sorting time 66.92s + Memory 1'954'683.06k + OS Memory 1'977'436.00k + + Call quickSortLight: + Sorting time 70.98s + Memory 1'955'479.71k + OS Memory 1'977'436.00k +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +--- + +## >>> `quickSortHash()` subroutine: <<< ####################### + +The **quickSortHash()** subroutine is an alternative to the +`CALL SORTN()` subroutine for 1-based big arrays (i.e. `> 10'000'000` elements) +when memory used by `call sortn()` may be an issue. +For smaller arrays the memory footprint is not significant. + +The subroutine is based on an iterative quick sort algorithm +implemented in the `qsortInCbyProcProto()` *C* prototype function. + +The number of "sparse distinct data values" is set to `100'000` to +use the hash sort instead of the quick sort. + E.g. when number of unique values for sorting is less then + 100'000 then an ordered hash table is used to store the data + and their count and sort them. + +*Caution!* Array parameters to subroutine calls *must* be 1-based. + +*Note!* Due to improper memory reporting/releasing for hash + tables in FCMP procedure the reported memory used after running + the function may not be in line with the RAM memory required + for processing. + +### SYNTAX: ################################################################### + +The basic syntax is the following, the `<...>` means optional parameters: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas +call quickSortHash(A) +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +**Arguments description**: + +1. `A` - Argument is a 1-based array of numeric values. + + +### EXAMPLES AND USECASES: #################################################### + +**EXAMPLE 1.** For session with 8GB of RAM + Array of size 250'000'000 with values in range + from 0 to 99'999'999 and around 10% of various + missing values. +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + %let size = 250000000; + options fullstimer; + + data _null_; + array test[&size.] _temporary_ ; + + array m[0:27] _temporary_ + (._ . .A .B .C .D .E .F .G .H .I .J .K .L + .M .N .O .P .Q .R .S .T .U .V .W .X .Y .Z); + + t = time(); + call streaminit(123); + do _N_ = &size. to 1 by -1; + _I_ + 1; + if rand("uniform") > 0.1 then test[_I_] = int(100000000*rand("uniform")); + else test[_I_] = m[mod(_N_,28)]; + end; + t = time() - t; + put "Array population time: " t; + + put "First 50 elements before sorting:"; + do _N_ = 1 to 20; + put test[_N_] = @; + end; + + t = time(); + call quickSortHash (test); + t = time()-t; + put "Sorting time: " / t=; + + put; put "First 50 elements after sorting:"; + do _N_ = 1 to 20; + put test[_N_] = @; + end; + run; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +**Example 2.** For session with 8GB of RAM + Array of size 250'000'000 with values in range + from 0 to 9'999 and around 10% of various + missing values. +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + %let size = 250000000; + options fullstimer; + + data _null_; + array test[&size.] _temporary_ ; + + array m[0:27] _temporary_ + (._ . .A .B .C .D .E .F .G .H .I .J .K .L + .M .N .O .P .Q .R .S .T .U .V .W .X .Y .Z); + + t = time(); + call streaminit(123); + do _N_ = &size. to 1 by -1; + _I_ + 1; + if rand("uniform") > 0.1 then test[_I_] = int(10000*rand("uniform")); + else test[_I_] = m[mod(_N_,28)]; + end; + t = time() - t; + put "Array population time: " t; + + put "First 50 elements before sorting:"; + do _N_ = 1 to 20; + put test[_N_] = @; + end; + + t = time(); + call quickSortHash (test); + t = time()-t; + put "Sorting time: " / t=; + + put; put "First 50 elements after sorting:"; + do _N_ = 1 to 20; + put test[_N_] = @; + end; + run; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +**Example 3.** Resources comparison for + session with 8GB of RAM + + A) Array of size 10'000'000 with + random values from 0 to 9'999 range (sparse) + and around 10% of missing data. +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + Array: + Population time 0.61s + Memory 78'468.50k + OS Memory 101'668.00k + + Call sortn: + Sorting time 0.87s + Memory 1'120'261.53k + OS Memory 1'244'968.00k + + Call quickSortHash: + Sorting time 6.76s + Memory 1'222'242.75k(*) + OS Memory 1'402'920.00k(*) + + Call quickSortLight: + Sorting time 23.45s + Memory 80'527.75k + OS Memory 101'924.00k +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + B) Array of size 10'000'000 with + random values from 0 to 99'999'999 range (dense) + and around 10% of missing data. +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + Array: + Population time 0.6s + Memory 78'463.65k + OS Memory 101'924.00k + + Call sortn: + Sorting time 1.51s + Memory 1'120'253.53k + OS Memory 1'244'968.00k + + Call quickSortHash: + Sorting time 6.28s + Memory 1'222'241.93k(*) + OS Memory 1'402'920.00k(*) + + Call quickSortLight: + Sorting time 0.78s + Memory 80'669.28k + OS Memory 102'436.00k +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + C) Array of size 250'000'000 with + random values from 0 to 999'999'999 range (dense) + and around 10% of missing data. +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + Array: + Population time 15.34s + memory 1'953'471.81k + OS Memory 1'977'436.00k + + Call sortn: + FATAL: Insufficient memory to execute DATA step program. + Aborted during the COMPILATION phase. + ERROR: The SAS System stopped processing this step + because of insufficient memory. + + Call quickSortHash: + Sorting time 124.68s + Memory 7'573'720.34k(*) + OS Memory 8'388'448.00k(*) + + Call quickSortLight: + Sorting time 72.41s + Memory 1'955'520.78k + OS Memory 1'977'180.00k +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + D) Array of size 250'000'000 with + random values from 0 to 99'999 range (sparse) + and around 10% of missing data. +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + Array: + Population time 16.07 + Memory 1'953'469.78k + OS Memory 1'977'180.00k + + Call sortn: + FATAL: Insufficient memory to execute DATA step program. + Aborted during the COMPILATION phase. + ERROR: The SAS System stopped processing this step + because of insufficient memory. + + Call quickSortHash: + Sorting time 123.5s + Memory 7'573'722.03k + OS Memory 8'388'448.00k + + Call quickSortLight: + Sorting time 1'338.25s + Memory 1'955'529.90k + OS Memory 1'977'436.00k +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +(*) When using hash tables in `Proc FCMP` the RAM + usage is not indicated properly. The memory + allocation is reported up to the session limit + and then reused if needed. The really required + memory is in fact much less then reported. + +--- + +## >>> `quickSortHashSDDV()` subroutine: <<< ####################### + +The **quickSortHashSDDV()** subroutine is an alternative to the +`CALL SORTN()` subroutine for 1-based big arrays (i.e. `> 10'000'000` elements) +when memory used by `call sortn()` may be an issue. +For smaller arrays the memory footprint is not significant. + +The subroutine is based on an iterative quick sort algorithm +implemented in the `qsortInCbyProcProto()` *C* prototype function. + +The number of "sparse distinct data values" (argument `SDDV`) may +be adjusted to use the hash sort instead of the quick sort. + E.g. when number of unique values for sorting is less then + some *N* then an ordered hash table is used to store the data + and their count and sort them. + +*Caution!* Array parameters to subroutine calls *must* be 1-based. + +*Note!* Due to improper memory reporting/releasing for hash + tables in FCMP procedure the report memory used after running + the function may not be in line with the RAM memory required + for processing. + +### SYNTAX: ################################################################### + +The basic syntax is the following, the `<...>` means optional parameters: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas +call quickSortHashSDDV(A, SDDV) +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +**Arguments description**: + +1. `A` - Argument is a 1-based array of numeric values. + +2. `SDDV` - A number of distinct data values, e.g. 100'000. + + +### EXAMPLES AND USECASES: #################################################### + +**EXAMPLE 1.** For session with 8GB of RAM + Array of size 250'000'000 with values in range + from 0 to 99'999'999 and around 10% of various + missing values. +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + %let size = 250000000; + options fullstimer; + + data _null_; + array test[&size.] _temporary_ ; + + array m[0:27] _temporary_ + (._ . .A .B .C .D .E .F .G .H .I .J .K .L + .M .N .O .P .Q .R .S .T .U .V .W .X .Y .Z); + + t = time(); + call streaminit(123); + do _N_ = &size. to 1 by -1; + _I_ + 1; + if rand("uniform") > 0.1 then test[_I_] = int(100000000*rand("uniform")); + else test[_I_] = m[mod(_N_,28)]; + end; + t = time() - t; + put "Array population time: " t; + + put "First 50 elements before sorting:"; + do _N_ = 1 to 20; + put test[_N_] = @; + end; + + t = time(); + call quickSortHashSDDV (test, 2e4); + t = time()-t; + put "Sorting time: " / t=; + + put; put "First 50 elements after sorting:"; + do _N_ = 1 to 20; + put test[_N_] = @; + end; + run; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +**Example 2.** For session with 8GB of RAM + Array of size 250'000'000 with values in range + from 0 to 9'999 and around 10% of various + missing values. +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + %let size = 250000000; + options fullstimer; + + data _null_; + array test[&size.] _temporary_ ; + + array m[0:27] _temporary_ + (._ . .A .B .C .D .E .F .G .H .I .J .K .L + .M .N .O .P .Q .R .S .T .U .V .W .X .Y .Z); + + t = time(); + call streaminit(123); + do _N_ = &size. to 1 by -1; + _I_ + 1; + if rand("uniform") > 0.1 then test[_I_] = int(10000*rand("uniform")); + else test[_I_] = m[mod(_N_,28)]; + end; + t = time() - t; + put "Array population time: " t; + + put "First 50 elements before sorting:"; + do _N_ = 1 to 20; + put test[_N_] = @; + end; + + t = time(); + call quickSortHashSDDV (test, 2e4); + t = time()-t; + put "Sorting time: " / t=; + + put; put "First 50 elements after sorting:"; + do _N_ = 1 to 20; + put test[_N_] = @; + end; + run; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +--- + +## >>> `quickSortLight()` subroutine: <<< ####################### + +The **quickSortLight()** subroutine is an alternative to the +`CALL SORTN()` subroutine for 1-based big arrays (i.e. `> 10'000'000` elements) +when memory used by `call sortn()` may be an issue. +For smaller arrays the memory footprint is not significant. + +The subroutine is based on an iterative quick sort algorithm +implemented in the `qsortInCbyProcProto()` *C* prototype function. + +*Caution!* Array parameters to subroutine calls *must* be 1-based. + +### SYNTAX: ################################################################### + +The basic syntax is the following, the `<...>` means optional parameters: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas +call quickSortLight(A) +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +**Arguments description**: + +1. `A` - Argument is a 1-based array of numeric values. + + +### EXAMPLES AND USECASES: #################################################### + +**EXAMPLE 1.** For session with 8GB of RAM + Array of size 250'000'000 with values in range + from 0 to 99'999'999 and around 10% of various + missing values. +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + %let size = 250000000; + options fullstimer; + + data _null_; + array test[&size.] _temporary_ ; + + array m[0:27] _temporary_ + (._ . .A .B .C .D .E .F .G .H .I .J .K .L + .M .N .O .P .Q .R .S .T .U .V .W .X .Y .Z); + + t = time(); + call streaminit(123); + do _N_ = &size. to 1 by -1; + _I_ + 1; + if rand("uniform") > 0.1 then test[_I_] = int(100000000*rand("uniform")); + else test[_I_] = m[mod(_N_,28)]; + end; + t = time() - t; + put "Array population time: " t; + + put "First 50 elements before sorting:"; + do _N_ = 1 to 20; + put test[_N_] = @; + end; + + t = time(); + call quickSortLight (test); + t = time()-t; + put "Sorting time: " / t=; + + put; put "First 50 elements after sorting:"; + do _N_ = 1 to 20; + put test[_N_] = @; + end; + run; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +**Example 2.** Resources comparison for + session with 8GB of RAM. + + Array of size 250'000'000 with random values + from 0 to 999'999'999 and _NO_ missing values. +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + Array: + Population time 8.82s + memory 1'953'470.62k + OS Memory 1'977'436.00k + + Call quickSort4NotMiss: + Sorting time 66.92s + Memory 1'954'683.06k + OS Memory 1'977'436.00k + + Call quickSortLight: + Sorting time 70.98s + Memory 1'955'479.71k + OS Memory 1'977'436.00k +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +**Example 3.** Resources comparison for + session with 8GB of RAM + + A) Array of size 10'000'000 with + random values from 0 to 9'999 range (sparse) + and around 10% of missing data. +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + Array: + Population time 0.61s + Memory 78'468.50k + OS Memory 101'668.00k + + Call sortn: + Sorting time 0.87s + Memory 1'120'261.53k + OS Memory 1'244'968.00k + + Call quickSortHash: + Sorting time 6.76s + Memory 1'222'242.75k(*) + OS Memory 1'402'920.00k(*) + + Call quickSortLight: + Sorting time 23.45s + Memory 80'527.75k + OS Memory 101'924.00k +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + B) Array of size 10'000'000 with + random values from 0 to 99'999'999 range (dense) + and around 10% of missing data. +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + Array: + Population time 0.6s + Memory 78'463.65k + OS Memory 101'924.00k + + Call sortn: + Sorting time 1.51s + Memory 1'120'253.53k + OS Memory 1'244'968.00k + + Call quickSortHash: + Sorting time 6.28s + Memory 1'222'241.93k(*) + OS Memory 1'402'920.00k(*) + + Call quickSortLight: + Sorting time 0.78s + Memory 80'669.28k + OS Memory 102'436.00k +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + C) Array of size 250'000'000 with + random values from 0 to 999'999'999 range (dense) + and around 10% of missing data. +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + Array: + Population time 15.34s + memory 1'953'471.81k + OS Memory 1'977'436.00k + + Call sortn: + FATAL: Insufficient memory to execute DATA step program. + Aborted during the COMPILATION phase. + ERROR: The SAS System stopped processing this step + because of insufficient memory. + + Call quickSortHash: + Sorting time 124.68s + Memory 7'573'720.34k(*) + OS Memory 8'388'448.00k(*) + + Call quickSortLight: + Sorting time 72.41s + Memory 1'955'520.78k + OS Memory 1'977'180.00k +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + D) Array of size 250'000'000 with + random values from 0 to 99'999 range (sparse) + and around 10% of missing data. +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + Array: + Population time 16.07 + Memory 1'953'469.78k + OS Memory 1'977'180.00k + + Call sortn: + FATAL: Insufficient memory to execute DATA step program. + Aborted during the COMPILATION phase. + ERROR: The SAS System stopped processing this step + because of insufficient memory. + + Call quickSortHash: + Sorting time 123.5s + Memory 7'573'722.03k + OS Memory 8'388'448.00k + + Call quickSortLight: + Sorting time 1'338.25s + Memory 1'955'529.90k + OS Memory 1'977'436.00k +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +(*) When using hash tables in `Proc FCMP` the RAM + usage is not indicated properly. The memory + allocation is reported up to the session limit + and then reused if needed. The really required + memory is in fact much less then reported. + +--- + +## >>> `%dedupListS()` macro: <<< ####################### + +The `%dedupListS()` macro deletes duplicated values from +a *SPACE separated* list of values. List, including separators, +can be no longer than a value carried by a single macrovariable. + +Returned value is *unquoted*. + +The `%dedupListS()` macro executes like a pure macro code. + +### SYNTAX: ################################################################### + +The basic syntax is the following, the `<...>` means optional parameters: +~~~~~~~~~~~~~~~~~~~~~~~sas +%dedupListS( + list of space separated values +) +~~~~~~~~~~~~~~~~~~~~~~~ + +**Arguments description**: + +1. `list` - A list of *space separated* values. + + +### EXAMPLES AND USECASES: #################################################### + +**EXAMPLE 1.** Basic use-case one. + Delete duplicated values from a list. + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + %put *%dedupListS(a b c b c)*; + + %put *%dedupListS(a b,c b,c)*; + + %put *%dedupListS(%str(a b c b c))*; + + %put *%dedupListS(%str(a) %str(b) %str(c) b c)*; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +**EXAMPLE 2.** Macro variable as an argument. + Delete duplicated values from a list. + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + %let list = 4 5 6 1 2 3 1 2 3 4 5 6; + %put *%dedupListS(&list.)*; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +--- + +## >>> `%dedupListC()` macro: <<< ####################### + +The `%dedupListC()` macro deletes duplicated values from +a *COMMA separated* list of values. List, including separators, +can be no longer than a value carried by a single macrovariable. + +Returned value is *unquoted*. Leading and trailing spaces are ignored. + +The `%dedupListC()` macro executes like a pure macro code. + +### SYNTAX: ################################################################### + +The basic syntax is the following, the `<...>` means optional parameters: +~~~~~~~~~~~~~~~~~~~~~~~sas +%dedupListC( + list,of,comma,separated,values +) +~~~~~~~~~~~~~~~~~~~~~~~ + +**Arguments description**: + +1. `list` - A list of *comma separated* values. + + +### EXAMPLES AND USECASES: #################################################### + +**EXAMPLE 1.** Basic use-case one. + Delete duplicated values from a list. + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + %put *%dedupListC(a,b,c,b,c)*; + + %put *%dedupListC(a,b c,b c)*; + + %put *%dedupListC(%str(a,b,c,b,c))*; + + %put *%dedupListC(%str(a),%str(b),%str(c),b,c)*; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +**EXAMPLE 2.** Leading and trailing spaces are ignored. + Delete duplicated values from a list. + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + %put *%dedupListC( a , b b , c , b b, c )*; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +**EXAMPLE 3.** Macro variable as an argument. + Delete duplicated values from a list. + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + %let list = 4, 5, 6, 1, 2, 3, 1, 2, 3, 4, 5, 6; + %put *%dedupListC(&list.)*; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +--- + +## >>> `%dedupListP()` macro: <<< ####################### + +The `%dedupListP()` macro deletes duplicated values from +a *PIPE(`|`) separated* list of values. List, including separators, +can be no longer than a value carried by a single macrovariable. + +Returned value is *unquoted*. Leading and trailing spaces are ignored. + +The `%dedupListP()` macro executes like a pure macro code. + +### SYNTAX: ################################################################### + +The basic syntax is the following, the `<...>` means optional parameters: +~~~~~~~~~~~~~~~~~~~~~~~sas +%dedupListP( + list|of|pipe|separated|values +) +~~~~~~~~~~~~~~~~~~~~~~~ + +**Arguments description**: + +1. `list` - A list of *pipe separated* values. + + +### EXAMPLES AND USECASES: #################################################### + +**EXAMPLE 1.** Basic use-case one. + Delete duplicated values from a list. + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + %put *%dedupListP(a|b|c|b|c)*; + + %put *%dedupListP(a|b c|b c)*; + + %put *%dedupListP(%str(a|b|c|b|c))*; + + %put *%dedupListP(%str(a)|%str(b)|%str(c)|b|c)*; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +**EXAMPLE 2.** Leading and trailing spaces are ignored. + Delete duplicated values from a list. + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + %put *%dedupListP( a | b b | c | b b| c )*; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +**EXAMPLE 3.** Macro variable as an argument. + Delete duplicated values from a list. + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + %let list = 4|5|6|1|2|3|1|2|3|4|5|6; + %put *%dedupListP(&list.)*; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +--- + +## >>> `%dedupListX()` macro: <<< ####################### + +The `%dedupListX()` macro deletes duplicated values from +a *X separated* list of values, where the `X` represents +a *single character* separator. List, including separators, +can be no longer than a value carried by a single macrovariable. + +**Caution.** The value of `X` *has to be* in **the first** byte of the list, + just after the opening bracket, i.e. `(X...)`. + +Returned value is *unquoted*. Leading and trailing spaces are ignored. + +The `%dedupListX()` macro executes like a pure macro code. + +### SYNTAX: ################################################################### + +The basic syntax is the following, the `<...>` means optional parameters: +~~~~~~~~~~~~~~~~~~~~~~~sas +%dedupListX( +XlistXofXxXseparatedXvalues +) +~~~~~~~~~~~~~~~~~~~~~~~ + +**Arguments description**: + +1. `list` - A list of *X separated* values. + + +### EXAMPLES AND USECASES: #################################################### + +**EXAMPLE 1.** Basic use-case one. + Delete duplicated values from a list. + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + %put *%dedupListX(|a|b|c|b|c)*; + + %put *%dedupListX( a b c b c)*; + + %put *%dedupListX(,a,b,c,b,c)*; + + %put *%dedupListX(XaXbXcXbXc)*; + + %put *%dedupListX(/a/b/c/b/c)*; + + data _null_; + x = "%dedupListX(%str(;a;b;c;b;c))"; + put x=; + run; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +**EXAMPLE 2.** Leading and trailing spaces are ignored. + Delete duplicated values from a list. + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + %put *%dedupListX(| a | b.b | c | b.b| c )*; + + %put *%dedupListX(. a . b b . c . b b. c )*; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +**EXAMPLE 3.** Macro variable as an argument. + Delete duplicated values from a list. + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + %let list = 4$5.5$6$1$2$3$1$2$3$4$5.5$6; + %put *%dedupListX($&list.)*; + + %let list = 4$ 5.5$ 6$ 1$ 2$ 3$ 1$ 2$ 3$ 4$ 5.5$ 6$; + %put *%dedupListX( &list.)*; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +--- + +## >>> `%QdedupListX()` macro: <<< ####################### + +The `%QdedupListX()` macro deletes duplicated values from +a *X separated* list of values, where the `X` represents +a *single character* separator. List, including separators, +can be no longer than a value carried by a single macrovariable. + +**Caution.** The value of `X` *has to be* in **the first** byte of the list, + just after the opening bracket, i.e. `(X...)`. + +Returned value is **quoted** with `%superq()`. Leading and trailing spaces are ignored. + +The `%QdedupListX()` macro executes like a pure macro code. + +### SYNTAX: ################################################################### + +The basic syntax is the following, the `<...>` means optional parameters: +~~~~~~~~~~~~~~~~~~~~~~~sas +%QdedupListX( +XlistXofXxXseparatedXvalues +) +~~~~~~~~~~~~~~~~~~~~~~~ + +**Arguments description**: + +1. `list` - A list of *X separated* values. + + +### EXAMPLES AND USECASES: #################################################### + +**EXAMPLE 1.** Basic use-case one. + Delete duplicated values from a list. + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + %put *%QdedupListX(|a|b|c|b|c)*; + + %put *%QdedupListX( a b c b c)*; + + %put *%QdedupListX(,a,b,c,b,c)*; + + %put *%QdedupListX(XaXbXcXbXc)*; + + %put *%QdedupListX(/a/b/c/b/c)*; + + %put *%QdedupListX(%str(;a;b;c;b;c))*; + + %put *%QdedupListX(%nrstr(&a&b&c&b&c))*; + + %put *%QdedupListX(%nrstr(%a%b%c%b%c))*; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +**EXAMPLE 2.** Leading and trailing spaces are ignored. + Delete duplicated values from a list. + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + %put *%QdedupListX(| a | b.b | c | b.b| c )*; + + %put *%QdedupListX(. a . b b . c . b b. c )*; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +**EXAMPLE 3.** Macro variable as an argument. + Delete duplicated values from a list. + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + %let list = 4$5.5$6$1$2$3$1$2$3$4$5.5$6; + %put *%QdedupListX($&list.)*; + + %let list = 4$ 5.5$ 6$ 1$ 2$ 3$ 1$ 2$ 3$ 4$ 5.5$ 6$; + %put *%QdedupListX( &list.)*; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +--- + +## >>> `brackets.` format: <<< ####################### + +The **brackets** format adds brackets around a text or a number. +Leading and trailing spaces are dropped before adding brackets. + +### EXAMPLES AND USECASES: #################################################### + +**Example 1.** + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas +data _null_; + input x; + if x < 0 then put x= brackets.; + else put x= best32.; +cards; +2 +1 +0 +-1 +-2 +; +run; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +--- + +## >>> `semicolon.` format: <<< ####################### + +The **semicolon** format adds semicolon after text or number. +Leading and trailing spaces are dropped before adding semicolon. + +### EXAMPLES AND USECASES: #################################################### + +**Example 1.** + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas +data _null_; + x = 1; + y = "A"; + put x= semicolon. y= $semicolon.; +run; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +--- + +## >>> `bracketsC()` function: <<< ####################### + +The **bracketsC()** function is internal function used by the *brackets* format. +Returns character value of length 32767. + +### SYNTAX: ################################################################### + +The basic syntax is the following: +~~~~~~~~~~~~~~~~~~~~~~~sas +bracketsC(X) +~~~~~~~~~~~~~~~~~~~~~~~ + +**Arguments description**: + +1. `X` - Character value. + +--- + +## >>> `bracketsN()` function: <<< ####################### + +The **bracketsN()** function is internal function used by the *brackets* format. +Returns character value of length 34. + +### SYNTAX: ################################################################### + +The basic syntax is the following: +~~~~~~~~~~~~~~~~~~~~~~~sas +bracketsN(X) +~~~~~~~~~~~~~~~~~~~~~~~ + +**Arguments description**: + +1. `X` - Numeric value. + +--- + +## >>> `semicolonC()` function: <<< ####################### + +The **semicolonC()** function is internal function used by the *semicolon* format. +Returns character value of length 32767. + +### SYNTAX: ################################################################### + +The basic syntax is the following: +~~~~~~~~~~~~~~~~~~~~~~~sas +semicolonC(X) +~~~~~~~~~~~~~~~~~~~~~~~ + +**Arguments description**: + +1. `X` - Character value. + +--- + +## >>> `semicolonN()` function: <<< ####################### + +The **semicolonN()** function is internal function used by the *semicolon* format. +Returns character value of length 33. + +### SYNTAX: ################################################################### + +The basic syntax is the following: +~~~~~~~~~~~~~~~~~~~~~~~sas +semicolonN(X) +~~~~~~~~~~~~~~~~~~~~~~~ + +**Arguments description**: + +1. `X` - Numeric value. + +--- + +## >>> `%QzipEvalf()` macro: <<< ####################### + +The zipEvalf() and QzipEvalf() macro functions +allow to use a function on elements of pair of +space separated lists. + +For two space separated lists of text strings the corresponding +elements are taken and the macro applies a function, provided by user, +to calculate result of the function on taken elements. + +When one of the lists is shorter then elements are "reused" starting +from the beginning. + +The zipEvalf() returns unquoted value [by %unquote()]. +The QzipEvalf() returns quoted value [by %superq()]. + +See examples below for the details. + +The `%QzipEvalf()` macro executes like a pure macro code. + +### SYNTAX: ################################################################### + +The basic syntax is the following, the `<...>` means optional parameters: +~~~~~~~~~~~~~~~~~~~~~~~sas +%QzipEvalf( + first + ,second + <,function=> + <,operator=> + <,argBf=> + <,argMd=> + <,argAf=> + <,format=> +) +~~~~~~~~~~~~~~~~~~~~~~~ + +**Arguments description**: + +1. `first` - *Required*, a space separated list of texts. + +2. `second` - *Required*, a space separated list of texts. + +* `function = cat` - *Optional*, default value is `cat`, + a function which will be applied + to corresponding pairs of elements of + the first and the second list. + +* `operator =` - *Optional*, default value is empty, + arithmetic infix operator used with elements + the first and the second list. The first + list is used on the left side of the operator + the second list is used on the right side + of the operator. + +* `argBf =` - *Optional*, default value is empty, + arguments of the function inserted + *before* elements the first list. + If multiple should be comma separated. + +* `argMd =` - *Optional*, default value is empty, + arguments of the function inserted + *between* elements the first list and + the second list. + If multiple should be comma separated. + +* `argAf =` - *Optional*, default value is empty, + arguments of the function inserted + *after* elements the second list. + If multiple should be comma separated. + +* `format=` - *Optional*, default value is empty, + indicates a format which should be used + to format the result, does not work when + the `operator=` is used. + +### EXAMPLES AND USECASES: #################################################### + +See examples in `%zipEvalf()` help for the details. + +--- + +## >>> `%zipEvalf()` macro: <<< ####################### + +The zipEvalf() and QzipEvalf() macro functions +allow to use a function on elements of pair of +space separated lists. + +For two space separated lists of text strings the corresponding +elements are taken and the macro applies a function, provided by user, +to calculate result of the function on taken elements. + +When one of the lists is shorter then elements are "reused" starting +from the beginning. + +The zipEvalf() returns unquoted value [by %unquote()]. +The QzipEvalf() returns quoted value [by %superq()]. + +See examples below for the details. + +The `%zipEvalf()` macro executes like a pure macro code. + +### SYNTAX: ################################################################### + +The basic syntax is the following, the `<...>` means optional parameters: +~~~~~~~~~~~~~~~~~~~~~~~sas +%zipEvalf( + first + ,second + <,function=> + <,operator=> + <,argBf=> + <,argMd=> + <,argAf=> + <,format=> +) +~~~~~~~~~~~~~~~~~~~~~~~ + +**Arguments description**: + +1. `first` - *Required*, a space separated list of texts. + +2. `second` - *Required*, a space separated list of texts. + +* `function = cat` - *Optional*, default value is `cat`, + a function which will be applied + to corresponding pairs of elements of + the first and the second list. + +* `operator =` - *Optional*, default value is empty, + arithmetic infix operator used with elements + the first and the second list. The first + list is used on the left side of the operator + the second list is used on the right side + of the operator. + +* `argBf =` - *Optional*, default value is empty, + arguments of the function inserted + *before* elements the first list. + If multiple should be comma separated. + +* `argMd =` - *Optional*, default value is empty, + arguments of the function inserted + *between* elements the first list and + the second list. + If multiple should be comma separated. + +* `argAf =` - *Optional*, default value is empty, + arguments of the function inserted + *after* elements the second list. + If multiple should be comma separated. + +* `format=` - *Optional*, default value is empty, + indicates a format which should be used + to format the result, does not work when + the `operator=` is used. + +### EXAMPLES AND USECASES: #################################################### + +**EXAMPLE 1.** Simple concatenation of elements: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas +%let x = %zipEvalf(1 2 3 4 5 6, q w e r t y); +%put &=x; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +**EXAMPLE 2.** Shorter list is "reused": +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas +%let x = %zipEvalf(1 2 3 4 5 6, a b c); +%put &=x; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +**EXAMPLE 3.** Use of the `operator=`, shorter list is "reused": +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas +%let y = %zipEvalf(1 2 3 4 5 6, 100 200, operator = +); +%put &=y; + +%let z = %zipEvalf(1 2 3 4 5 6 8 9 10, 1 2 3 4 5 6 8 9 10, operator = **); +%put &=z; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +**EXAMPLE 4.** Format result: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas +%let x = %zipEvalf(1 2 3 4 5 6, q w e r t y, format=$upcase.); +%put &=x; + +%put * +%zipEvalf( + ą ż ś ź ę ć ń ó ł +,Ą Ż Ś Ź Ę Ć Ń Ó Ł +,format = $brackets. +) +*; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +**EXAMPLE 5.** Use with macrovariables: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas +%let abc = 10 100 1000; +%put * +%zipEvalf( +%str(1 2 3 4 5 6 7 8 9) +,&abc. +,function = sum +) +*; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +**EXAMPLE 6.** If one of elements is empty: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas +%put * +%zipEvalf( + abc efg +, +) +*; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +**EXAMPLE 7.** Use of the `function=`, shorter list is "reused": +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas +%put * +%zipEvalf( + a b c +,efg +,function = catx +,argBf = %str(,) +,format = $brackets. +) +*; + +%put * +%zipEvalf( + a b c +,efg +,function = catx +,argBf = %str( ) +,format = $upcase. +) +*; + +%put * +%zipEvalf( + %str(! @ # $ [ ] % ^ & * ) +,1 2 3 4 5 6 7 8 9 +,function = catx +,argBf = %str( ) +,format = $quote. +) +*; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +**EXAMPLE 8.** Use inside resolve: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas +data _null_; +z = resolve(' +%zipEvalf( + %nrstr(! @ # $ [ ] % ^ & *) +,1 2 3 4 5 6 7 8 9 +,function = catx +,argBf = %str(.) +,format = $quote. +)'); +put z=; +run; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +**EXAMPLE 9.** Use in data step: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas +data test; + %zipEvalf( + a b c d e f g + ,1 2 3 4 5 6 7 + ,function = catx + ,argBf = = + ,format = $semicolon. + ) +run; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +**EXAMPLE 10.** With 9.4M6 hashing() function: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas +%put %zipEvalf(MD5 SHA1 SHA256 SHA384 SHA512 CRC32, abcd, function = HASHING); +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +**EXAMPLE 11.** Use middle argument: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas +%let x = %zipEvalf(1 2 3 4 5 6, 2020, argMd=5, function=MDY, format=date11.); +%put &=x; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +--- + +## >>> `%functionExists()` macro: <<< ####################### + +The functionExists() macro function tests +if given funcion exists in the SAS session. +The `sashelp.vfunc` view is used. + +See examples below for the details. + +The `%functionExists()` macro executes like a pure macro code. + +The function is a result of cooperation with [Allan Bowe](https://www.linkedin.com/in/allanbowe/) + +### SYNTAX: ################################################################### + +The basic syntax is the following, the `<...>` means optional parameters: +~~~~~~~~~~~~~~~~~~~~~~~sas +%functionExists( + funName +) +~~~~~~~~~~~~~~~~~~~~~~~ + +**Arguments description**: + +1. `funName` - *Required*, the name of the function + existence of which you are testing. + +### EXAMPLES AND USECASES: #################################################### + +**EXAMPLE 1.** Test if function exists: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + %put %functionExists(HASHING); + + %put %functionExists(COSsinLOG); +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +--- + +## >>> `%RainCloudPlot()` macro: <<< ####################### + +The RainCloudPlot() macro allow to plot Rain Cloud plots, i.e. pots of +kernel density estimates, jitter data values, and box-and-whiskers plot. + +See examples below for the details. + +### SYNTAX: ################################################################### + +The basic syntax is the following, the `<...>` means optional parameters: +~~~~~~~~~~~~~~~~~~~~~~~sas +%RainCloudPlot( + DS + ,gr + ,vars + + <,WidthPX=> + <,HeightPX=> + <,boxPlot=> + <,roundFactor=> + <,rainDropSize=> + <,boxPlotSymbolSize=> + <,colorsList=> + <,monochrome=> + <,antialiasMax=> + <,title=> + <,footnote=> + <,catLabels=> + <,xLabels=> + <,catLabelPos=> + <,xLabelPos=> + <,catLabelAttrs=> + <,xLabelAttrs=> + <,formated=> + <,y2axis=> + <,y2axisLevels=> + <,y2axisValueAttrs=> + <,catAxisValueAttrs=> + <,xaxisValueAttrs=> + <,xaxisTickstyle=> + <,sganno=> + <,odsGraphicsOptions=> + <,sgPlotOptions=> + + <,VSCALE=> + <,KERNEL_K=> + <,KERNEL_C=> + + <,cleanTempData=> +) +~~~~~~~~~~~~~~~~~~~~~~~ + +**Arguments description**: + +1. `DS` - *Required*, name of the dataset from + which variables are to be taken. + +2. `gr` - *Required*, name of the grouping variable. + When more than one variable is specified + separate plots are rendered. + Can be numeric or character. + +3. `vars` - *Required*, name of the aggregated numeric variable. + When more than one variable is specified + separate plots are rendered. + +***Plot related options***: + +* `WidthPX` - *Optional*, default value `1200`. + Total width of the plot in pixels. + +* `HeightPX` - *Optional*, default value `220`. + Partial height of the plot in pixels. + Total height is calculated as `#GROUPS x HeightPX`. + +* `boxPlot` - *Optional*, default value `1`. + Indicates if the Box Plot should be added. + +* `roundFactor` - *Optional*, default value `0.000001`. + Rounding level when calculating maximum value + of the cloud chart. Should be adjusted to data + granularity level, e.g. for data with value + around `1e-8` should be decreased. + +* `rainDropSize` - *Optional*, default value `5px`. + Size of data points in the "rain" plot. + +* `boxPlotSymbolSize` - *Optional*, default value `8px`. + Size of symbols on the box plot. + +* `colorsList` - *Optional*, default value is empty. + List of colours for plotting. + Empty indicates that the default list will be used. + +* `monochrome` - *Optional*, default value `0`. + Indicates if the default list of colours should be gray-scale. + +* `antialiasMax` - *Optional*, default value is empty. + Sets a value to the ODS graphics `ANTIALIASMAX` option. + When empty the value is calculated from data. + +* `title` - *Optional*, default value - see notes below. + Provides a list of titles printed on the plot. + For details see notes below. + +* `footnote` - *Optional*, default value - see notes below. + Provides a list of titles printed on the plot. + For details see notes below. + +* `catLabels` - *Optional*, default value is empty. + List of values for group axix labels (vertical). + When empty a grouping variable name is used. + For details see notes below. + +* `xLabels` - *Optional*, default value is empty. + List of values for data variable axix labels (horizontal). + When empty a data variable name is used. + For details see notes below. + +* `catLabelPos` - *Optional*, default value `DATACENTER`. + Indicates position of the label on group axix (vertical). + Allowed values are `BOTTOM`, `CENTER`, `DATACENTER`, and `TOP`. + +* `xLabelPos` - *Optional*, default value `DATACENTER`. + Indicates position of the label on data axix (horizontal). + Allowed values are `LEFT`, `CENTER`, `DATACENTER`, and `RIGHT`. + +* `catLabelAttrs` - *Optional*, default value is empty. + List of attributes for group axix labels (vertical). + For details see notes below. + +* `xLabelAttrs` - *Optional*, default value is empty. + List of attributes for data variable axix labels (horizontal). + For details see notes below. + +* `formated` - *Optional*, default value `0`. + Indicates if values of the grouping variable should be formated. + +* `y2axis` - *Optional*, default value `1`. + Indicates if the right vertical axix should be displayed. + +* `y2axisLevels` - *Optional*, default value `4`. + Indicates if the number of expected levels of values printed + on the right vertical axix. + +* `y2axisValueAttrs` - *Optional*, default value `Color=Grey`. + Allows to modify Y2 axis values attributes. + +* `catAxisValueAttrs` - *Optional*, default value `Color=Black`. + Allows to modify category (Y) axis values attributes. + +* `xaxisValueAttrs` - *Optional*, default value `Color=Grey`. + Allows to modify X axis values attributes. + +* `xaxisTickstyle` - *Optional*, default value `INSIDE`. + Allows to modify X axis tick style. + Allowed values are `OUTSIDE`, `INSIDE`, `ACROSS`, and `INBETWEEN`. + *For SAS previous to* **9.4M5** *set to missing!* + +* `sganno` - *Optional*, default value is empty. + keeps name of a data set for the `sganno=` option + of the SGPLOT procedure. + +* `sgPlotOptions` - *Optional*, default value is `noautolegend noborder`. + List of additional options values for SGPLOT procedure. + +* `odsGraphicsOptions` - *Optional*, default value is empty. + List of additional options values for `ODS Graphics` statement. + By default only the: `width=`, `height=`, and `antialiasmax=` + are modified. + + +***Stat related options***: + +* `VSCALE` - *Optional*, default value `Proportion`. + Specifies the scale of the vertical axis. + Allowed values are `PROPORTION`, `PERCENT`, and `COUNT`. + `PROPORTION` scales the data in units of proportion of observations per data unit. + `PERCENT` scales the data in units of percent of observations per data unit. + `COUNT` scales the data in units of the number of observations per data unit. + +* `KERNEL_K` - *Optional*, default value `NORMAL`. + Specifies type of kernel function to compute kernel density estimates. + Allowed values are `NORMAL`, `QUADRATIC`, and `TRIANGULAR`. + + +* `KERNEL_C` - *Optional*, default value `1`. + Specifies standardized bandwidth parameter *C* to compute kernel density estimates. + Allowed values are between `0` and `1`, + +***Other options***: + +* `cleanTempData` - *Optional*, default value `1`. + Indicates if temporary data sets should be deleted. + +--- + +### NOTES: ################################################################### + +* Default value of the `title` option is: + `%nrstr(title1 JUSTIFY=C "Rain Cloud plot for &list_g. by " %unquote(&xLabel.);)` + Use the `%str()` or `%nrstr()` macro-function to handle special characters. + The `%unquote()` is used when resolving the parameter. + +* Default value of the `footnote` option is: + `%nrstr(footnote1 JUSTIFY=L COLOR=lightGray HEIGHT=1 "by RainCloudPlot macro from the BasePlus package";)` + Use the `%str()` or `%nrstr()` macro-function to handle special characters. + The `%unquote()` is used when resolving the parameter. + +* The `catLabels` and `xLabels` should be quoted comma separated lists enclosed with brackets, + e.g. `catLabels=("Continent of Origin", "Car Type")`, see Example below. + +* The `catLabelAttrs` and `xLabelAttrs` should be space separated lists of `key=value` pairs, + e.g. `xLabelAttrs=size=12 color=Pink weight=bold`, see Example below. + +* Kernel density estimates and basic statistics are calculated with `PROC UNIVARIATE`. + +* Plot is generated by `PROC SGPLOT` with `BAND`, `SCATTE`, and `POLYGON` plots. + +* After execution the ODS graphics dimension parameters are set to `800px` by `600px`. + +* SAS notes (`NOTE:`) are disabled for the execution time. + +* List of predefined colours is: + `BlueViolet`, `RoyalBlue`, `OliveDrab`, `Gold`, `HotPink`, `Crimson`, + `MediumPurple`, `CornflowerBlue`, `YellowGreen`, `Goldenrod`, `Orchid`, `IndianRed`. + +### BOX-AND-WHISKERS PLOT: ################################################################### + +The box-and-whiskers plot has the following interpretation: +- left vertical bar indicates the minimum, +- left whisker line starts at `max(Q1 - 1.5IQR, minimum)` and ends at lower quartile (Q1), +- diamond indicates mean, +- vertical bar inside of the box indicates median, +- right whisker line starts at upper quartile (Q3) and ends at `min(Q3 + 1.5IQR, maximum)`, +- right vertical bar indicates the maximum. + +With above setup it may happen that +there is a gap between the minimum marker and the beginning of the left whisker +or +there is a gap between the end of the right whisker and the maximum marker. +See examples below. + +--- + +### EXAMPLES AND USECASES: #################################################### + +**EXAMPLE 1.** Simple Rain Cloud Plot for a `have` dataset: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + + data have; + g = "Aaa"; + do _N_ = 1 to 50; + x = rannor(42); + output; + end; + + g = "Bb"; + do _N_ = 1 to 120; + select (mod(_N_,9)); + when(1,2,3,4,5) x = 0.5*rannor(42)+1; + when(6,7,8) x = 0.5*rannor(42)+3; + otherwise x = 0.5*rannor(42)+5; + end; + output; + end; + + g = "C"; + do _N_ = 1 to 60; + x = 3*rannor(42)+7; + output; + end; + run; + + %RainCloudPlot(have, g, x) + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +The output: +![Example 1](./baseplus_RainCloudPlot_Ex1.png) + + + +**EXAMPLE 2.** Rain Cloud plot for `sashelp.cars` dataset + with groups by Origin or Type + for Invoice variables: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + + %RainCloudPlot( + sashelp.cars(where=(Type ne "Hybrid")) + , Origin Type + , Invoice + , HeightPX=300 + , y2axisLevels=3 + , catLabels=("Continent of Origin", "Car Type") + , xLabels="Invoice, [$]" + , xLabelAttrs=size=12 color=Pink weight=bold + ) + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +The output: +![Example 2a](./baseplus_RainCloudPlot_Ex2a.png) +![Example 2b](./baseplus_RainCloudPlot_Ex2b.png) + + + +**EXAMPLE 3.** Rain Cloud plot with formatted groups + and annotations. +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + + data annotation; + function="text"; + label="This graph is full(*ESC*){sup '2'} of annotations!"; + drawspace="graphpercent"; + rotate=30; + anchor="center"; + textsize=32; + x1=50; + y1=50; + textcolor="red"; + justify="center"; + textweight="bold"; + width=100; + widthunit="percent"; + run; + + proc format; + value system + 1="Windows" + 2="MacOS" + 3="Linux" + ; + run; + + data test; + do system = 1 to 3; + do i = 1 to 50; + x = rannor(123)/system; + output; + end; + end; + format system system.; + run; + + + %RainCloudPlot(test, system, x + , colorslist=CX88CCEE CX44AA99 CX117733 + , formated=1 + , sganno=annotation + , sgPlotOptions=noborder + , WidthPX=1000 + , HeightPX=320 + , catAxisValueAttrs=Color=Green weight=bold + ) + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +The output: +![Example 3](./baseplus_RainCloudPlot_Ex3.png) + +--- + +## >>> `%zipLibrary()` macro: <<< ####################### + +The zipLibrary() macro allows to zip content of a SAS library. + +Files can be zipped into a single file (named as the input library) +or into multiple files (named as "dataset.sas7bdat.zip"). +If a file is indexed also the index file is zipped. + +Source files can be deleted after compression. + +Status of compression and processing time is reported. + +See examples below for the details. + +### SYNTAX: ################################################################### + +The basic syntax is the following, the `<...>` means optional parameters: +~~~~~~~~~~~~~~~~~~~~~~~sas +%zipLibrary( + lib + <,mode=> + <,clean=> + <,libOut=> + <,compression=> +) +~~~~~~~~~~~~~~~~~~~~~~~ + +**Arguments description**: + +1. `lib` - *Required*, a name of the library to be zipped. + Must be a valid SAS V7, V8, or V9 library. + + +* `mode = S` - *Optional*, default value is `S`, + indicates mode of compression + generates single zip file (`SINGLE/S`) + or multiple files (`MULTI/M`) + +* `clean = 0` - *Optional*, default value is `0`, + should datasets be deleted after zipping? + `1` means *yes*, `0` means *no*. + +* `libOut =` - *Optional*, default value is empty, + output library for a single zip file. + +* `compression =` - *Optional*, default value is `6`, + specifies the compression level + `0` to `9`, where `0` is no compression + and `9` is maximum compression. + +### EXAMPLES AND USECASES: #################################################### + +**EXAMPLE 1.** Generate data: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + +options dlcreatedir; + libname test1 "%sysfunc(pathname(work))/test1"; + libname test2 "%sysfunc(pathname(work))/test2"; + libname test3 (test1 test2); + libname test4 "%sysfunc(pathname(work))/test4"; +options nodlcreatedir; + +%put %sysfunc(pathname(test3)); +%put %sysfunc(pathname(test4)); + +data + test1.A(index=(model)) + test1.B + test2.C + test2.D(index=(model make io=(invoice origin))) +; + set sashelp.cars; +run; + +data test1.B2 / view=test1.B2; + set test1.B; + output; + output; +run; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +**EXAMPLE 2.** Zip content of test3 library + into the same location in one zip file: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas +%zipLibrary(test3) +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +**EXAMPLE 3.** Zip content of test3 library + into the same location in multiple zip files: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas +%zipLibrary(test3, mode=MULTI) +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +**EXAMPLE 4.** Zip content of test3 library + with maximum compression level + into different location in one zip file + and delete source files: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas +%zipLibrary(test3, clean=1, libOut=test4, compression=9) +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +--- + +## >>> `%unzipLibrary()` macro: <<< ####################### + +The unzipLibrary() macro allows to unzip content of a SAS library. +It is a *counterpart* to the `%zipLibrary()` macro and is *not* intended to work +with zip files generated by other software (though it may in some cases). + +Files can be unzipped from a single file +or from multiple files (named e.g. "dataset.sas7bdat.zip"). +If a file is indexed also the index file is unzipped. + +Source files can be deleted after decompression. + +Status of decompression and processing time is reported. + +See examples below for the details. + +### SYNTAX: ################################################################### + +The basic syntax is the following, the `<...>` means optional parameters: +~~~~~~~~~~~~~~~~~~~~~~~sas +%unzipLibrary( + path + <,zip=> + <,mode=> + <,clean=> + <,libOut=> +) +~~~~~~~~~~~~~~~~~~~~~~~ + +**Arguments description**: + +1. `path` - *Required*, a path pointing to zipped file(s) location. + +* `zip =` - *Optional*, When `mode=S` a name of the + zip file containing SAS files to be unzipped. + +* `mode = S` - *Optional*, default value is `S`, + indicates mode of decompression + read from a single zip file (`SINGLE/S`) + or from multiple files (`MULTI/M`) + +* `clean = 0` - *Optional*, default value is `0`, + should zip files be deleted after unzipping? + `1` means *yes*, `0` means *no*. + +* `libOut =` - *Optional*, default value is empty, + output library for a single zip file + decompression. + +### EXAMPLES AND USECASES: #################################################### + +**EXAMPLE 1.** Generate data: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + +options dlcreatedir; + libname test1 "%sysfunc(pathname(work))/test1"; + libname test2 "%sysfunc(pathname(work))/test2"; + libname test3 (test1 test2); + libname test4 "%sysfunc(pathname(work))/test4"; +options nodlcreatedir; + +%put %sysfunc(pathname(test3)); +%put %sysfunc(pathname(test4)); + +data + test1.A(index=(model)) + test1.B + test2.C + test2.D(index=(model make io=(invoice origin))) +; + set sashelp.cars; +run; + +data test1.B2 / view=test1.B2; + set test1.B; + output; + output; +run; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +**EXAMPLE 2.** Use data from Example 1. + First zip content of the `test3` library + to `test4` location into one zip file + and delete source files. + Next unzip `test3.zip` library into the + `test4` location and delete the zip file. +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas +%zipLibrary(test3, clean=1, libOut=test4) + + +%unzipLibrary(%sysfunc(pathname(test4)), zip=test3, clean=1) +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +**EXAMPLE 3.** Use data from Example 1. + First zip content of the `test1` library + into multiple zip files and delete source files. + Next unzip `*.zip` files in `test1` + location and delete zipped files +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas +%zipLibrary(test1, mode=M, clean=1) + + +%unzipLibrary(%sysfunc(pathname(test1)), mode=M, clean=1) +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +**EXAMPLE 4.** First zip content of the `sashelp` library + into `work` library. + Next unzip `sashelp.zip` file in `work` + location and delete zip file. +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas +%zipLibrary(sashelp, mode=S, clean=0, libOut=work) + + +%unzipLibrary(%sysfunc(pathname(work)), zip=sashelp, mode=S, clean=1) +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +--- + +## >>> `%zipArch()` macro: <<< ####################### + +The zipArch() macro allows to ZIP content of a directory. +Macro is OS independent, the `XCMD` option is not required. + +Content of zipped archive can be listed in the log. + +Errors of decompression and are reported. + +Macro **does not** include hidden files. + +See examples below for the details. + +### SYNTAX: ################################################################### + +The basic syntax is the following, the `<...>` means optional parameters: +~~~~~~~~~~~~~~~~~~~~~~~sas +%zipArch( + archName + ,path = + <,pathRef=> + <,target=> + <,targetRef=> + <,list=> + <,overwrite=> + <,dropList=> +) +~~~~~~~~~~~~~~~~~~~~~~~ + +**Arguments description**: + +1. `archName` - *Required*, name of the archive to be generated. + Name should be full, i.e., with the extension! + +2. `path=` - *Required/Optional*, location of a directory to ZIP. + The path should be provided unquoted. + Has priority over the `pathRef` parameter. + +* `pathRef=` - *Required/Optional*, fileref to location of a directory to ZIP. + The reference **has** to be pointing to single directory. + If provided with `path` - the `path` takes + priority over the `pathRef` parameter. + +* `target=` - *Optional*, a path pointing to target location where + the archive will be generated. + The path should be provided unquoted. + Default value is `WORK` location. + Has priority over the `targetRef` parameter. + +* `targetRef=` - *Optional*, fileref to a path pointing to target location + where the archive will be generated. + The reference **has** to be pointing to single directory. + If provided with `target` - the `target` takes + priority over the `targetRef` parameter. + +* `list = 0` - *Optional*, default value is `0`, + indicates if zip content should be listed in the log. + `1` means *yes*, `0` means *no*. + +* `overwrite = 0` - *Optional*, default value is `0`, + indicates if existing archive file should be overwritten. + `1` means *yes*, `0` means *no*. + +* `overwrite = 1` - *Technical*, default value is `1`, + indicates if the "to-be-zipped-files-list" + data set should be deleted. + `1` means *yes*, `0` means *no*. + +--- + +### EXAMPLES AND USECASES: #################################################### + +**EXAMPLE 1.** Zip a directory . Example requires the `basePlus` package. +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + +options dlCreateDir; +libname arch1 "%workPath()/testArch1"; +libname arch2 "%workPath()/testArch2"; + +filename arch1 "%workPath()/testArch1"; + +data _null_; + file arch1(test1.txt); + put "text for test file 1"; +data _null_; + file arch1(test2.txt); + put "text for test file 2"; +data _null_; + file arch1(test3.txt); + put "text for test file 3"; +run; + +data arch1.class(index=(name)); + set sashelp.class; +run; +data arch1.cars(index=(model)); + set sashelp.cars; +run; + + + +%zipArch( + archName1.zip +, path = %workPath()/testArch1 +, list = 1 +, overwrite = 1 + +) + +%zipArch( + archName2.zip +, pathRef = arch1 +, target = %workPath()/testArch2 +, list = 1 +, overwrite = 1 +) + + +%unzipArch( + archName2.zip +, path = %workPath()/testArch2 +, target = %workPath()/testArch2 +, clean=1 +, list=1 +); + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +--- + +## >>> `%unzipArch()` macro: <<< ####################### + +The unzipArch() macro allows to unzip content of a ZIP archive. +Macro is OS independent, the `XCMD` option is not required. + +The `dlCreateDir` option is used under the hood. + +Content of unzipped archive can be listed in the log. + +Source files can be deleted after decompression. +Errors of decompression and are reported. If any occur +the deletion is suspended. + +See examples below for the details. + +### SYNTAX: ################################################################### + +The basic syntax is the following, the `<...>` means optional parameters: +~~~~~~~~~~~~~~~~~~~~~~~sas +%unzipArch( + archName + <,path=> + <,pathRef=> + <,target=> + <,targetRef=> + <,list=> + <,clean=> +) +~~~~~~~~~~~~~~~~~~~~~~~ + +**Arguments description**: + +1. `archName` - *Required*, name of the ZIP archive to be extracted. + Name should be full, i.e., with the extension! + +* `path=` - *Optional*, a path pointing to zipped file location. + The path should be provided unquoted. + Default value is `WORK` location. + +* `pathRef=` - *Optional*, a fileref to path pointing to zipped file location. + The `path`, if not null, has precedense over the `pathRef`. + +* `target=` - *Optional*, a path pointing to target location where + files will be extracted. + The path should be provided unquoted. + Default value is `WORK` location. + +* `target=` - *Optional*, a fileref to path pointing to target location where + files will be extracted. + The `target`, if not null, has precedense over the `targetRef`. + +* `list = 0` - *Optional*, default value is `0`, + indicates if zip content should be listed in the log. + `1` means *yes*, `0` means *no*. + +* `clean = 0` - *Optional*, default value is `0`, + indicates if zip file should be deleted after unzipping. + `1` means *yes*, `0` means *no*. + +--- + +### EXAMPLES AND USECASES: #################################################### + +**EXAMPLE 1.** Unzip compressed archive. Example requires the `basePlus` package. +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + +filename arch ZIP "%workPath()/testArch.zip"; + +data _null_; + file arch(abc/test1.txt); + put "text for test file 1"; +data _null_; + file arch(abc/subdir/test2.txt); + put "text for test file 2"; +data _null_; + file arch(abc/subdir/test3.txt); + put "text for test file 3"; +run; + +%unzipArch( + testArch.zip +, path = %workPath() +, target = %workPath() +, list=1 +); + + + +filename pR "%workPath()"; + +%unzipArch( + testArch.zip +, pathRef = pR +, targetRef = pR +, clean=1 +); + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +--- + +## >>> `%LDSN()` macro: <<< ####################### + +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: + +Good friend of mine, who didn't use SAS for quite some time, +told me that he lost a few hours for debugging because +he forgot that the SAS dataset name limitation is 32 bytes. + +I replied that it shouldn't be a problem to do a workaround +for this inconvenience with a macro and the `MD5()` hashing function. + +I said: *The macro should take an "arbitrary string" for a dataset +name, convert it, with help of `MD5()`, to a hash digest, and +create a dataset with an "artificial" `hex16.` formated name.* + +Starting with something like this: + +~~~~~~~~~~~~~~~~~~~~~~~sas +data %LDSN(work. peanut butter & jelly with 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; +~~~~~~~~~~~~~~~~~~~~~~~ + +the macro would do: + +~~~~~~~~~~~~~~~~~~~~~~~sas +%sysfunc(MD5(peanut butter & jelly with a hot-dog in [a box] and s*t*a*r*s), hex16.) +~~~~~~~~~~~~~~~~~~~~~~~ + +and (under the hood) return and execute the following code: + +~~~~~~~~~~~~~~~~~~~~~~~sas +data work.DSN_41D599EF51FBA58_(drop = sex rename=(name=first_name) where = (age in (12,13,14))) ; + set sashelp.class; +run; +~~~~~~~~~~~~~~~~~~~~~~~ + +Also in the next data step user should be able to do: + +~~~~~~~~~~~~~~~~~~~~~~~sas +data my_next_data_step; + set %DSN(work. peanut butter & jelly with a hot-dog in [a box] and s*t*a*r*s); +run; +~~~~~~~~~~~~~~~~~~~~~~~ + +and work without the "dataset-name-length-limitation" issue. + +--- + +See examples below for the details. + +The `%LDSN()` macro executes like a pure macro code. + +**Known "Limitations":** + +- dataset name _cannot_ contain dots (`.`) since they are used as separators! + +- dataset name _cannot_ contain round brackets(`(` and `)`) since they are used as separators + (but `[]` 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(work.test)`, `%ldsn( work.test)`, `%ldsn(work.test )`, + `%ldsn(work .test)`, `%ldsn(work. test)`, `%ldsn(work . test)`. + +- macro calls of the form: + `data %LDSN(); run;`, `data %LDSN( ); run;`, `data %LDSN( . ); run;` or even + `data %LDSN( . (keep=x)); run;` are resolved to empty string, so the result is + equivalent to `data; run;` + +### SYNTAX: ################################################################### + +The basic syntax is the following, the `<...>` means optional parameters: +~~~~~~~~~~~~~~~~~~~~~~~sas +%LDSN( + arbitrary text string (in line with limitations) +) +~~~~~~~~~~~~~~~~~~~~~~~ + +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.** +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas +options nomprint source nomlogic nosymbolgen ls = max ps = max; + +data %LDSN( work. peanut butter & jelly with a "Hot-Dog" in [a box], popcorn, and s*t*a*r*s (drop = sex rename=(name=first_name) where = (age in (12,13,14))) ); + set sashelp.class; +run; + +proc print data = %LDSN( work. peanut butter & jelly with a "Hot-Dog" in [a box], popcorn, and s*t*a*r*s ); +run; + +data MyNextDataset; + set %LDSN( work. peanut butter & jelly with a "Hot-Dog" in [a box], popcorn, and s*t*a*r*s ); + where age > 12; +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()` macro works differently than the `%LDSN()` macro. + +The `%LDSN()` macro assumes that *both* libname and dataset options *are* +be passed as elements **inside** the macro argument, together with the data set name. 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()` macro, in contrary, assumes that both libname and dataset options are +passed **outside** the macro parameter, 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 overcomes some limitations the LDSN has. + +The **additional** feature of the `%LDSNM()` is that when the macro is called, +a global macrovariable is created. +The macro variable name is the text of the hashed data set name. +The macro variable value is the text of the unhashed data set name (i.e. 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 macro variable with name `DSN_BF1F8C4D6495B34A_` and 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 considered as *"only dataset name"*, i.e. the macro does not +assume it contains library as prefix or data set options as suffix. +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. +Supported by LVarNmLab() macro function which allows to remember "user names" in labels. + +The motivation for the macro was similar to that for the LDSN() macro. + +--- + +See examples below for the details. + +The `%LVarNm()` macro executes like a pure macro code. + +**Known "Limitations":** + +- variable name _cannot_ contain unpaired quotes (`'` and `"`), + text: `a "hot-dog"` is ok, but `John's dog` is not! + +**Behaviour:** + +- variable name text is *converted to upcase* + +- variable name text *leading and trailing spaces are ignored*, + e.g. the following will give the same hash digest: + `%LVarNm(test)`, `%LVarNm( test)`, `%LVarNm(test )`. + +### SYNTAX: ################################################################### + +The basic syntax is the following, the `<...>` means optional parameters: +~~~~~~~~~~~~~~~~~~~~~~~sas +%LVarNm( + arbitrary text string (in line with limitations) +) +~~~~~~~~~~~~~~~~~~~~~~~ + +--- + + +### EXAMPLES AND USE CASES: #################################################### + +**EXAMPLE 1.** +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas +options ls=max; +data test; + %LVarNmLab( peanut butter & jelly with a "Hot-Dog" in [a box], popcorn, and s*t*a*r*s ) + + do %LVarNm( peanut butter & jelly with a "Hot-Dog" in [a box], popcorn, and s*t*a*r*s ) = 1 to 10; + + y = 5 + %LVarNm( peanut butter & jelly with a "Hot-Dog" in [a box], popcorn, and s*t*a*r*s ) * 17; + output; + end; +run; + +data test2; + set test; + where %LVarNm( peanut butter & jelly with a "Hot-Dog" in [a box], popcorn, and s*t*a*r*s ) < 5; +run; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +**EXAMPLE 2.** +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas +data test3; + %LVarNmLab() = 17; + + %LVarNm() = 17; + + %LVarNm( ) = 42; + + %LVarNm( ) = 303; +run; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +**EXAMPLE 3.** +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas +data test3; + %LVarNm(test) = 1; + + %LVarNm( test) = 2; + + %LVarNm(test ) = 3; +run; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +**EXAMPLE 4.** +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas +data test4; + array X[*] %LVarNm(some strange! name)_0 - %LVarNm(some strange! name)_10; + + do i = lbound(X) to hbound(X); + X[i] = 2**(i-1); + put X[i]=; + end; +run; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +## >>> `%LVarNmLab()` macro: <<< ####################### + +The LVarNmLab() macro function supports LVarNm() and allows to remember "user names" in labels. + +The motivation for the macro was similar one as for the LDSN() macro. + +--- + +See examples in LVarNm() documentation for the details. + +The `%LVarNmLab()` macro executes like a pure macro code. + +**Known "Limitations":** + +- variable name _cannot_ contain unpaired quotes (`'` and `"`), + text: `a "hot-dog"` is ok, but `John's dog` is not! + +**Behaviour:** + +- variable name text is *converted to upcase* + +- variable name text *leading and trailing spaces are ignored*, + e.g. the following will give the same hash digest: + `%LVarNmLab(test)`, `%LVarNmLab( test)`, `%LVarNmLab(test )`. + +### SYNTAX: ################################################################### + +The basic syntax is the following, the `<...>` means optional parameters: +~~~~~~~~~~~~~~~~~~~~~~~sas +%LVarNmLab( + arbitrary text string (in line with limitations) +) +~~~~~~~~~~~~~~~~~~~~~~~ + +--- + +## >>> `%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 ~/) +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +--- + +## >>> `%dirsAndFiles()` macro: <<< ####################### + +The `%dirsAndFiles()` macro allows to extract info about all files +and subdirectories of a given `root` directory. + +The extracted info may be just a list of files and subdirectories or, if +the `details=` parameter is set to 1, additional operating system information +is extracted (information is OSS dependent and gives different results for Linux +and for Windows) + +The extracted info can be narrowed down to files (`keepFiles=1`) or to +directories (`keepDirs=1`) if need be. + +The extracted info can be presented in wide or long format (`longFormat=1`). + +The extracted info for files can be narrowed down to only files with particular +extension, for example: `fileExt=sas7bdat`. + +The extracted info can be narrowed down maximal path depth +by setting up the `maxDepth=` parameter. + +See examples below for the details. + +### REFERENCES: ################################################################### + +The macro is based on Kurt Bremser's "*Talking to Your Host*" article +presented at WUSS 2022 conference. + +The article is available [here](https://communities.sas.com/t5/SAS-User-Groups-Library/WUSS-Presentation-Talking-to-Your-Host/ta-p/838344) +and also as an additional content of this package. +The paper was awarded the "Best Paper Award - Programming". + +### SYNTAX: ################################################################### + +The basic syntax is the following, the `<...>` means optional parameters: +~~~~~~~~~~~~~~~~~~~~~~~sas +%dirsAndFiles( + root + <,ODS=> + <,details=> + <,keepDirs=> + <,keepFiles=> + <,longFormat=> + <,fileExt=> + <,maxDepth=> +) +~~~~~~~~~~~~~~~~~~~~~~~ + +**Arguments description**: + +1. `root` - *Required*, path to be searched + for information. + +* `ODS=work.dirsAndFilesInfo` - *Optional*, output data set, + name of a dataset to store information. + +* `details=0` - *Optional*, indicates if detailed info + will be collected, `1` = yes, `0` = no. + +* `keepDirs=1` - *Optional*, indicates if directories info + will be collected, `1` = yes, `0` = no. + +* `keepFiles=1` - *Optional*, indicates if files info + will be collected, `1` = yes, `0` = no. + +* `longFormat=0` - *Optional*, indicates if output be + in long format, `1` = yes, `0` = no. + +* `fileExt=` - *Optional*, if not missing then indicates + file extension to filter out results. + +* `maxDepth=0` - *Optional*, if not zero then indicates + maximum depth of search in the root path. + +--- + +### EXAMPLES AND USECASES: #################################################### + +**EXAMPLE 1.** Get list of files and directories: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas +%dirsAndFiles(C:\SAS_WORK\,ODS=work.result1) +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +**EXAMPLE 2.** Get detailed info: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas +%dirsAndFiles(C:\SAS_WORK\,ODS=work.result2,details=1) +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +**EXAMPLE 3.** Get only files info: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas +%dirsAndFiles(C:\SAS_WORK\,ODS=work.result3,keepDirs=0) + +%dirsAndFiles(C:\SAS_WORK\,ODS=work.result5,keepDirs=0,details=1) +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +**EXAMPLE 4.** Get only directories info: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas +%dirsAndFiles(C:\SAS_WORK\,ODS=work.result4,keepFiles=0) + +%dirsAndFiles(C:\SAS_WORK\,ODS=work.result6,keepFiles=0,details=1) +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +**EXAMPLE 5.** Filter out by `sas` extension: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas +%dirsAndFiles(~/,ODS=work.result7,fileExt=sas) + +%dirsAndFiles(~/,ODS=work.result8,fileExt=sas,details=1) +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +**EXAMPLE 6.** Keep result in the long format: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas +%dirsAndFiles(~/,ODS=work.result9,details=1,longFormat=1) +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +**EXAMPLE 7.** Get info for maximum depth of 2: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas +%dirsAndFiles(C:\SAS_WORK\,ODS=work.result10,details=1,maxDepth=2) +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +**EXAMPLE 8.** How locked/unavailable files are handled: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas +%dirsAndFiles(%sysfunc(pathname(WORK)),ODS=work.result11,details=1) +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +**EXAMPLE 9.** Not existing directory: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas +%dirsAndFiles(%sysfunc(pathname(WORK))/noSuchDir,ODS=work.result12,details=1) +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +--- + +## >>> `%repeatTxt()` macro: <<< ####################### + +The repeatTxt() macro function allows to repeat `n` +times a `text` string separated by string `s=`. + +The repeatTxt() returns unquoted value [by %unquote()]. + +See examples below for the details. + +The `%repeatTxt()` macro executes like a pure macro code. + +### SYNTAX: ################################################################### + +The basic syntax is the following, the `<...>` means optional parameters: +~~~~~~~~~~~~~~~~~~~~~~~sas +%repeatTxt( + text + <,n> + <,s=> +) +~~~~~~~~~~~~~~~~~~~~~~~ + +**Arguments description**: + +1. `text` - *Required*, a text to be repeated. + +2. `n` - *Required/Optional*, the number of repetitions. + If missing then set to `1`; + +* `s = %str( )` - *Optional*, it is a separator between + repeated elements. Default value is space. +--- + +### EXAMPLES AND USECASES: #################################################### + +**EXAMPLE 1.** Simple repetition of dataset name: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas +options mprint; +data work.test5; + set + %repeatTxt(sashelp.cars, 5) + ; +run; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +**EXAMPLE 2.** Simple repetition of data step: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas +options mprint; +%repeatTxt(data _null_; set sashelp.cars; run;, 3) +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +**EXAMPLE 3.** "Nice" output: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas +%put %repeatTxt(#,15,s=$) HELLO SAS! %repeatTxt(#,15,s=$); +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +**EXAMPLE 4.** Macroquote a text with commas: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas +%repeatTxt( + %str(proc sql; create table wh as select weight,height from sashelp.class; quit;) + ,3 +) +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +**EXAMPLE 5.** Empty `n` repeats `text` one time: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas +options mprint; +data work.test1; + set + %repeatTxt(sashelp.cars) + ; +run; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +**EXAMPLE 6.** Dynamic "formatting": +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas +%macro printWork(); + %let work=%sysfunc(pathname(work)); + %put +%repeatTxt(~,%length(&work.)+5,s=)+; + %put {&=work.}; + %put +%repeatTxt(~,%length(&work.)+5,s=)+; +%mend printWork; + +%printWork() +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +--- + +## >>> `%repList()` macro: <<< ####################### + +The repList() macro function allows to repeat `T` +times elements of a `L` list, possibly `E` times each element, +separated by string `S`. + +See examples below for the details. + +The `%repList()` macro executes like a pure macro code. + +### SYNTAX: ################################################################### + +The basic syntax is the following, the `<...>` means optional parameters: +~~~~~~~~~~~~~~~~~~~~~~~sas +%repList( + list + <,times=> + <,each=> + <,lenghtOut=> + <,sep=> +) +~~~~~~~~~~~~~~~~~~~~~~~ + +**Arguments description**: + +1. `list` - *Required*, a list of elements to be repeated. + List can be space or comma separated. + Elements can be in quotes. + For comma separated list add brackets + e.g., `%repList((A,B,C,D),times=5)`. + The list separators are: `<{[( ,;)]}>`. + +* `times=` - *Optional*, An integer indicating + the number of repetitions. + By default set to `1`. + + +* `each=` - *Optional*, A list of integers indicating + the number of repetitions of each element of the list + e.g., for a list `A B C` and the `each=2 4` the result + is `A A B B B B C C`. If the number of integers is less + then the length of the list values are recycled from + the beginning. + By default set to `1`. + +* `lenghtOut=` - *Optional*, An integer indicating + after what the number of repetitions process will stop. + By default set to `0` which means "do not stop". + +* `sep=` - *Optional*, it is a separator printed between + repeated elements. Mnemonics for *space* is `s`, + for *comma* is `c`, and for semicolon in `q`. + Default value is a single space. + + +### EXAMPLES AND USECASES: #################################################### + +**EXAMPLE 1.** Simple repetition of all elements: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas +%put %repList((A,B,C,D), times=3); +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +**EXAMPLE 2.** Simple repetition of each element: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas +%put %repList(("A",'B',"C",'D'), each=3); +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +**EXAMPLE 3.** Simple repetition with a separator: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas +%put %repList(A10;B20;C30, times=3, each=2, sep=Q); +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +**EXAMPLE 4.** Recycle elements up to 8 with a comma as a separator: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas +%put %repList(1 2 3, lenghtOut=8, sep=c); +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +**EXAMPLE 5.** Separate number of repetitions for each element: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas +%put [%repList([D][C][B][A], each = 2 3 5 7, sep=] [)]; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +**EXAMPLE 6.** "ASCII art" butterflies: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas +%put {>%repList(! $ |, times = 2, each =2 1, sep=<} ... {>)<}; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +**EXAMPLE 7.** Data repeating: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas +data A; + x=17; +data B; + x=42; +data C; + x=303; +run; + +data Times2_A10B11C12; + set + %repList(A B C, times = 2, each =10 11 12) + ; +run; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +--- + + +## >>> `%intsList()` macro: <<< ####################### + +The intsList() macro function allows to print a list of +integers starting from `start` up to `end` incremented by `by` +and separated by `sep=`. + +If `start`, `end` or `by` are non-integers the are converted to integers. + +See examples below for the details. + +The `%intsList()` macro executes like a pure macro code. + +### SYNTAX: ################################################################### + +The basic syntax is the following, the `<...>` means optional parameters: +~~~~~~~~~~~~~~~~~~~~~~~sas +%intsList( + start + <,end> + <,by> + <,sep=> +) +~~~~~~~~~~~~~~~~~~~~~~~ + +**Arguments description**: + +1. `start` - *Required*, the first value of the list. + If `end` is missing then the list is generated + from 1 to `start` by 1. + +2. `end` - *Required/Optional*, the last value of the list. + +3. `by` - *Required/Optional*, the increment of the list. + If missing then set to `1`. + *Cannot* be equal to `0`. + +* `s = %str( )` - *Optional*, it is a separator between + elements of the list. Default value is space. + +--- + +### EXAMPLES AND USECASES: #################################################### + +**EXAMPLE 1.** Simple list of integers from 1 to 10 by 1: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + %put %intsList(10); +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +**EXAMPLE 2.** Ten copies of `sashelp.class` in `test11` to `test20`: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + data + %zipEvalf(test, %intsList(11,20)) + ; + set sashelp.class; + run; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +**EXAMPLE 3.** Non-integers are converted to integers, the list is `1 3 5`: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + %put %intsList(1.1,5.2,2.3); +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +**EXAMPLE 4.** A list with a separator: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + %put %intsList(1,5,2,sep=+); +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +--- + +## >>> `%letters()` macro: <<< ####################### + +The letters() macro function allows to print a list of Roman +letters starting from `start` up to `end` incremented by `by`. +The letters list can be uppercases or lowercase (parameter `c=U` or `c=L`), +can be quoted (e.g. `q=""` or `q=[]`), and can be separated by `s=`. + +Values of `start`, `end`, and `by` have to be integers in range between 1 ad 26. + +See examples below for the details. + +The `%letters()` macro executes like a pure macro code. + +### SYNTAX: ################################################################### + +The basic syntax is the following, the `<...>` means optional parameters: +~~~~~~~~~~~~~~~~~~~~~~~sas +%letters( + range + <,c=> + <,q=> + <,s=> +) +~~~~~~~~~~~~~~~~~~~~~~~ + +**Arguments description**: + +1. `range` - *Required*, letters selector in form `start:end:by`. + Lists letters from `start` to `end` by `by`. + Values of `start`, `end`, and `by` are separated by + colon and must be between 1 ad 26. + If value is outside range it is set to + `start=1`, `en=26`, and `by=1`. If `end` is missing + then is set to value of `start`. + If `end` is smaller than `start` list is reversed + +* `c = U` - *Optional*, it is a lowercase letters indicator. + Select `L` or `l`. Default value is `U` for upcase. + +* `q = ` - *Optional*, it is a quite around elements of the list. + Default value is empty. Use `%str()` for one quote symbol. + If there are multiple symbols, only the first and the + second are selected as a preceding and trailing one, + e.g. `q=[]` gives `[A] [B] ... [Z]`. + +* `s = %str( )` - *Optional*, it is a separator between + elements of the list. Default value is space. + +--- + +### EXAMPLES AND USECASES: #################################################### + +**EXAMPLE 1.** Space separated list of capital letters from A to Z: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + %put %letters(1:26:1); + + %put %letters(); +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +**EXAMPLE 2.** First, thirteenth, and last letter: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + %put %letters(1) %letters(13) %letters(26); +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +**EXAMPLE 3.** Every third lowercase letter, i.e. `a d g j m p s v y`: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + %put %letters(1:26:3,c=L); +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +**EXAMPLE 4.** Lists with separators: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + %put %letters(1:26:2,s=#); + %put %letters(1:26:3,s=%str(;)); + %put %letters(1:26:4,s=%str(,)); + %put %letters(1:26,s=); + %put %letters(1:26,s==); + %put %letters(1:26,s=/); +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +**EXAMPLE 5.** Every second letter with quotes: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + %put %letters(1:26:2,q=%str(%')); + %put %letters(2:26:2,q=%str(%")); + + %put %letters(1:26:2,q=''); + %put %letters(2:26:2,q=""); + + %put %letters(1:26:2,q=<>); + %put %letters(2:26:2,q=\/); + + %put %letters(1:26:2,q=()); + %put %letters(2:26:2,q=][); +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +**EXAMPLE 6.** Mix of examples 4, 5, and 6: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + %put %letters(1:26,c=L,q='',s=%str(, )); +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +**EXAMPLE 7.** If `end` is smaller than `start` list is reversed: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + %put %letters(26:1:2,q=''); +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +--- + +## >>> `%splitDSIntoBlocks()` macro: <<< ####################### + +The splitDSIntoBlocks() macro allows to split the `set` dataset into blocks +of size `blockSize` in datasets: `prefix1` to `prefixN`. + +The last dataset may have less observations then the `blockSize`. + +Macro covers `BASE` engine (`v9`, `v8`, `v7`, `v6`) and `SPDE` engine datasets. + +See examples below for the details. + +### SYNTAX: ################################################################### + +The basic syntax is the following, the `<...>` means optional parameters: +~~~~~~~~~~~~~~~~~~~~~~~sas +%splitDSIntoBlocks( + blockSize + <,set> + <,prefix> +) +~~~~~~~~~~~~~~~~~~~~~~~ + +**Arguments description**: + +1. `blockSize` - *Required*, the size of the block of data, + in other words number of observations in + one block of split data. + Block size must be positive integer. + +2. `set` - *Required/Optional*, the name of the dataset to split. + If empty then `&syslast.` is used. + +3. `prefix` - *Required/Optional*, the name-prefix for new datasets. + If missing then set to `part`. + +--- + +### EXAMPLES AND USECASES: #################################################### + +**EXAMPLE 1.** Split `sashelp.class` into 5 elements datasets ABC1 to ABC4: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + %splitDSIntoBlocks(5,sashelp.class,ABC) +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +**EXAMPLE 2.** By default splits the `_last_` dataset into `part1` to `partN` datasets: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + data lastData; + set sashelp.cars; + run; + + %splitDSIntoBlocks(123) +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +**EXAMPLE 3.** Works with `SPDE` engine too: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + options dlcreatedir; + libname test "%sysfunc(pathname(work))/testSPDE"; + libname test; + libname test SPDE "%sysfunc(pathname(work))/testSPDE"; + + data test.test; + set sashelp.cars; + run; + + %splitDSIntoBlocks(100,test.test,work.spde) +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +--- + +## >>> `%splitDSIntoParts()` macro: <<< ####################### + +The splitDSIntoParts() macro allows to split the `set` dataset into `parts` parts +of approximately `NOBS/parts` size in datasets: `prefix1` to `prefixN`. + +The splitDSIntoParts() macro internally runs the splitDSIntoBlocks() macro. + +Macro covers `BASE` engine (`v9`, `v8`, `v7`, `v6`) and `SPDE` engine datasets. + +See examples below for the details. + +### SYNTAX: ################################################################### + +The basic syntax is the following, the `<...>` means optional parameters: +~~~~~~~~~~~~~~~~~~~~~~~sas +%splitDSIntoParts( + parts + <,set> + <,prefix> +) +~~~~~~~~~~~~~~~~~~~~~~~ + +**Arguments description**: + +1. `parts` - *Required*, the number of parts to split data into. + Number of parts must be positive integer. + +2. `set` - *Required/Optional*, the name of the dataset to split. + If empty then `&syslast.` is used. + +3. `prefix` - *Required/Optional*, the name-prefix for new datasets. + If missing then set to `part`. + +--- + +### EXAMPLES AND USECASES: #################################################### + +**EXAMPLE 1.** Split `sashelp.cars` into 7 parts: datasets carsInParts1 to carsInParts7: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + %splitDSIntoParts(7,sashelp.cars, carsInParts) +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +**EXAMPLE 2.** By default splits the `_last_` dataset into `part1` to `part3` datasets: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + data lastData; + set sashelp.cars; + run; + + %splitDSIntoBlocks(3) +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +**EXAMPLE 3.** Works with `SPDE` engine too: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + options dlcreatedir; + libname test "%sysfunc(pathname(work))/testSPDE"; + libname test; + libname test SPDE "%sysfunc(pathname(work))/testSPDE"; + + data test.test; + set sashelp.cars; + run; + + %splitDSIntoParts(3,test.test,work.spde) +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +--- + +## >>> `%filePath()` macro: <<< ####################### + +The filePath() macro function returns path to a file, +it is a wrapper to `pathname()` function for files. + +See examples below for the details. + +The `%filePath()` macro executes like a pure macro code. + +### SYNTAX: ################################################################### + +The basic syntax is the following, the `<...>` means optional parameters: +~~~~~~~~~~~~~~~~~~~~~~~sas +%filePath( + fileref +) +~~~~~~~~~~~~~~~~~~~~~~~ + +**Arguments description**: + +1. `fileref` - *Required*, a fileref from the `filename` statement. + +--- + +### EXAMPLES AND USECASES: #################################################### + +**EXAMPLE 1.** Return path to temporary file: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + filename f temp; + %put %filePath(f); +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +--- + +## >>> `%libPath()` macro: <<< ####################### + +The libPath() macro function returns path to a library, +it is a wrapper to `pathname()` function for libraries. + +See examples below for the details. + +The `%libPath()` macro executes like a pure macro code. + +### SYNTAX: ################################################################### + +The basic syntax is the following, the `<...>` means optional parameters: +~~~~~~~~~~~~~~~~~~~~~~~sas +%libPath( + libref +) +~~~~~~~~~~~~~~~~~~~~~~~ + +**Arguments description**: + +1. `libref` - *Required*, a libref from the `libname` statement. + +--- + +### EXAMPLES AND USECASES: #################################################### + +**EXAMPLE 1.** Return path to `WORK` library: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + %put %libPath(WORK); +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +**EXAMPLE 2.** Return path to `SASHELP` library: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + %put %libPath(SASHELP); +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +--- + +## >>> `%workPath()` macro: <<< ####################### + +The workPath() macro function returns path to the `WORK` library, +it is a wrapper to `pathname("work", "L")` function. + +See examples below for the details. + +The `%workPath()` macro executes like a pure macro code. + +### SYNTAX: ################################################################### + +The basic syntax is the following, the `<...>` means optional parameters: +~~~~~~~~~~~~~~~~~~~~~~~sas +%workPath() +~~~~~~~~~~~~~~~~~~~~~~~ + +**Arguments description**: + +*) No arguments. + +--- + +### EXAMPLES AND USECASES: #################################################### + +**EXAMPLE 1.** Create new library inside `WORK` library: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + options dlCreateDir; + libname NEW "%workPath()/new"; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +--- + +## >>> `%date()` macro: <<< ####################### + +The date() macro function is a "lazy typer" wrapping up `%sysfunc(date())`. + +See examples below for the details. + +The `%date()` macro executes like a pure macro code. + +### SYNTAX: ################################################################### + +The basic syntax is the following, the `<...>` means optional parameters: +~~~~~~~~~~~~~~~~~~~~~~~sas +%date() +~~~~~~~~~~~~~~~~~~~~~~~ + +**Arguments description**: + + No arguments. + +--- + + +### EXAMPLES AND USECASES: #################################################### + +**EXAMPLE 1.** Get value of `date()`: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + %put %date(); +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +--- + + +## >>> `%today()` macro: <<< ####################### + +The today() macro function is a "lazy typer" wrapping up `%sysfunc(today())`. + +See examples below for the details. + +The `%today()` macro executes like a pure macro code. + +### SYNTAX: ################################################################### + +The basic syntax is the following, the `<...>` means optional parameters: +~~~~~~~~~~~~~~~~~~~~~~~sas +%today() +~~~~~~~~~~~~~~~~~~~~~~~ + +**Arguments description**: + + No arguments. + +--- + + +### EXAMPLES AND USECASES: #################################################### + +**EXAMPLE 1.** Get value of `today()`: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + %put %today(); +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +--- + + +## >>> `%time()` macro: <<< ####################### + +The time() macro function is a "lazy typer" wrapping up `%sysfunc(time())`. + +See examples below for the details. + +The `%time()` macro executes like a pure macro code. + +### SYNTAX: ################################################################### + +The basic syntax is the following, the `<...>` means optional parameters: +~~~~~~~~~~~~~~~~~~~~~~~sas +%time() +~~~~~~~~~~~~~~~~~~~~~~~ + +**Arguments description**: + + No arguments. + +--- + + +### EXAMPLES AND USECASES: #################################################### + +**EXAMPLE 1.** Get value of `time()`: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + %put %time(); +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +--- + + +## >>> `%datetime()` macro: <<< ####################### + +The datetime() macro function is a "lazy typer" wrapping up `%sysfunc(datetime())`. + +See examples below for the details. + +The `%datetime()` macro executes like a pure macro code. + +### SYNTAX: ################################################################### + +The basic syntax is the following, the `<...>` means optional parameters: +~~~~~~~~~~~~~~~~~~~~~~~sas +%datetime() +~~~~~~~~~~~~~~~~~~~~~~~ + +**Arguments description**: + + No arguments. + +--- + + +### EXAMPLES AND USECASES: #################################################### + +**EXAMPLE 1.** Get value of `datetime()`: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + %put %datetime(); +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +--- + +## >>> `%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: <<< ####################### + +The translate() macro function allows to replace bytes with bytes in text string. + +See examples below for the details. + +The `%translate()` macro executes like a pure macro code. + +### SYNTAX: ################################################################### + +The basic syntax is the following, the `<...>` means optional parameters: +~~~~~~~~~~~~~~~~~~~~~~~sas +%translate( + string + ,from + ,to +) +~~~~~~~~~~~~~~~~~~~~~~~ + +**Arguments description**: + +1. `string` - *Required*, string to modify. + +2. `from` - *Required*, list of bytes to be replaced with + corresponding bytes from `to`. + +3. `to` - *Required*, list of bytes replacing + corresponding bytes from `from`. + +--- + +### EXAMPLES AND USECASES: #################################################### + +**EXAMPLE 1.** Replace quotes and commas with apostrophes and spaces: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + %put %translate(%str("A", "B", "C"),%str(%",),%str(%' )); +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +**EXAMPLE 2.** Unify all brackets; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + %put %translate(%str([A] {B} (C) ),{[(<>)]},(((())))); +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +**EXAMPLE 3.** Replace all digits with `*`: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + %put %translate(QAZ1WSSX2EDC3RFV4TGB5YHN6UJM7IK8OL9P0,1234567890,**********); +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +**EXAMPLE 4.** Letters change: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + %put %translate(%str(A=B),AB,BA); +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +--- + +## >>> `%tranwrd()` macro: <<< ####################### + +The tranwrd() macro function allows to replace substrings +with other substrings in text string. + +Returned string is unquoted by `%unquote()`. + +See examples below for the details. + +The `%tranwrd()` macro executes like a pure macro code. + +### SYNTAX: ################################################################### + +The basic syntax is the following, the `<...>` means optional parameters: +~~~~~~~~~~~~~~~~~~~~~~~sas +%tranwrd( + string + ,from + ,to + <,repeat> +) +~~~~~~~~~~~~~~~~~~~~~~~ + +**Arguments description**: + +1. `string` - *Required*, string to modify. + +2. `from` - *Required*, substring replaced with + corresponding string from `to`. + +3. `to` - *Required*, substring replacing + corresponding substring from `from`. + +4. `repeat` - *Optional*, number of times the replacing + should be repeated, default is 1. + Useful while removing multiple adjacent + characters, e.g. compress all multiple + spaces (see example 2). +--- + +### EXAMPLES AND USECASES: #################################################### + +**EXAMPLE 1.** Simple text replacement: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + %put %tranwrd(Miss Joan Smith,Miss,Ms.); +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +**EXAMPLE 2.** Delete multiple spaces; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + %put %tranwrd(%str(A B C),%str( ),%str( ),5); +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +**EXAMPLE 3.** Remove substring: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + %put %tranwrd(ABCxyzABCABCxyzABC,ABC); +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +## >>> `%findDSwithVarVal()` macro: <<< ####################### + +The findDSwithVarVal() macro searches for all +datasets (available for a given session) containing +a variable of a given value. + +The value search is case sensitive - but can be altered with `IC=` parameter. +The value search keeps leading blanks - but can be altered with `TB=` parameter. +The value search compares full value - but can be altered with `CTS=` parameter. + +The default variable type is `char`, the `type=` parameter allows +to change it (possible values are `char` and `num`), the parameter is case sensitive. + +Only datasets are searched, views are not included. + +During the process two temporary datasets named: +`WORK._` (single underscore) and `WORK.__` (double underscore) +are generated. The datasets are deleted at the end of the process. + +By default search results are stored in the `WORK.RESULT` dataset. +Name of the dataset can be altered with `result=` parameter. +The dataset with result contains two variables: +`datasetName` - names of datasets, +`firstObservation` - the firs occurrence of the value. + +See examples below for the details. + +The `%findDSwithVarVal()` macro does not execute as a pure macro code. + +### SYNTAX: ################################################################### + +The basic syntax is the following, the `<...>` means optional parameters: +~~~~~~~~~~~~~~~~~~~~~~~sas +%findDSwithVarVal( + variable + ,value + <,type=> + <,ic=> + <,tb=> + <,cts=> + <,lib=> + <,result=> +) +~~~~~~~~~~~~~~~~~~~~~~~ + +**Arguments description**: + +1. `variable` - *Required*, name of variable to be searched. + +2. `value` - *Required*, the value to be searched. + +*. `type` - *Optional*, default value is `char`. + Indicates which type is the searched value. + Possible values are `char` and `num`, + the parameter is case sensitive. + +*. `ic` - *Optional*, "Ignore Cases", default value is `0`. + Indicates should the search ignore cases of the text values. + Possible values are `0` and `1`. + +*. `tb` - *Optional*, "Trim Blanks", default value is `0`. + Indicates should the search trim leading and trailing + blanks of the text values. + Possible values are `0` and `1`. + +*. `cts` - *Optional*, "Compare To Shorter", default value is `0`. + IF set to `1` execute value comparison as `=:` for the text value. + Possible values are `0` and `1`. + See examples. + +*. `lib` - *Optional*, default value is missing. + If not empty narrows the search to a particular library. + +*. `result` - *Optional*, default value is `WORK.RESULT`. + Is the name of the dataset with results. + +--- + +### EXAMPLES AND USECASES: #################################################### + +**EXAMPLE 1.** Search variable `NAME` containing value `John`: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + %findDSwithVarVal(name, John) +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +**EXAMPLE 2.** Search numeric variable `AGE` containing value `14`: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + %findDSwithVarVal(age, 14, type=num) +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +**EXAMPLE 3.** Search numeric variable `SCORE` with missing value: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + data TEST; + score=17; output; + score=42; output; + score=. ; output; + run; + + %findDSwithVarVal(score, ., type=num, result=WORK.MissingScore) +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +**EXAMPLE 4.** Search library `WORK` for variable `NAME` starting with value `Jo` + ignoring cases and trimming blanks from value: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + data A; + name="Joanna"; + data B; + name="john"; + data C; + name=" Joseph"; + data D; + name=" joe"; + run; + + %findDSwithVarVal(name, Jo, ic=1, tb=1, cts=1, lib=WORK) +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +--- + +## >>> `%getTitle()` macro: <<< ####################### + +The getTitle() macro extract text of titles or footnotes +into a delimited list. + +Titles/footnotes numbers can be selected with the `number` argument. +Only the text of a title or footnote is extracted. + +Author of the original code is: Quentin McMullen (`qmcmullen.sas@gmail.com`). + +See examples below for the details. + +The `%getTitle()` macro executes like a pure macro code. + +### SYNTAX: ################################################################### + +The basic syntax is the following, the `<...>` means optional parameters: +~~~~~~~~~~~~~~~~~~~~~~~sas +%getTitle( + < number> + <,type=> + <,dlm=> + <,qt=> +) +~~~~~~~~~~~~~~~~~~~~~~~ + +**Arguments description**: + +1. `number` - *Optional*, default value is empty, + indicates numbers of titles to be extracted. + Space separated list is expected. + If empty or `_ALL_` extract all non-missing. + +*. `type` - *Optional*, default value is `T`. + Indicates which type is the searched. + `T` fro title, `F` for footnote. + +*. `dlm` - *Optional*, "DeLiMiter", default value is `|` (pipe). + Possible values are: `| \ / , . ~ * # @ ! + - _ : ?` + or `s` for space, `c` for comma, `d` for semicolon. + +*. `qt` - *Optional*, "QuoTes", default value is empty. + Use `%str()` for single quote symbol (e.g. `%str(%")`). + If there are multiple symbols, only the first and the + second are selected as a leading and trailing one, + e.g. `qt=""` gives `"title1 text" "title2 text" ... `. + +--- + +### EXAMPLES AND USECASES: #################################################### + +**EXAMPLE 1.** Get titles in different forms: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + title1 j=c "Hi Roger" ; + title2 j=l "Good Morning" ; + title3 "How are you?" ; + title4 ; + title5 "Bye bye!" ; + + %put %GetTitle() ; + + %put %GetTitle(1 3,dlm=c, qt=[]) ; + + %put %GetTitle(2:4,dlm=s, qt='') ; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +**EXAMPLE 2.** Get footnotes in different forms: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + footnote1 "First little footnote"; + footnote2 "Second little footnote"; + footnote3 "Third little footnote"; + + %put %GetTitle(1 2,type=f,dlm=s, qt="") ; + %put %GetTitle(2 3,type=f,dlm=c, qt='') ; + %put %GetTitle(1 3,type=f,dlm=d, qt=[]) ; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +--- + +## >>> `%mInclude()` macro: <<< ####################### + +The mInclude() macro is a macrolanguage version of the SAS `%include` statement. +But it allows for "embedding any code anywhere into SAS programs". + +Macro was inspired by *Leonid Batkhan* and his blog post: + +"Embedding any code anywhere into SAS programs" from May 30, 2023. + +Link: `https://blogs.sas.com/content/sgf/2023/05/30/embedding-any-code-anywhere-into-sas-programs/` + +The implementation presented, in contrary to inspiration source, is +based on the `doSubL()` function and a list of global +macrovariables of the form `______` (six underscores and a number). + +See examples below for the details. + +The `%mInclude()` macro executes like a pure macro code. + +### SYNTAX: ################################################################### + +The basic syntax is the following, the `<...>` means optional parameters: +~~~~~~~~~~~~~~~~~~~~~~~sas +%mInclude( + < f> + <,source=> + <,lrecl=> + <,symdel=> +) +~~~~~~~~~~~~~~~~~~~~~~~ + +**Arguments description**: + +1. `f` - *Required*, a SAS `fileref` or a **quoted** path + to the included file. + +*. `source=0` - *Optional*, default value is `0`. + Set to `1` if the source should be printed in the log. + +*. `lrecl=32767` - *Optional*, default value is `32767`. + Sets the `lrecl` value for the file width. + +*. `symdel=1` - *Optional*, default value is `1`. + Indicates if the global macrovariables + `______1` to `______N` should be deleted + when the macro ends. + +--- + +### EXAMPLES AND USECASES: #################################################### + +**EXAMPLE 1.** Embedding text in statements (the `%include` won't work here): +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + resetline; + filename f "%workpath()/testFile1.txt"; + filename f list; + + data _null_; + file f; + put "13 14 15"; + run; + + resetline; + data testDataset; + set sashelp.class; + where age in ( %mInclude(f) ); + run; + + data testDataset2; + set sashelp.class; + where age in ( %mInclude(f,source=1) ); + run; + + filename f clear; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +**EXAMPLE 2.** Embedding with direct path (mind those quotes!): +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + resetline; + filename f "%workpath()/testFile2.txt"; + filename f list; + + %let someGlobalMacroVariable=17; + + data _null_; + file f; + put "options mprint;"; + do i=1 to 3; + put "data y; x = " i "; run;"; + put '%macro A' i +(-1) '(); %put ' i ' ** &someGlobalMacroVariable.; %mend; %A' i +(-1) '()'; + end; + put "options nomprint;"; + run; + + resetline; + %mInclude("%workpath()/testFile2.txt") + + %mInclude("%workpath()/testFile2.txt",source=1) +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +**EXAMPLE 3.** Embedding SQL code inside the pass through execution: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + resetline; + filename f2 "%workpath()/testSql.txt"; + + data _null_; + file f2; + input; + put _infile_; + cards4; + select + c2.make + , c2.model + , c2.type + , c2.invoice + , c2.date + + from + public.CARS_EU c2 + + where + c2.cylinders > 4 + and + c2.date > '2023-04-02' + ;;;; + run; + + + title 'the %include fails'; + proc sql; + connect to POSTGRES as PSGDB ( + server="127.0.0.1" + port=5432 + user="user" + password="password" + database="DB" + ); + + select * from connection to PSGDB + ( + %Include f2 / source2; + ) + ; + + disconnect from PSGDB; + quit; + + title 'the %mInclude works'; + proc sql; + connect to POSTGRES as PSGDB ( + server="127.0.0.1" + port=5432 + user="user" + password="password" + database="DB" + ); + + + select * from connection to PSGDB + ( + %mInclude(f2, source=1) + ) + ; + + disconnect from PSGDB; + quit; + + title; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +**EXAMPLE 4.** In a limited way and with help of the `resolve()` function, + it even works with IML's interface to R: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + +resetline; +filename f3 TEMP; + +data _null_; + file f3; + infile cards4; + input; + put _infile_ ';'; %* a "semicolon" trick for R statements separation *; +cards4; +rModel <- lm(Weight ~ Height, data=Class, na.action="na.exclude") +print (rModel$call) +print (rModel) +;;;; +run; + + +proc iml; + codeText = resolve(' %mInclude(f3, source=1) '); + print codeText; + + call ExportDataSetToR("Sashelp.Class", "Class" ); + submit codeText / R; + &codeText + endsubmit; +quit; + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +--- + +## >>> `%fmt()` macro: <<< ####################### + +The fmt() macro function returns a `value` formatted by a `format`, +it is a wrapper to `putN()` and `putC()` functions. + +See examples below for the details. + +The `%fmt()` macro executes like a pure macro code. + +### SYNTAX: ################################################################### + +The basic syntax is the following, the `<...>` means optional parameters: +~~~~~~~~~~~~~~~~~~~~~~~sas +%fmt( + value + ,format + ,align + <,type=> +) +~~~~~~~~~~~~~~~~~~~~~~~ + +**Arguments description**: + +1. `value` - *Required*, a value to be formatted. + +2. `format` - *Required*, a name of a format to be used, + character format should be preceded by the `$`. + +3. `align` - *Optional*, allows to use the `-L`, `-R` and `-C` modifiers. + +* `type=n` - *Optional*, defines type of the format. If the format + name is preceded by the `$` then C is set automatically. + If the character format name is without `$` then set + value to `C` yourself. + +--- + +### EXAMPLES AND USECASES: #################################################### + +**EXAMPLE 1.** Formatting values: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + %put %fmt(111, 7.2); + + %put %fmt(111, dollar10.2); + + %put %fmt(abc, $upcase.); + + %put %fmt(12345, date9.); +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +**EXAMPLE 2.** Align values (compare different results!): +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + %put *%fmt(ABC, $char9., -L)*; + %put *%fmt(ABC, $char9., -R)*; + %put *%fmt(ABC, $char9., -C)*; + + %put %fmt(ABC, $char9., -L); + %put %fmt(ABC, $char9., -R); + %put %fmt(ABC, $char9., -C); +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +--- + +## >>> `%infmt()` macro: <<< ####################### + +The infmt() macro function returns a `value` read in by an `informat`, +it is a wrapper to `inputN()` and `inputC()` functions. + +See examples below for the details. + +The `%infmt()` macro executes like a pure macro code. + +### SYNTAX: ################################################################### + +The basic syntax is the following, the `<...>` means optional parameters: +~~~~~~~~~~~~~~~~~~~~~~~sas +%infmt( + value + ,informat + <,type=> +) +~~~~~~~~~~~~~~~~~~~~~~~ + +**Arguments description**: + +1. `value` - *Required*, a value to be formatted. + +2. `informat` - *Required*, a name of a format to be used, + character format should be preceded by the `$`. + +* `type=n` - *Optional*, defines type of the informat. If the informat + name is preceded by the `$` then C is set automatically. + If the character format name is without `$` then set + value to `C` yourself. + +--- + +### EXAMPLES AND USECASES: #################################################### + +**EXAMPLE 1.** Informatting values: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + %put %infmt(111, 7.2); + %put %infmt(111.234, 7.2); + + %put %infmt($111, dollar10.2); + %put %infmt($111.234, dollar10.2); + + %put %infmt(abc, $upcase.); + + %put %infmt(12mar45, date9.); +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +--- + +--- + +--- + +## License #################################################################### + +Copyright (c) since 2020 Bartosz Jablonski + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +--- diff --git a/hist/1.34.0/baseplus.zip b/hist/1.34.0/baseplus.zip new file mode 100644 index 0000000000000000000000000000000000000000..700e6c8be1cf6b41bd33bd7f2c81bef725bbf0ef GIT binary patch literal 295726 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⪚n4RQE00JvO8H6YD#as7!O%3QXv0_6Y7p>Jjf@D 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 x2#TH3Co4O}6b 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