From b37f716731607d9052e4ea5f0513e9604b43f9d8 Mon Sep 17 00:00:00 2001 From: Bart Jablonski Date: Mon, 4 Sep 2023 16:35:24 +0200 Subject: [PATCH] The BasePlus package [ver. 1.29.0] The BasePlus package [ver. 1.29.0] Package regenerated with the latest version of the SAS Packages Framework (20230904). SHA256 digest for the latest version of `BasePlus`: F*2FE68DD9B3692B9D46EF85B82F63C7E65010BF9E89D670FD1779F4670FA03F31 --- README.md | 2 +- baseplus.md | 6 +- baseplus.zip | Bin 280955 -> 281263 bytes hist/1.29.1/baseplus.md | 5498 ++++++++++++++++++++++++++++++++++++++ hist/1.29.1/baseplus.zip | Bin 0 -> 281263 bytes 5 files changed, 5502 insertions(+), 4 deletions(-) create mode 100644 hist/1.29.1/baseplus.md create mode 100644 hist/1.29.1/baseplus.zip diff --git a/README.md b/README.md index c4c5670..0ad9efd 100644 --- a/README.md +++ b/README.md @@ -48,7 +48,7 @@ libname NEW "%workPath()/new"; ``` and more. -SHA256 digest for the latest version of `BasePlus`: F*9EEE4F4B99EA725B60141645AB6A50BFEBA32CE54848593F8D832D907D63CAD7 +SHA256 digest for the latest version of `BasePlus`: F*2FE68DD9B3692B9D46EF85B82F63C7E65010BF9E89D670FD1779F4670FA03F31 [**Documentation for BasePlus**](./baseplus.md "Documentation for BasePlus") diff --git a/baseplus.md b/baseplus.md index 3a4fcf1..f9b0a87 100644 --- a/baseplus.md +++ b/baseplus.md @@ -72,7 +72,7 @@ --- -# The BasePlus package [ver. 1.29.0] ############################################### +# The BasePlus package [ver. 1.29.1] ############################################### The **BasePlus** package implements useful functions and functionalities I miss in the BASE SAS. @@ -385,10 +385,10 @@ Package contains additional content, run: %loadPackageAddCnt(BasePlus) to load 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 20230520 * +* SAS package generated by generatePackage, version 20230905 * The SHA256 hash digest for package BasePlus: -`F*9EEE4F4B99EA725B60141645AB6A50BFEBA32CE54848593F8D832D907D63CAD7` +`F*2FE68DD9B3692B9D46EF85B82F63C7E65010BF9E89D670FD1779F4670FA03F31` --- # Content description ############################################################################################ diff --git a/baseplus.zip b/baseplus.zip index f40497601d75792d160350925a599bb7224f8464..640e533c13726e878d878bd4f71f3917841505d8 100644 GIT binary patch delta 17453 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 bqW$0NE^&Df9t?R0L|-060$cb3ZSC zo6n^s-o5&jAt|yGYi(>{SB*|SIX!X+#mdNQ9TGziPjCSDktNC(W*j2$*2yEx*`sh! z#^OZ$fn9H9X*Vi}o)}|Mn8eXJo9+#&+d0C?>yz!RZTS2B>?`$}aW(`Sf}Kh7rdoIe z@V)fD(^fjZgmk7f2DuBk^$gj!W?dd0DcY}+OG+sCqsgR>$-_RJ43*=#uxxgcJv%=kuI4@~MXl2u;)s|+^mA?rACm*F#VHPS73!n&2 z&su1$uGO<)j=9ks>*BW&#%s>Jv&rzlSvc$*l`8L1=nh+RW`YRE3wo&wRA6&2yo(Ae z(}-#&d(M9nSNL9Z#;7|^IZbvl(Vn!C=C~ERC#4)y=$D?+mSkPWomIt2XfW-GZvAPx z4NUWg?F|LtsJiPH;1xV^O(3Q)JUxp=ulJ?xFk+j&FMV)U$Fak7UCuF=_1cTm7arEa zZANrdGTmdJartdAOl#+>#hjfIQ76>aE~MLizKR}7-*vzq-<8rceEr>%JKG%AJ8NHh z9pj1e%is{ehHZiYx0mt00;IyoXSka-z}mB^{tdfGC7+V;0!&VWnG>5bcG5xGnUA6I zmUu&jgphJVC_`ePtzR44T)Tr{Wn4~=J zCwZEpG%-<5IBpnD_7t`KR`%H#vjJ#`nzZ?0+$RU03oyQnt+j2m!O6=KsP`6xS(>u{ zg6ECF_xTk_@Ed&0Ec|)E)KtfMcs;W}N%*)JolgNlSVT&vq2bF?f!7H(VL$0Sf~Pej}}1EKpd>Yt^9+m=77 z5hou`gB=WBBa4gERoNMe@V}7nyeC#9@^hW36Xz(g^q+qZ%VwKr2R4(UOtqOuiwpL{(UoBt~dn_VT4)0CRL)Vzwri%Dd)Ev!xz zbN)U3(yx&e?>e86!Wk5*l1qL!lBEr{9lKW<{}4p${ZO^ zi3gT7G8|QNBa-(BQuh#4Zmvn}b2d4B?w2W^G@h|7e929e$>BJq2JeC2onuJ12M1Q- z?nTBG@jHV>ihD>uXWXSz%{debM8j>b$E_|Hqg#9+e~01rCBRsyLfx(Th@9<{l|J=4 zuNG4km|@bGHh4+Wx^;$Y>V-4Ro|&%Wdo8O_uFnM`+n8U0ZJrztr--Hs5`nl95H1#1 zTlHBNfjRP1YIm+;!7KtZrN|G;%Zn3@X|K|Y6Z6cXUp}+;aCn(lPq!X4&{L*@@x1g<(C8FMIrz~h5!`Vs($da6%3_M``GC!M;^)OYXm(_E zo37u_p!oGQ<_|_>*Mq8{Eh)=EuwuO4jqSk)+uCH4g+&j7PnwnUx21;t6Znh#*Mae# z^HRS$yiC#aY8{VkTu|1c%!mE3hgm{#l}|2vOA|7-ydta8dO+0C-!ykk5oFfh(Y9bS z{{nmY&DSz5=CpcGeSAS9_g!H=8fH(8e}_Awn|6R8!){s8>v=Jnv&}H_*Z1%2v?via z_fwJpgV?&p5(RS>i7&!CW_>8%3Md=ARs<{xzp0Tq7OEX^%xus_b+TPL^8UGl4lrMr zjIxoVCbmv_)9rCHR%n|x&xOh)uKfIXNHGk2)F#F?hI3qN93}onJJR8J!1MFW3)NX3 z0m?KR+wYmHAsbg$bFehR<@F!~)2VzirhI@-y{j}lxG>-qC-o5*_-SB}I0Ts4L-n~-O$!)#Z%a<;k7*Q$O&M%Z9} z8!#Nk2;~nx`DqPBGc$7-y(KFqpwgJ5W5)c(Tzw55MjZGm z<><*ea$dam`xpff#32`JffN9T2A2p%zHl-@O$3od@xJ7L>m_mN;H zv*Eh4^D1lovJx_K8q;Sx&{a9+qU#R!JL^pB(r^`Wg^N~yt5m+eHy#YJ#%T+D`H}9>qH;>1Gic=#LJz*POJoh zYE34J*nI{_Orp$Wi6BjUgU?pCuSYKlQ=LXChFk<^2|Od@S|P_7{?Bhiu3zvF4OGtC z|7M$nyEU=iVmqAj&zZ&E{PF7TPe>{dPpj@(uD+wdD|Uu0-iW|Aoj-RdOLuY}*5jpj zC!~L){e1{x_GuhIYJ)-gb0E4dm2D^yA;%anMAVg6ZjaL>|BwcX6#wDfRsLQ2KT)Y zOuCl`7y1Qf_089AIvzGc4MqB}FxotL*6P$II7NawL!onLo6JVum<0jLt~D%W>!BlB z83Yz_v}Gq=B|MKp|3Kf^I1Ib`!Sv{epP*kAPfI|p z-z56ZjlVI;C_z+yqQQD9R^;u8gJ*#~J7pT(58H$ogdeJ$q-sf1H22m{BF)NI|5m$J zVx?VoSOCC0c^{1rOnv$+PN6(WOUo=Pyez$+f}%*QoY{IYYlOy`B(c9ojc~biwN+6$ zGoq$gHq%tw$>|~B;e7dP_`PV*E4-gGD1`I@$l360^=0z+mAD_oaQcH+`=X=&auz>PlwZ zMksDU`g+-Gr-Sfn5DAk;e3YbD4n26+;l+D6&Y0<)q4gOu4Yr~f6pkpfbMup=m{AVP zbTh1$T}CNaCGc6HhQ{B_9-i;74G9+{epS={_QTvI0h->uQ+}!e zE#6Xi%{<-3Wo14;@-?4HA06eJeDc<#0lAuL*hyNpx8-00nRRv5;So*yJWo6U0l-1- z4^1Ty<14h6No!@1rl}>tiyOSY-@!rmqe50SVPk8HK-p1EhxR|Z=H7q7vhTOIS+2qNWRK)?O1;Ye8fWNZiD0D^n)lXf^%s?8E=R`AbZ)WTjI$Y>qMWNP|1czv|}Ohp(-d89C{ZH`5* z4_oLR9Gdppw@Oca_iGo+Xp6K$pW5@fiEq7P#b$$H$cE>gd0F>OtqT?-`*zbRV26&85>147_TAU6<7SddXLOWY&DE7Dy!8iB zSisno&d$%8z-Xf8YL%}q-`u5FWu;sH#BY2Cj@fVdOrzov=rX9OFNDXN+7>K@8#k^L z*BCFb2i}1Fl&LXZYCQPLzF+6ZVSMx+F$!CcRKN|-X^FrEX)at!azeG=5NqFL43&1< zRh%8+U`QHqowl3h!ms=jwP>!i>JMZ?Bxe=ElIVObRa!L7RxcSHTYO@BM?5-fWbM+U z)J=uYUkBOQOpD8MIFErE_s&f#N-g{ou&)ZXeqmtaYtemga zSk8jm{bjN6O*-cy7oqHUuVib9N}a!RuZ1x13liA^_ZNxl1^Tr8Ja3N&%f?v%53Dd4 zRM3gWApL1LI!Esv@ z%X#A+ej#G!MOoMQJ#-7Ru=Q1uq6g^B=Brkj!s@d;8}%5Yh`Ptefyj+qfkb=KQI zLsU=zp-T#QefLX?C~s*kogtd=QoG15`*HGc$UoDVZ=e>m#EJY4;8{S@89mS`Y!2iK ze;;X|FKKXSFf{tsz{VtVcit2SyddO9wV7dAHn*U$uLm~Hc}8~mTjV3LoY!32A$;RK zes2zOlu=LoN)oLDqn6l z+Dd>c`S1-YW%qrCd~zzKW=y{=r6e|?WJ-$RS?F+^PKkgC-iGhi+f7z{@L;7BX|1E1 z0^UY~dp~9LCrX{S(j)jg^~i2yqgXp`^#buaZ_i((38ble4i*(DItep2egY{0Be9Ef zk{P~ad(aNaF$~w2EJIM2&Sl)KEqWM)()n5uSgo{uHg|@lm`e#9YgZNcBNM; z08?c=D4GN5T9H*~lsOocVTWAZWzFED%eyILh@|vr_AuMEGBMwaCDp(!ut=gy=;t9` zD!yk(RHxnLsLa{ zS9N5dcrC9DzG%CCO_@N8TpIi2t8$PrqNm9lMKh+oILG-Lrp8q)M}jYk5;zywfvKg2 zHMLuNJ3l&SP%_R-M!{O~Z&-2IJ)5u(E#yZNj_fQf?&iGZ+gP8!Px)$*R2(GJ`ej@( z#eTdM+bUC#!?C_PvGz_K+gd4$mF79ILIUGvwn)Zy4zpwl^1yB}>J&lTBr{ zsJ^OG%P-2QY9=z5%n(CL37S+2dqR;<5rss%_KeZnkvM!4Lkhg|7`Sgqo4bb7?hG|Q zb~z=}60m^)fzHkl2bB(0;idUnkyT#IFo`3Up!(2++I5ZO)v75!wTG&^ z-|0*ZIT~-TuoG`>-&Q$eVv*NcPQFC8j_n3Go%O+>r_AYupi@i;-ScF(7C^*EQD5y0 zE+cZQpY8ZeVp$t5YIP|c>tyZCZV7EmTpkSWa)9 z-b(dyyE=)i=#qB@PfdCYrqI1$51Wqa<>4}+t7NCs4&1-0X?S5hFj~M1@6Xw!i(iv} zsTEl*WF{|$+TbQ(&fe5WZiGIG1?(%g9Z!9f7P{iuz zA(zwmS`gJ73N^GR^}9+kHA=9*QTmD|%xQ$5YG}VURcORV$f{(lALA&NJLb)7Vx(do zV5+fVB`FvuoAG5(F4{I1=(oPF8!{Tb{wX*N%sk-(+p;!-*Y}p3j*o!&fWoxHURv}n zBKOsO4Obp5Le+Oop?%30Z@;NgwK)KB=+ zxlVLtHVMOLzAAT1A1vk5wvJiZ6FKRTs}ngx1%5cXV5KrCvuo*(JFN*d4kO+bI(g|v zx1l{O2{~eF+?6MGON|{T8xfI#g`6cSX)-K(UQ331oSMLN`3SXEMj6_-vzQ3ZDX*ub zZwID!Xx&-6kN)ZOhGUM_-?Zj*aB;Cdy?yS!S5}H(sDyBfu^Od|Iywf){386rCCWoa~z$RM#4qocwf>B9vRC6*L^7^NuBl1k+k^R>v->01Oj{Ncz| zAoDa*;@^ic?=%Ov^CYxbE+zRAKUqwGkvaQI#bsB9rm416iR@oc4_j6bS#a`7p=!ns zkwn_ltfb@(gk~ktBk+Uu6)@1L5V3`6)DxSeX%(<<+N2#t6Ur4G8xt5fqwzeuc?huPW2OI8j&0zG|aAKU}9 z94Kb&^9;J)_n_S|7#7dhIvy;+xM1=9B!ATfei)tT>IQP>t$rTk+@oR$hII(m89@oi5OFJ!>Q4WwL@dZ8(#1d`(=FI@Ex^qyj|Cpu7^)=Yl!ThUBo!I$r@$h?5B-f*K7 zoE#$F(P$Q7`iP-DGUQ(Vb6;xB=uC4l+&%Lt>bqC?E> z5zY*s_!H1nMuRk{FIe@ONc~gzi&9TMYcR}Q--J@Q?~FSp^SMk@y{i^CZ%jn^%ta}+ z2s;~hgn?=VA5i;^TP4wDk$+NfdCJE#7JQk3CM4}owY&X&^mgjxVxt4Y4k560&zP$y z&bu+6h*-;=KdrK82yxhLI^t^cHUY&bo z*y^=tP+0*k@n_6?B|6wa7_x68)n^_k!*_fVilbOXiBOyB{XWGbmS zF&ZhQsZartykh#nCY<<1`6>Wy_gZML^#D>1`SI0MW3ESiRqYg|WoRW&*PQQM) zX9Tb6#)ID|A4J*?*VP|IG{;SBlnK{Qs7}?&$Sle%qR6pDxq8oFr=8*64T?$CGJMDo z&5cuq#H?*Q^ijF$dlfY9pGRH-X6adSyc=wu-#MydoqT~Y>4%%NDmed%M=!i`T{vem z?g{TsCmdJcmyVpyQIMZ=8?~$eHn+g>!Q|~V(JhR8ZaDp6T}^~s4#D0Yl46_kO}m*e zn=?yYx~ZiWnXFgUPb<<)_(26#A2h8PyMo6&BWXV4I?nZc)oSC8KUDqUVp`mf=&hca z+kq^J-}wvmd z^p!0Fk%oCLtwz(P9|CrtF>-F@rX2|1hkB&@79sP7-%hUW#!sAPw}0SW+t{mZboJE6 zah&7f%bb3e{O+<9d|KXhQ-#+z?yB2$t8sqY8Fqz-CgNkmkgC_3ZSZX=71GMg_n ziry@Wf7s;IE&)zw;Lk>=zUQM1GW-@$*AmIg`Kuj~?x#%k$7o+qTXh|pJzd`XX5A0$Gl)={-?RL2J6a~bH5 zEK=2z>1<7=pTD>R zhxLAh_^`jgr*hu?87qs`2r-X2ktiXzHBN`IvYms%tD#b%O}3v(wQ3?2(T#3PKf$)r zzip>+8$>+vY?=W=ZKL(X+XF@5lEtLClaGR6mvNNp;U7Px9o(@ITIj$MnI99i5V2@$ zd3$_v^}eH^tHWv_!E&(w0`2nVK*$k5B`#l5{I;WPB|XZ8=kdpEHOWH@`2$W3kz1W( zeN(A$>)tqycBAuTK=0AKqdMB#qoD_s3;L|9&TrPy7M`aW)^W=|7vCOm0Ds?KHt_sX zOOB!t1#@bfMI(SLM1o`>zBHe&%wmhPoJxDTR=hr}P5PcrO5c6FzPziqCWTw3uCmc< z9PT|2;x6v7X_L-;R_OO4URo9!~@s=ujL+WliN-+l)s{P*rF+;=9< zK{7VSZsk3?5%=iL%jNm#l(bg!4AADBKc=+%u{j7U^cZE|$EQ?FaU~rKH0z(2| z{w`!+iHB%15|t=!lTS;uC^Z7Z`!B?)thL2WKgiJEBpXmkf+3vwCYS^K45z;gkKqeF z;@3HcUyv+sriAgxkqeQ753}Fre~h;bpK@LE))TrV5fT)XjB`*iI!#el(AuN+mR}m+~^0#PYxw-@>`4XCcoR#zVb+f*swomM*!UO&KDz^|(-h$9c zrc@js;}>I3K{7ElJ&qVZsfVMnP)NSluMM3E*Q(LqpOUqyMZx2Pn>`CM&Ekta+CcOM znVV2{`8obOh^52YhmQlpNut98vB~wK!`TDFWY;w9_Ax9f83YI$3) zg)8VbIGhUo=)V|TrlUtSC!Q@(pW8PYW0bb{{8~|_tryEU(zDdsv{9<-P3K;>b2kb} z+(#65h>HfXq$Ok0ki%s2Cv(zJv7qf2aMsPBSmsW$C?KYyn&DV-?CD=wgB`zS6{N!m zWOu7&h>rwkSWdexS0;mLNZ?wnuRA-Eb7`JYU7N2qiRoXpn)6yNv4jsR_1ZC^YiKz_ zsMBlb)&eY4I{A}VXvpY2JczTx+%W4R5+=+)wn1{>2tqWwjsr+O z($s`h8%fVIJUNG!7Pyq$M=J#6O#V$v3hYfLp%VblyU7iCiH!vnuxwLKMGpFwI(}o~ z2_oFy!b@lP$hOKBrqeJI>MwJES8QT2? zj)e#s&c|R(7ans%a-U}8AAT-ja8pW~?vvJ=*N8os<7a14`naB&nV)n@1=x(%{N`Ib z&xi}a_I`>lMn+S8ucUaJXU|SmMZU(uA%Zv(?R9QYv%2?eH1**6bxRr>7y50Qopw=aWJE!E%W#7~prCpRhuc@fpSJH`e3%2bQ zS;go!C&*JV1V$4%SW!Y-pI-Y^=2S*==(;$ttFGsJ^Pette)6AUX8M+ITyym*bP;9W z7>wFU^_IcP(bQPm39s;=I9b**j3XOcq;gsDuz=BkdGM>Du(e0Agq<(9xP+vi$E5^9 zS($AuO!?yRNFR$qMSt1y@=^a=9kXuTZ8y5wsDccxAXo7q4WjP&d%$Z3*aV-Df(&H9 zuJ%FP+7bm?y<-K8mD@(L&ye-=Vv4hu`d~gCAk}X?AV-XgKy0IJ)U@59;>R>QOZJMB zsNVvta0hVL1sHg?uGkkYpQhHyIkyT-?dqDzQY=1;>Sk#z$I?JUG?#P*6DI9SGU9)A zAV2T$1738AZAN-bJxpW8FJs|O)1X;)jtR5QzE651wOq|O4EtI}EW!*?%j0{154gW{ zz>R|~E)De_?*4w0UHqXy>O%s~xWoX*gIRG+wc@maSvH2B5QcqZyxfb+=Ce@!9MZ%p z2Nm;)?^Q)`s&@smL6b^qiI$=If`c?amUajfUj5d;;m*0`>9H|5wZmqe&r>+eK|0ib zKgEA%S$O^F#!86z16y1OchKS7$S}C1cXXa-RgV0(k_~saZDD+AX)pRU*>K%b91HajMaVzDqeAS{%aW4w&jI~>XnHwn>@Jf&eV!WApij7$;wQ;;PE0tg+=Aw@7s%XABUT0Gw8T|RtYVm*XG{G(9ly(lY=YyyWaF9 z6rvr}T#9_D(QD|)grkgGMlAd`aV(x|e0j%!N=V*pc!)2gpcOa3f30^sSyuM0&@hS| z_E+c->Zzbyu2Hy4UrK)edKx!%7+o?Tz36f(05 z{!vi5ehtK^XRV3R@FN6o56fsLw_sb12Dp?e*iWIBv4$u~^W53+oJm?3$}?-#nt16zwN@sd{7OAn?;6&I8_dt=g+3Xq`5Nz=!9f5MsWI3SThcGm_4{?J? z<^7TyIX4D8O>kNEKs`nu;7Stx_)P`Sqg>>>#Cz4}5Fm#F`!P z@qA~zqpk=4EoQ;c`sOeXkqs2+z^AhOKBK;eY}Ad97O6A7qEDd8yakU<2#yiCtI%q zzUCOkcNu}(GfD9n;}Y;(N996w-}WfalG8M(Uroq}CTcTz+R$8ZhOPATo6->uB{=#s%r!aapYHHo6fVtu+` zT2Mo3{-`SAW6pi@`C}P0WT7W@XwgbW$z=K-x+slf23sO*`;fL!O)2<$^>!JXs@~2hLTdd+FL643Ou5P66Eiw%V5jG^Yy~f0$(1!dLrA%gE1^s z4^44YO&&!^$*{)+>(JV@7D)`5kQu#uH|Y~YJEorwU9HTluSRyL??ANGNK!qc7r&58 z>O>{x5r+h^$QUzqN(oHijE~jDoW?7i@x#8*$nE>yY{oVf521{ObSgH@enHueRB*4y z?YRn?WTcw>J)bnZAlKwj9?_Xi+^_OP@hr+sQX+@%-s0xQ_%3m%9v>CCE2f9Hs##Fw z-^fd0SH9i)^KqNSErXV=&Nd$Y-VuxBqES|7b@_`ifpTU2JQep(_rajgwF)O@NgBQD zJ)DFBN(RucVc!^cdm^>bJK0y(gYA8U9AXx8%{iGu%qf|;m8dx1!1%V%x)G~#=IrGh zv@xsMRJUsKS8&o3=Xhz=SF$k;R6k?+0^p-vdr(yQ04V3ssm3g-C>Ok3vOedkuES*r zYa@Afem|(AWL`aq{M=)Y!!TsD1ja7CwkO20(VU1hi=V{zSkb6vi8snO3p}*}Z+38Z zz_{kIARxYnW;n|bIa2bfS3wY_3kH8So``SXNW1N`aEkVfatf})8%al@#H0Z5;*2I@ z=!-5^Tm6nQhH^4ImBzRB`gtkZ(NUg(dc83)0@QObf?k&RZAO&bXn7eOSa&k_s7MV1 zZ?vOdQC;Y5=W7CNWROUEHVY5yE&#g)@y*x;{O&(-X%$<)>Ht@worIW71mIHHzqFPv>N zxx?(WUxWo0-XKQr*7mZZt}%UV-HVlbLtaKRrD_6>0M74QJ@Rb+4L z*bWKthxa5GuwDAtzhynoI0Qr*-IjO+ShITIBKH%SzQ9QiC%zP!e z$Ew`eA;OdVVcN`q-xj9h_T>aq^7lPSUlOQB9d0 z=EhKtxo4o8tDDHdr3PWbfv3NNKguCZG-_<;D!O>ywEGn(u*W>O#4QSY{%&i<`~sqU z;`M=|eHREWrFly|bBr1%{Lwh?+*O9-r?*#SV$(OLCTV;mwH?(S4-zX%=PBV*h3f8A zf!^{g^9K;xtB{Wv9}6);?!Uc$C~EQH68KU)LGU#&n@@3HX1@El$+MfE|1H-|L~P#1 z5%P)l=P!KAOYa^&SUctEE+M&vOL2|AL@JmkN?;%M1Y`Mq7S8^p2tQySUIaIGhMiXg zlael>nQi`tJ9y!qlwN|yq=@V#1NGZgNZBE)iAtV6#lzt*)3OQ$8P4Z`E>aJJ3KLAf z^A2CGSVe)86lF9?C`%ZY?v#*WCq(0kPYF;*XoLg!ZKp~Rkc4nXHTE0-=+4QbQXs#}k zhZPvqy?e4&Qt`cB6Z;izezUI3ooJ!sZn8oucYEB(XKl&GeW|h{HoGel2;vu0yy?gI#L$nyy}lda6&+tIqY-0p;ge@nA?jp zHO-tm@4`}-$3CA)(!@10kuSpK>I}!fRK!3a-b&PWB_607(WZ(2oV14KwL20>PaZ%e zyUY_NDP7%d(xqfXLWHpY-3CZm$#k_R!NYr}lg@&Es_pPoQZ%7tuZ}ns-sd{ACY~3p znb| zKiWK4hv4Abvg!%T$p%MU)7+wQ4t0}(KADxBzs|xL$IeoP=h0W1*hY&a3b)LjNpXFt zdV1$n0!;4*wP{~De-q4QYqzF!RaYVKlrFiq&vTAJt9lB}eDBo>0^k^h#$n(BNV5vL z$tQ%=_c+NP&*~Tr`R&c`5U3`Kl(0tRGr~4f7F#_w|8&Jm{g-fw$H{{f?GanuA$(t- zrI#N3P^k>}YY3;6lY<5AEl!Ha_c=>Yi#Am?2H`sFr%8`0F{f9(Sf3PmHt`+&QZJEL zeNcZ-j>eN)b)jRtpf|p}HY)QYyzru_QXs7r2Jgi($URUz?<0s*Zqzm9u)q^5hoT8* zpoabXMBoF}NG8|fbnvoC%x)mARV=pX*jEm>2MbE71+RQ005%|I!h@H<2qjoYr4n1X-|RS-DEKO61Zl+JXNTifWfp$dzILw@Z-74aDI6P zNqBY;I!k(jZfQR8kX_5SxCP(lsn55nWZP}YnhZSp+eDh{R2QVi{ z+ahD>zL9kba!>_Rj?gWV;+RV&*6I=TO?|GzCHC_G^y6P(Qc4?kZ+?CQMprzkxRI7T z39swPl7@3RQuagmxq40h;5pzoi811eKjzxl9DQ_(bFgN>*XZbiH0bBNmmK&#f_qW3 zO)Zd{i=aTgmY>>ljqEt_l*-@FXJG}IlLh-ov%Ig+XV%<^TsYa zWu4s_X2DE^csdBbMW&SrY~v7;Q!3cAQ#obr5y1O1;L=NAh4uMCuTiETD~P&P3AOtB z&phtC({Deiu+_Qk)ix&w8Ep%}jn=_mdAffm_`hgu(l`f+@C2nQDL=z9nT7u7t_2R* z(sCnx5)N>!y>=VhK4vRw6Zy31<4J)#>}(l9pIIGFq$P7kSTzLG1Rm1v!@+x(vaZOR zUFND4o@{@Uj0|S#%RM;Jl1acxL1vI;bfDGT42_Xvg`sNhR-(1Ah>-`Co^NGp>aBc*>pw>2nc1iUMT7%&eB_vk{KjC;(3wQL4Lf?${7J3$$F_y)+ zA9P3dTpJQf)u8i7PS=W_<&(6aet8gfYJ+Z)dqPTL3QAB>c5@QL3Y%d2m-$R*+4HEC zLeBUw!0$5VBp#EIL2m_5lH(Vzt1mp*ezSbfJp>S2S)cI$!5b_tsV@_C#TKVmYv>))@ji$Fc*F#J(}$qMXW4J@Ef4wW~V&! zq*KqYFlHo+WlcU!%8s=$mD{O4^CMnIVH%S9z(mc=#M$r*g-8^(xYR>ej~j#Nd{BD3 zEmlN7i%N^3031wJQM6`m{ky;3s-*|KPZ$d~$5skBV>Z}BhvZz<-Ew?ZmTYBs!tnnv82xk~l$VBde} z>%QkiF@b%*y2U7Mo5jwnJKByWoo_pl=a~9C&kD~H49Jc@ED>G~um6xn%&Ps4d1|B; zxw=lPM@b?lOOYLp`iJagx!r|PaWO5eQf460GqizPtuI=!Y523H=;xd-SeX*TKM^ji zCZnYNez)}XEr*y-($M5`j6w~tf-_Ju51)&wc}PuQ6YY&Da@N;<7R%r67@xQTa6TpJ zQuqTY@WBj5Xm`yc(bs^0%HCq>^9?q709sae*VE%#=Q^WiYbK73wA*=H1op9lx)EHbO8^| z=#Kl<8 z0e2hUmgRzDjb8w7wIl4-IuR!hA^qAzR$Xr5jih{UV!N&mzkBmO`^H}KpJ^F`;nEPR zO)7M-Ur2$k6bAGOv*Y)?e8k>yjvTVzvd0=-{Jwzu=CsYx z2RG}LJE(9G=(<$?{&KJV+)}n3Ui6b;h5I^twVXq(!OBmrU$2Y<2I}@|Ut51Ws9u~j z-zRSKWzT!?xjlxzSoCz-81fM{&Jvb3`vND*7DKKNE@5Bo?~NQcGV7iUG-nzs~iI17b`dSm+PA8_%T{o`iAv zr6-|UCHF~C*A#(&#Kh?_qx}&IJFK31x@@sA9u+e_Pl)+ILZnCNS$HJEqwqSe;i-!| z)&I$;K12LTbDj(TB>XB4e*%Y9Gm$=8H4Ll4JqoZBxldiib1hFA)1~7lE6q(Blt+y3 zQ6KW7Aa1%^FI zHUz-0Pm(k-aQ8`Kdj=$dePmXl0P;Rbq0~V9Cn<*x$nhjiG6LTMA904vz|bdYgXLei zJ9ePp6ONx7DE}nA;RC`yNl}78*vAxG62yT~Pqxn_|HV=y^{=RcWPx3eQI$$501+RZ z$!Y)j z?~4ZzVLp%m}<8X)-;4M#~s83=<5_}^DK14W^~{zV4> zzDN9dx%2;8L}CE|jxOd_Y#!zw|8Di?p)TZ<4}=d^rhuZ%U-?;?dz$|@3&1SF4HkzxFs1*H2A-D?{_ z@`Nn`%fEH%#bdF&X@iE93=NCmFS=xJ2&E8+_Aw$wA!xzU0w6DiK$MS)s6UGOFi5Eo zi0V->235d{#sZS#;_%b{l?a9~6m^yiVG#z=Jy!H(+OESD)Y~o88}VP>T+;!`JsBkb zTZEiHwhiwfZNea0ia$erZr3v_4t?O!KnMUp{~p`Z+-NU?JU~4>qQZtHzO9k~0AF4L z0HlARWU3&tA|R$m6fHsgHUcz`a?F3{avOrgi~Pd{9`sb!fO-tZ2S8WTQ+x8*`x!DT z0%Cj2X*w^U$_~oa0p)^D+sF2VvYG`XH_uW0N6k4EB(#d*0RUed000{5|FIzZ25}Vy zF+Nr_TNGMR%nd-Y`6lUqPzd9x{0xN702S!6_d01+Wk6925Qj6Yp4 zL{DAg5+J0xZnmISZBQ%d=Jwd03W7rZ z$BO-tyN2uc#sC!M^&co{sy`@VNHsMO=|9Ff5MhdP6>3%kHKY2A+=%wc3`q)v|L9?| zkFG)#2mn|?;eXHkcm{~L6o~0@Ryj&Rrvxz*5VFPyB;<7dZ`E~BncN?Tl0cw7|K6$c znIY!VAbiLVseiV;dng-B8{3nXLmGtj7zu|shre{XM!0+3^A5c8w$GZ|S91ho;Z*UqAvqNeVm&H+z7n_ z&=MF!o&RmTB>spcg5=8l6C{&1CS4K~mkrJG@9o4=5;7?RqI-07`^S;E3=ona3;fR| zBq0k;0VoeKmIZMO2+}79!hLkU_(wfs{f}DA28arICjYNX ziafLr&-tG|unQ0g;`pyVe`p`f4{u1i{6E`9_a89XDY#K zqIh(u3RS?W#6U@7frS4tbhFz0I~7u^@Xw~BOjHzr1wARyK&LEp zn|*9gt0yc2a;gBLc^uefgKLj_Xwis~{vEZF4}`E60tq0hivOf)qzDa@x)|c8_)j|d ze-w>1kWR&a_H}BPYJ&vmbv+sF-`P$ZARr|W&0}`VN>H=m7Knn ############################################### + +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 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*. + +Recording from the SAS Explore 2022 conference: [A BasePlus Package for SAS](https://communities.sas.com/t5/SAS-Explore-Presentations/A-BasePlus-Package-for-SAS/ta-p/838246 "A BasePlus Package for SAS") (September 27th-29th, 2022). + +--- + +### BASIC EXAMPLES AND USECASES: #################################################### + +**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; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +--- + +Package contains: +1. macro bppipe +2. macro deduplistc +3. macro deduplistp +4. macro deduplists +5. macro deduplistx +6. macro dirsandfiles +7. macro functionexists +8. macro getvars +9. macro intslist +10. macro ldsn +11. macro ldsnm +12. macro lvarnm +13. macro lvarnmlab +14. macro qdeduplistx +15. macro qgetvars +16. macro qzipevalf +17. macro raincloudplot +18. macro repeattxt +19. macro splitdsintoblocks +20. macro splitdsintoparts +21. macro symdelglobal +22. macro unziplibrary +23. macro zipevalf +24. macro ziplibrary +25. format bool +26. format boolz +27. format ceil +28. format floor +29. format int +30. functions arrfill +31. functions arrfillc +32. functions arrmissfill +33. functions arrmissfillc +34. functions arrmisstoleft +35. functions arrmisstoleftc +36. functions arrmisstoright +37. functions arrmisstorightc +38. functions bracketsc +39. functions bracketsn +40. functions catxfc +41. functions catxfi +42. functions catxfj +43. functions catxfn +44. functions deldataset +45. functions semicolonc +46. functions semicolonn +47. format brackets +48. format semicolon +49. proto qsortincbyprocproto +50. functions frommissingtonumberbs +51. functions fromnumbertomissing +52. functions quicksort4notmiss +53. functions quicksorthash +54. functions quicksorthashsddv +55. functions quicksortlight +56. macro filepath +57. macro finddswithvarval +58. macro fmt +59. macro gettitle +60. macro infmt +61. macro letters +62. macro libpath +63. macro minclude +64. macro translate +65. macro tranwrd +66. 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 20230905 * + +The SHA256 hash digest for package BasePlus: +`F*2FE68DD9B3692B9D46EF85B82F63C7E65010BF9E89D670FD1779F4670FA03F31` + +--- +# 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) +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +--- + +## >>> `%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() +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +--- + +## >>> `%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"; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +--- + +## >>> `%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.29.1/baseplus.zip b/hist/1.29.1/baseplus.zip new file mode 100644 index 0000000000000000000000000000000000000000..640e533c13726e878d878bd4f71f3917841505d8 GIT binary patch literal 281263 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 AZcg@ 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�SXxoZ3Kv$9dj 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 gJqloHV`B~Ob-`oEf382(0d-&