From 44406366a8d715e8cb9d94a1505b0f014fb1507a Mon Sep 17 00:00:00 2001 From: "Bart Jablonski (yabwon)" Date: Fri, 30 Sep 2022 18:50:06 +0200 Subject: [PATCH] The SQLinDS package [ver. 2.2] Initial commit of the package --- hist/2.2/sqlinds.zip | Bin 0 -> 13131 bytes sqlinds.md | 175 +++++++++++++++++++++++++++++++++++++++++++ sqlinds.zip | Bin 0 -> 13131 bytes 3 files changed, 175 insertions(+) create mode 100644 hist/2.2/sqlinds.zip create mode 100644 sqlinds.md create mode 100644 sqlinds.zip diff --git a/hist/2.2/sqlinds.zip b/hist/2.2/sqlinds.zip new file mode 100644 index 0000000000000000000000000000000000000000..dbf6341d691feed106185a6891ff8e0208d61417 GIT binary patch literal 13131 zcmaKTW0+m*vh`{!ZQE%ZX)|rxwr$%=+g93k+P1AU)3)*TKIh)&B>Ox2uJvcl=UJnE zyt8W5m{nuSN`Qc(0000;z)c*U5@^QNGdw5&U;+gIzynYKhDHts_GY$@W;WKe4tfqi z0ECaf{`sj;*0T92jN&EolXneC2^i*t?^-tQ)Lcxr$&7GVf2KseVub!jpxjs_6I1Y1 z$lKip=BnNoRP)*j)UVa&-1of)IGoVBjY!~!la&Za%$gBn(4=}4@_~gjZvq1k+-2P>o)DlBd_SCx^xGa>k=jmf6|&VE5lebl-dUcDvC1aB>fnGR`X92 zH*2f9j_Dz%>DwGUekdDu}M(tD{GasyZ9KL>pXR~Ag43Z|`Vh;@-!&F#lt8S$!d1Ba>`%W=|s z&|)aAHk*dw+ARS)jX`5CU<;)&raKuRd=-Y3?cllT*^oeU#xRRrO`P#cX&xx1>PG?@ z|LHN~E?PxswhlXfT%&Y z9M;O*uKwNWYy%7y2K;O={Nj!__QX#;?5V4%c}%fNq}Cv>=G2b&%g#kRa;s)scw_YB zb=HS-ZMn+bxB9U&!JWtaRhrWzGfSM3lJ+9ZdG^jUN$^B2Ef{>8O5=ROxCvF6 zL4jDM2t4jt%Hb9krR3^~s35Q;$$9fr0k&Lq!XWPX7A~;FRq7_4BPX`-$zt@yx`?t- z`Fcn9*dpy$G<;mc?~T={j?q&Ng12F7RFX{iZ(xAFx^Bk>mnD&nAWFL=X|Qb85a-n* z!7T|{hVhi$j zmTAr=A~7~{+MkA%8DR0Zl}K)EG)aK@Qsk2YY}gHIo0)2x<-*AY=wLGu+dmt zUTeo`6*k*t{SwOX>e2!j5kbc85Z8K=(+;NgQ4@rIElpVQbVyf%(l*R8Gbx+eQa+jSP)}bcd!&o6 z8>FIWLzquCW&hw4j*(e>7hnK@@q<%fKKR7a%)rRn!RVj3L`z=BW`!QXN8~4GhO2pD z$?8+{moE(c>PRBd6g$%-!LBe2;p4KMuV=tki(;a2=V$ll(R10_A})tSYb^H{54Wqt zC}&Mz^KP@jkCr@TC$5f!Y`nfOQ_It5+S~MLge$CmuckB)+{~Gn@T`7^-Jhy#YYq5( zH-&bYbRtuuH+&UuDHg``7I{%N;8J* zA=J5w_V812%+7{-E|V8Lr^hN5$l;0ZF!oU8Yd!FC#!wg8i9elS<;P9(O6Lx-r1t9yr$}pP3xUB=71RrkGbl$?{372n4k{D~}L zb3$>TLNk`QFNp$WSgt$iDIiwR?aJ)J0-26lj77otQm8)k?OQ?Z9CS7mxY84D8zPI0 zFNNH!bdoq)N}O{z0(%WX^{xum$`?-#nCK}Ft!o$IA-2)D^3N9uS5{b6Pw0QFzMPD0!t|=;gLj%1Qn+GXhfc!8oZ5fnY>+qHw7dAQ>G%K?$}ms~qKZ z-vK=f?BL$>t(~HIyW8$KXoKV-*(ZOc8Vwz@o6K_FCIIop%HY2B421XrQtiY}J{_~W zigX@RV#5ieJ0#;92FLYAYuvr7#kkuGk2`6Xtm@zKKGhpGG?czqA=TjQGfGx(ne8K8O1-SKgVlrR7Q(#Ju5)V`&S zp5gzT=Rcj}c+#r*Dj!1dIfz?G7@q)R^rxU1{dfV<1cYkRMZ2^a?7BGRu#)<+6LI#N zUz}wD@rPUcb2Af&APb5w3TF}9w~u8gZTQW#0A z-`WV@;)_pqou<;`EkxlzXYwwfia{8wCzL=gn%AF)Xp81Al4llXak8@$_sOJ$k^R28TfjC9HI(G_kX*Its0M zL<*&lsH^W6wiGU~l89(Mr4~FrdoWlPI@qc}J?EPgV;Zc_)<0;Qm$yZbWjb!d3W_dE z8m&gLw5Qu-8d-j|uUtj?8iFcQ$Lyd(JX+%VQiSnukeOw9eQ7Adv4ULD49LXodKHLS zAQr6)mKF71r|_OH!ZN3tL|}i0x#XSCRWD3|7FO_w1;5j2BW3LZFbl%Mc+3$muvWWR z!QNzO9dPxYeqXmL1M?vJr35Q77IU2=Vaz>`l!mCp-bjLUfQ_Mqz8e48QeomH1?jSV z>UgL}e`W?7DWqr`L!8yqk0a<-2JLVe)kurJ5A5ZmkL!i@UV)j^T%Z}KGDGN*bsc@u_x5Psbi6 zmdNS%7Wv=RCBy(86JFV=9)g?BB@)3XX`LOfuBmiB;Dh^lwyw6WfYLa+t)l7D3<1Ko zI~;So8q0e$;l6g_CX^MQ10S_{wL8rrlPj~YjHRO#b5$H*qQDs$8AC$0=L*IO zaE&lVM3D7hxWnng2Qs_1fU|THAHgIhM2OSJ6ak^p$+=DkbU&D zAZ5bnc=Cn#BtJhAO?9CK0q_Pw6dK&Mn2_ARS}Y>9_axCU=-<}*5yxW?aQ`I0eI%xb zm}`&kgVFYptDSfd*IV+M%a6Dm5__`!GE3A4sBS+U3pD`fX03<&&EabczO6rx+fz4F zn{x!pVIc7MCRtksOn1b=nHf>9h@f>A8E6S+);m?B=_W9MS{yT4M9`3fv=v%ZG$e!? zlq`wHpb^fu-N!}U^n#q`%~h7%n111L`H`fKdU~M?&K}Ib5TcsoEi!lznvx_&t<#4- zupqm*LfGV@%3JZ=sG?{Pi6ntXAM3KaFlDkqFGeCEN?yXCVt>fAlWQat9@JXoL>Qd# zntcHwKM<(YrEF3)gd7Ri0RioNSZJaiuF1Te(M6V`c#xBsm1T}yJ*mx3Mh@#^h$QWF zc2A;Tpoz6nwEe1Kz&|cUKb55nKI$ot1ukH`SWB)}yt*78YNc4hPr`bT@h-PM!j(yq zLj$h|yqg3wHc;e00WC&6tk98h=g4R|rw{EB& z1{vply~nS~IJlZAn^IN9gIdjowVn#D(2BiNeW?TkN-ZV(Nw|1#D4jLk3r1CNQCV*2 zf&&KXA{BK#v>g;82{c(9VXE>O;rqPzEoSvhnoJ~J-IkNBxz{nNZ}CM- zC6zy?a=9peN>dIHLr1SG7!^u~+8Y+a4W{)!b`T#(tdJOPvyFU1jF2k++*@kRntmE= zn>zfo>nT3ou%KimD!D(d^eHBg)(B=^0xSU?F5u)xY4OVD>g|lt-l|et{vbgY`TmUf z3*ua2^Mlk=ph@B<&9E>8uD%)(V;Dcud2FhNqWVuFzH(2+ar8-S)Qd`^ObW`Ut7fD6 zEj?<@jtgQ}y~z#}XQ?Do@pGNo)RQj6?M7yJR;-1_b@mFhNBg#c{eBrQhc%pL$j;>L zG1*u_{YfuQYBmd%v~S*U2uR+(IKY(f(&N?6#4#*OMvOQ;l5tFQ=0V7|Yf4~(!PeT^ zD%&jW!#=L>dLmXm9hI*gcq9d^#0sa5?DH5~3iIkad5sUHs1-dt&i&(-FuQ)|(5ur_ zQIprkzn&Ap?fC#H^;bIRsSrwrPdmPh>T@l>qD=BMruJnk2213OFQ>+rnccvK~a z4^0T>L>17O6@7VkRt1)v*scar-n95;-%}+vRHPQyH=O!%qw{B%9tH}$F#FK^r5{rD z(_dX$&)x0+68eSTY-D=q5e7EnFK}rGNLTX+K;EqwfWX3pWr21iRfL719sD8#ct#+^>^yzlyDA!w81mUCnBNxKM{&}#32K94F;j7YSgi*{13>^WQ< zc^$HU<#CylDB;-CVA)5i0L>iY-mn`~g$nvEiJH~lWrrpAL?tW->xcMvL~7c^q(&ol zsM?#-uO>cu4$xT~{GqZz--@SasrM#X#`sr zH1#+zIp|&-N2RZU3KP(wg_5UTO8dR)oRzwlrKID{MD|_I0%kG}^ z={liw9v_jSwmsjxVlgt~oxobhAF`IPS-!9dwwIbf90bkbndV@`_{Xg?M=Xm3}Nk-=P%l$ z_Bz(xftMWKoAbpg0jE7ky#hSm%z~?sYKL2z2!1ZAix;5XqczUo=Fq);ZTeEfQ&!^9 zAX;ehXgbY5M6>E=@%DP7wVvfyW}5!f-vdhkZw3)3bYBOb_Qq?>Y@8@e-~vR(AlBMm z=U($P+|=xDQ|meqL`&^P=_G{Dzu(+4DzIq^m1|dCupVF!mwQZ#NZqmv6?|wS`jplS z%nr6s#kEcyYg$RA!q5y8=*td)pFePW42mg@vye(qQ@3HegxlK)?;-USV{(+Zo2^k; zHXO98h)(4RYa>x9xQ?NAY|eTKFAhg+JJVSWH2~MDRqYZ zFO!ar{gn$N<*6A>aCSY*V*um=H@rZc1LiK^=eQS&mH4+s!3J_;52&_5m_OyN)peufLJZSlDs9~SkQq2h8 z7*+U7k)Cj2r!Jp4?U{9pi0GblNgHJVN+rB2dw`mN=DC|aZpwGw^`VKo`Q)DG1%h*} z+>B?4TpGAk<+YBmKxi{(yaA#(R&;6T;FEZTG;O=OS$9%dZO{3p{WqGs$aYXY`9`DnXk9(qAR!qps1oZy);m}&;Y)tUd>a;#>pSdGP z&g6=_!380go@y6axO5E59kC2YX{*NWc97yu;Rvwc?XKlvsJ-n4REqZ+L3B2fk*b`% zeztU>^@5rLYUe&2f_VjC&gGG!(E;;0raFWWcjrg8K`^)l*68!IM5U4gR+agDO-dS1 z(T14stS_)+@D1(a-QLGdfpv*l`Y4vAzDIIz&6)VVXIl(dlbobc*)SGD4`}D2_5+vE z!jwBHewAl}bMs|Z^4pfe{%>@w_76C4zgR~%c$XG>JBZXsaV*1Lk6zx|XnW<@9PX<+ znaS=y>Dzk0J)5{J4R7)+;zLDSut^N@a`UIym*C>#y}?73zZC{_K+u+Y0KDm<5mn@sIZV?QlNLE>s zb@r63;PyC$Zwh#VGC(x&rMx;J4(wo(jQQx^FZtP|jL7zFIj_S3Jz+=$j$W_Qq&T-# z7;Rewn}s6vU<^nyq)pUm_YvruOJUI=(LOzCP!#x~y++t=nE0yY5=Y@Q%+3 z6f`;p+hXz%tWkr)kSy)Hv9mo!$}`O03hi2sYS+>$-v|=FXBCPM`E1EJ4+>G^3sfhc zoXPc(-6O(0N{3Dxf4RTAyV+-TkrH|E%?GCCMkQS#WD5pqNw}uIJM~Z`l0y+pmk5a+ zEkh9ZCQ3L#3J>ZLur8K;^CDG&6pJh5*_Y=G8oQVOzD!?5+9I?=C({{QDnyLd0_={J zD%ammf9Hl)u4am^7%p4mOFo?_$uXrdysxlsc__2hk9n}MvYM>T%!x3;|D9RVvL$ke zY*n2=hG+XquE1}P&9Fttr|;6Wn2nEsAVO)VJ4-W@-2+3fZ`j{eTEh0!)pv$0z!4#8 z76ZZ%JU8aMz}GT&ykiN68K&_2uyjN+kGn<9aN^>x1Yw*`kur77S;oZLQ+wC*c9%W+2@L9UNd_NclL${(EOX{VgeO=+~~VdFCURb;oY? zz-*k^(N^c4?#|u}mmEr=aH_erI0(Pc=-te25aU4PvcviX7!|7z{2@}lv3jYDf)W;| z{197dPXM`#H6HR3?8C7F%n@~A<=k=50>+3+V5co_p1op1Tw0$F<=RvlK`1)yGoK|# z*KRNT&>479nO&!tDqfI{7*`4xfr~aRa24GfXIG+Rzt4oLLpah2w`NVialp*#HZ>ht zVlR&1w@ii7#usRJuyA8C>02i~NanrbjN@vFExRAo(oXP77S%yrvKLqGSBP~U|C*F5 zRyjB6yL@w3t&6LZh_44b<<+GmU@+1_x1J?cVl8s9az3&j%$h-QUMY~~Ll_CHBc-2c ztH3E$+_2m|Vu>1sRXoq$S?1w9oR!N(sqTM%5dQrD?2S|z2XA`0j>qY6_}moIAWq7c1Vh#gTQfG z{Ft8n4V=m#g?W{Xn3e<`u-Ab9GWSiWNA1fWkJHN@;+mF?)Oqp^* z1ULY2g!AuVlc|xV?LU!IgPN7XDjULER_aR#?j-+-BrP57sqL^G2x;y(DzHeiS*KfM zg)hV)W0EH`uJ=m?31?$~m;ln;&j+FBJQI~RDzl%DB-O>Bm2YfpTrAHfTON`3-xJNj z?s`&s53h_bIB%|Ev>wD?5I!^ePdVeAa02i6OmyV%T6g)7=;Oh5S*F1n?#22dHe+m1 z)0ZqB`-9^dAh`wlq4RC-vqrK*^$+5q?D-G^g;`3k(ds@=@jTu~EVGVVA5^bCE^*VN zKWF#7WC?RHwc2iTBQ*agZXD%P=|s=mIS;f;|ANcGf@Vf%Nw@VNg7Rv@`7`0wzw=Zh z8~mgj#LIY-XL{?w+T6pNB0~F8F8XeN_emH|O1JF*8IGs!ff)tFpLofDi8TyFq?0%! z7>8lb%b4Jxp7iTBbY68Nc}@n2W8v4U=L}jxedcH!qEhj&x%-6g>T*?>a4^q0883WF z@#((eKo4c6?(DbiU6%%5u6eobN-4G*BWR}$S($QJiW7?}mHWu5{g>`5EbG%*>QP;h zb-AttGRKS91hm>j;NOLfWti<*db{jQA7VD+bzzMGv_WiJS@2I=S7S@6{QaLAU_P@+ zF@Kis&xIx)55 zbnDKYn~M_V!VqVukq9WQc5v0*bQ}fF3VR6GD^wnvcK8|F3ph6jjdPS5hyH4GElfki z4@E&~MRW%mV{wb@ z2yLe4!R)2T3}z+(Qh6xf4V+aubO?lBF>(AnY$!?gG8`Qm%)Kxp-y#PLezm&xFcV@M zZgUREzA$%wREI)(=P7E<;OW@?SMjcu}=p}aiefux5Yhj>SY3=etsG6>Aj(FYsz?H z25-(TCCc9((i|SX^sCi_Af^^}@s(A<0x{YWW9<)ba)I`BVW|;)p(45Zjzd$i>h1t; z(krLa6r5kT{n%x`tH#WC-E0h~G!BonOAyE7sFP^A77{gPIz&EdOOcWbBzH9?1p1}_ zv&VM02X?B>l<=CE!fwaW>-cej6A9s_vM+@0{Nuqbm7LUTR8}c;0U%AyPr5 zxOAe*L@n0Jy=G+*PNQ5+m?ODCU&^}LM<@!)r}qwON|u@Q)r3ptbON4q==1E)LcfaW z3G8%P^++)Xa9^@g;LilDLt1T=s5a004IG0N`%{3w=@f~@6{?Usw#kz8vY;iL?kl^y>Q3(yVy(qII$ zUq3%W5}Igfhx+WDA6I)d(TTn2qqPvt3bl}6lneFM@uI^wbS(?CJ~UKlV07naW5laut!TW-%{wA)#4c)3{ByBJZM48wQKU%0lhunUu66SImh3vs}ODdv7YA}=eA_Pp!eHS_U43%p;p zlUKmqw)Dtqw(Vl=Du~6aYB;jzCR(tnohxhlp7;**ACdi66Z;ybBQ^OkiwXG<+Grml zTZf*WUdPf*-&)Vgh}O`-!OrrZT3UyKp2aFX%8T`d4_gMRe*Bmf#IdQSV5>Vd^JrsV zbxf2#Rahyp(YJP5ou}1e6HYxU*Z{b@E?sW5`!neSdPrbT$pIaDiI74VFhgvm^7YsF%RUf=neGFMOY%Z=!3))l#L>;C!h)aRPzg$%`U9n$Q{Cp>0 z!hQ+psGL2&7o!n!#9uYER|rXZVrTl~l1Dkpc}ym2U&Cloa)MHIvH$Y(G{}p$Zjyat z9)D^A)p|oFUN6nDqu1&tOW}fGzN3Q?US`B5cY<2+SO~_*&Js7|$qVms|IrZM+@EEE z`O%kqVYbGnEI0`kJXZ=SgEcj0U#?N4^leyHNuSR<#1A%>)v4azT2;=xI;cEt;_aUH zYh41>6w5LzP?H^IjB#oI6WE_=u~N>-+ww7PGE3_4bN2KF}pP6{0}YilF> ze@YE6MY+FRCEgznwTu!zgs7a_5HlE|JgV7PXe~c+FBofkP>TVm=(;4I&bmxc*|t5x zn)4sm>-X#IAd}Zy2RCo%kr<+lgXzi{2N2T-;4@8c3$Dz%2F)BkX;H?#*T(Ys-y~(VBLYLA{21DC^bD9% zaaIL{(~4(oSQj{{{h($pB@N&{K@Y=&h3Ajsg9LTsM_0v)PoY$!4jS(`4d&xstf`Xh zawrAv!fnZ0@m-+z&rLT)CSw#nbC0Cht}6O9rIl}$y)T1&Hdwke3>kqC%-=lMU@cH8 z+;p@vnP1ex6LK}L@-z)iy`Z78j(-{$SaJ_vCFn<={k0238aR< z<)Nx6k=TW;za|oNI$ZG@Qk;R=0-0j?^4-~h3#D|xdeGgyqYFjTKPpgIwr5qq>$#|4 zVA@T63@^KA+tTif7hK4j+g9lsc1ni4TpjbKLDM~y^TS>LIoLT-FpAytJ0!9}PGhZf z=17wXD85HXL(|0JE@v_kf2OhVSgYEGLqm&~v@Y-j+2le>DRUlrvU)MWOrWNTk!mPq z!K?fMa&NTo7)AEEYH*j=O$Fj+$#&X4Rif!Z9#>{1yd~leI@&9EDpm?NeAn%8Ma3^! z+teAcC%Q zA%wAvTyc*5B{tMW(=NN3HWSbCc#?K;0_IJL{To`V-IS3wgqnc~J1bf`CZscp-eu4Y zdYR_tUV?>6=+Z;>R{8>iBwVSI#2Pybg~i{hzx}$Zsl3htQ&OASXG9Y66q~PRzR`rY zus-K_+;$WJPJOy}RXMv`dvTk1qcVJk`LhUA-U$36KmdUJ4{zpQc8U*f{NEz@KX|c0 z`QL-k=sq6|M7d?O#xMsRI7lR`jK)?za&VUEUvso~NLBhCnd>Y#AI!+v7Tm5VHp@Ak zh_I5GYGRz7x?FS42ImP$SA;MwQpdivaGz-mk`|Rui~$#N(SYmKT76O#8?SnS_X!*X z1A$yrT1F!*!6ns#q++{^OpwjpjRkvrfUEG3n5>+ya{!K&B0_;cZQu(MN{G1pO|8X8A=YcAg|EmXZm!?0Xq#+T30xXZJr#ck2@J$ERkQrdV%6xnoZbOT zT-6LclnOA88L|VVr0xWp62K4OD1W#rH&R*ozVOSQs5vyL0S@hD0rw;g+kum$9_l@k zI5^epQpK-Mx&u3_ETfF(F23bZqeDnEVMi?3KE>jRwFl3&loGTFWMMZKa6fX8I{Fo# zNGVFYc)Jb6k(JkmcDl};-)#fV?6wkzkMNHH1dS7*pF#7EhdmwVpVel(omj9pwbd|8 z>!t_XYrw(iOtrt$Y)u%dSrYC;;jUEmo|Ku|sA~Yn$JS&}NHQ6u&zY6fOZnEBhb#LQ;&2Pc9h@%K5Rl3F<)(`bF{OQ9gx4+*7doeJ-Au z3of0juYpTXZf)4zURyZ!qvmJ99_Gce&dC$o_S^t)KcN;D;7x@3GM0^qi=4Zqy_ts>{OL&{;qy zwxSEF%0mj)p$TlVJk;^{TR8|n#0vWM?(0i$Zz(J-C`(BWyN-e?G}5L#sm{P_Cy>=1 z^g(jr{9!(%IjDpCd3`yGB<+Eo3{&}W`I*WZ=AL{tFg98uo?)B+*u!`X!C41g)w|-> zOY;+l7l$)m{3o>dm~6D|H3Q^B{%|JL@BVtA1-B}L2cye6 zcto{7snz@4+}>#y3d^W)3Pq<}{w!xlm#S+0kDey|(bLfXUCxX;#!l7-|1w+upIRqT zas6L5$(V%q?XPV>Xi)X*qvS#Y8ih*Vm%zC!(>~Kj16hQ@HqOQ*zn*e(eg+GxSm7qQ z^Lp{TZ>wtyM0jxYcn2%0n>GY*K6Mtu;m66$?6zeK6f!Q-IoCJ^D;FOwm#u{l=mvnJ zkkC9x5i=PllX(~zupQ12W@N^)g%b;$73`_c;7qO$0`lD^m{fTJ)@@bWp&-x_%n}Et zKP5JtCt-o0IFl|;b}0sbt_aWXV!MjdRg!&1+INw+KeZJS&E+A8{+v;ox5e1YtSk?D%~*dKM;1=VcAI()!}kwEJ7Gj7`_e&+ni?B}}3-yts$ zvl=0~@uSFYkbu10;fm3&^aNRqAf2$jQJ9s+ey(4-;h;Q#NbU zpkJ-ukH!f)MJlkb4`mAyBmOSFX-)AgwCEYRlg2@Z4w@r=-2S$o04{{1#d+@j_BIX0 zX4A{w-gW^5U{AJa^D_tO?)N!RteU<)s$D$RYh??O>BiCj{wb49c%A#YE0M9QlVDv} z(50}pT?zK9?bIil)&vLM{fhl=8q-z<2r+-|E-fc`I5_Tv3A<7OfT zUVWv#RRe|t;d@8Ca8z`uiKKV<%Imf*hw|8!#h4g~#hRs9!V=HCPS=|KEFfD|O) zzxWaVj{noZ^*dhr!_)Y``^Ued{#+>kj=DkmK>fB}{yXx|9p~@J^pAV-pN;3=aewY6 ze#c>BejL<)HWj}E|No)k@4z-(0N{T|h<``@`IPoM%9jN256^6WkMXCZ|2; ############################################### + +The **SQLinDS** package is an implementation of +the *macro-function-sandwich* concept introduced in the +*"Use the Full Power of SAS in Your Function-Style Macros"*, +the article by *Mike Rhoads (Westat, Rockville)*. + +Copy of the article is available at: +[https://support.sas.com/resources/papers/proceedings12/004-2012.pdf](https://support.sas.com/resources/papers/proceedings12/004-2012.pdf) + +Package provides ability to *execute* SQL queries inside a data step, e.g. +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + data class; + set %SQL(select * from sashelp.class); + run; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +See the help for the `%SQL()` macro to find more examples. + +### Content ################################################################### + +SQLinDS package contains the following components: + +1. `%SQL()` macro - the main package macro available for the User +2. `dsSQL()` function (internal) +3. `%dsSQL_inner()` macro (internal) +4. Library `DSSQL` (created as a subdirectory of the `WORK` library) + +--- + +Package contains: +1. libname dssql +2. macro dssql_inner +3. macro sql +4. function dssql + +Required SAS Components: + *Base SAS Software* + +*SAS package generated by generatePackage, version 20220830* + +The SHA256 hash digest for package SQLinDS: +`96D0EFE02DF1AE0D7D875A10CAF7EF63CDEF85DD0CF9418934BEFAF0C067D453` + +--- +# Content description ############################################################################################ + + +## >>> library `dsSQL`: <<< ######################## + +The `dsSQL` library stores temporary views +generated during the `%SQL()` macro execution. + +If possible a subdirectory of the `WORK` location is created, like: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas +LIBNAME dsSQL BASE "%sysfunc(pathname(WORK))/dsSQLtmp"; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +if not possible, then redirects to the `WORK` location, like: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas +LIBNAME dsSQL BASE "%sysfunc(pathname(WORK))"; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +--- + + + +## >>> `%dsSQL_Inner()` macro: <<< ############# + +**Internal** macro called by `dsSQL()` function. +The macro generates a uniquely named SQL view on the fly +which is then stored in the `dsSQL` library. + +Recommended for *SAS 9.3* and higher. + +--- + + + +## >>> `%SQL()` macro: <<< ########################### + +The **main** macro which allows to use +SQL queries in the data step. + +Recommended for *SAS 9.3* and higher. + +Based on the article *"Use the Full Power of SAS in Your Function-Style Macros"* +by *Mike Rhoads* (Westat, Rockville), available at: +[https://support.sas.com/resources/papers/proceedings12/004-2012.pdf](https://support.sas.com/resources/papers/proceedings12/004-2012.pdf) + +### SYNTAX: ################################################################### +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas +%sql() +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +The sql query code is limited to *32000* bytes. + +### EXAMPLES: ################################################################# + +**EXAMPLE 1**: simple SQL query +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas +data class_subset; + set %SQL(select name, sex, height from sashelp.class where age > 12); +run; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +**EXAMPLE 2**: query with dataset options +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas +data renamed; + set %SQL(select * from sashelp.class where sex = "F")(rename = (age=age2)); +run; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +**EXAMPLE 3**: dictionaries in the data step +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas +data dictionary; + set %SQL(select * from dictionary.macros); +run; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +--- + + + +## >>> `dsSQL()` function: <<< #################### + +**Internal** function called by the `%SQL()` macro. +The function pass a query code from the `%SQL()` +macro to the `%dsSQL_Inner()` internal macro. + +Recommended for *SAS 9.3* and higher. + +### SYNTAX: ################################################################### +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas +dsSQL(unique_index_2, query) +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +**Arguments description**: + +1. `unique_index_2` - *Numeric*, internal variable, a unique index for views. + +2. `query` - *Character*, internal variable, contains query text. + +--- + +## License #################################################################### + +Copyright (c) 2012 Mike Rhoads + +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/sqlinds.zip b/sqlinds.zip new file mode 100644 index 0000000000000000000000000000000000000000..dbf6341d691feed106185a6891ff8e0208d61417 GIT binary patch literal 13131 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