%PDF-1.6
%
115 0 obj
<>
endobj
130 0 obj
<>/Font<>>>/Fields[]>>
endobj
147 0 obj
<>stream
11.0
8.5
31
2019-04-24T14:00:13.222-04:00
Microsoft® Office Word 2007
Paul Dorfman, Lessia Shajenko
8ad889b92f9c1e265af8687edf956650d28bf788
383482
"bitmap, search, lookup, key range, memory footprint, integer key, key range, SAS A-P-P functions, SAS bitwise functions, array, mantissa bits, exponent bits, "
Microsoft® Office Word 2007
<p>Bitmap lookup was introduced into SAS® programming in 2000. Yet, its virtues started to gradually fade from the minds of SAS programmers after the advent of the SAS hash object a few years later. One reason is that the hash object requires no custom coding. The other is that its table lookup functionality seems to supplant the utility of bitmapping. However, this impression is false. In its niche of searching against a massive number of limited-range integer keys, a properly constructed and accessed bitmap is both much faster and incurs much smaller memory footprint. In this paper, we show programming methods of allocating, mapping, and searching bitmaps based on both character and numeric arrays, and discuss their relative pros and cons in terms of lookup speed and memory usage.</p>
<p>Paul Dorfman, Dorfman Consulting</p>
<p style="font-family: Arial,Helvetica,sans-serif; font-size: 90%; line-height: 300%; margin: -3em 0em 2em 0em;"><a href="https://github.com/sascommunities/sas-global-forum-2019">Access sample code</a></p>
Session 3101
en
jeff
<p>Bitmap lookup was introduced into SAS® programming in 2000. Yet, its virtues started to gradually fade from the minds of SAS programmers after the advent of the SAS hash object a few years later. One reason is that the hash object requires no custom coding. The other is that its table lookup functionality seems to supplant the utility of bitmapping. However, this impression is false. In its niche of searching against a massive number of limited-range integer keys, a properly constructed and accessed bitmap is both much faster and incurs much smaller memory footprint. In this paper, we show programming methods of allocating, mapping, and searching bitmaps based on both character and numeric arrays, and discuss their relative pros and cons in terms of lookup speed and memory usage.<br>
</p>
<p><a href="https://github.com/sascommunities/sas-global-forum-2019">Access sample code files now</a></p>
<p>Paul Dorfman, Dorfman Consulting</p>
Microsoft® Office Word 2007
2019-04-12T09:35:56.000-04:00
2019-04-12T09:35:56.000-04:00
2019-04-09T22:07:36.000-04:00
application/pdf
bitmap, search, lookup, key range, memory footprint, integer key, key range, SAS A-P-P functions, SAS bitwise functions, array, mantissa bits, exponent bits,
2019-04-24T14:00:13.249-04:00
Paul Dorfman, Lessia Shajenko
Bitmap lookup was introduced into SAS® programming in 2000. Yet, its virtues started to gradually fade from the minds of SAS programmers after the advent of the SAS hash object a few years later. One reason is that the hash object requires no custom coding. The other is that its table lookup functionality seems to supplant the utility of bitmapping. However, this impression is false. In its niche of searching against a massive number of limited-range integer keys, a properly constructed and accessed bitmap is both much faster and incurs much smaller memory footprint. In this paper, we show programming methods of allocating, mapping, and searching bitmaps based on both character and numeric arrays, and discuss their relative pros and cons in terms of lookup speed and memory usage.
Access sample code files now
Paul Dorfman, Dorfman Consulting
Re-Mapping a Bitmap
uuid:3506ba6c-5254-4605-9da9-153bd281b622
uuid:24c7270a-d221-4acc-853f-a5d9fc7f45dc
thirdparty
support:customer-roles/programmer
support:sgf-papers/topic/programming/general-programming
support:sgf-papers
support:skill-level/intermediate
software:BASE
year:2019
event-type:180/session-type/breakout
endstream
endobj
112 0 obj
<>
endobj
116 0 obj
<>/MediaBox[0 0 612 792]/Parent 112 0 R/Resources<>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI]>>/Rotate 0/Tabs/S/Type/Page>>
endobj
1 0 obj
<>/MediaBox[0 0 612 792]/Parent 112 0 R/Resources<>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI]>>/Rotate 0/Tabs/S/Type/Page>>
endobj
3 0 obj
<>/MediaBox[0 0 612 792]/Parent 112 0 R/Resources<>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI]>>/Rotate 0/Tabs/S/Type/Page>>
endobj
5 0 obj
<>/MediaBox[0 0 612 792]/Parent 112 0 R/Resources<>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI]>>/Rotate 0/Tabs/S/Type/Page>>
endobj
7 0 obj
<>/MediaBox[0 0 612 792]/Parent 112 0 R/Resources<>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI]>>/Rotate 0/Tabs/S/Type/Page>>
endobj
9 0 obj
<>/MediaBox[0 0 612 792]/Parent 112 0 R/Resources<>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI]>>/Rotate 0/Tabs/S/Type/Page>>
endobj
11 0 obj
<>/MediaBox[0 0 612 792]/Parent 112 0 R/Resources<>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI]>>/Rotate 0/Tabs/S/Type/Page>>
endobj
13 0 obj
<>/MediaBox[0 0 612 792]/Parent 112 0 R/Resources<>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI]>>/Rotate 0/Tabs/S/Type/Page>>
endobj
15 0 obj
<>/MediaBox[0 0 612 792]/Parent 112 0 R/Resources<>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI]>>/Rotate 0/Tabs/S/Type/Page>>
endobj
17 0 obj
<>/MediaBox[0 0 612 792]/Parent 112 0 R/Resources<>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI]>>/Rotate 0/Tabs/S/Type/Page>>
endobj
19 0 obj
<>/MediaBox[0 0 612 792]/Parent 112 0 R/Resources<>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI]>>/Rotate 0/Tabs/S/Type/Page>>
endobj
21 0 obj
<>/MediaBox[0 0 612 792]/Parent 112 0 R/Resources<>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI]>>/Rotate 0/Tabs/S/Type/Page>>
endobj
23 0 obj
<>/MediaBox[0 0 612 792]/Parent 112 0 R/Resources<>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI]>>/Rotate 0/Tabs/S/Type/Page>>
endobj
25 0 obj
<>/MediaBox[0 0 612 792]/Parent 112 0 R/Resources<>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI]>>/Rotate 0/Tabs/S/Type/Page>>
endobj
27 0 obj
<>/MediaBox[0 0 612 792]/Parent 112 0 R/Resources<>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI]>>/Rotate 0/Tabs/S/Type/Page>>
endobj
29 0 obj
<>/MediaBox[0 0 612 792]/Parent 112 0 R/Resources<>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI]>>/Rotate 0/Tabs/S/Type/Page>>
endobj
31 0 obj
<>/MediaBox[0 0 612 792]/Parent 112 0 R/Resources<>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI]>>/Rotate 0/Tabs/S/Type/Page>>
endobj
33 0 obj
<>/MediaBox[0 0 612 792]/Parent 112 0 R/Resources<>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI]>>/Rotate 0/Tabs/S/Type/Page>>
endobj
35 0 obj
<>/MediaBox[0 0 612 792]/Parent 112 0 R/Resources<>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI]>>/Rotate 0/Tabs/S/Type/Page>>
endobj
37 0 obj
<>/MediaBox[0 0 612 792]/Parent 112 0 R/Resources<>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI]>>/Rotate 0/Tabs/S/Type/Page>>
endobj
39 0 obj
<>/MediaBox[0 0 612 792]/Parent 112 0 R/Resources<>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI]>>/Rotate 0/Tabs/S/Type/Page>>
endobj
41 0 obj
<>/MediaBox[0 0 612 792]/Parent 112 0 R/Resources<>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI]>>/Rotate 0/Tabs/S/Type/Page>>
endobj
43 0 obj
<>/MediaBox[0 0 612 792]/Parent 112 0 R/Resources<>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI]>>/Rotate 0/Tabs/S/Type/Page>>
endobj
45 0 obj
<>/MediaBox[0 0 612 792]/Parent 112 0 R/Resources<>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI]>>/Rotate 0/Tabs/S/Type/Page>>
endobj
47 0 obj
<>/MediaBox[0 0 612 792]/Parent 112 0 R/Resources<>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI]>>/Rotate 0/Tabs/S/Type/Page>>
endobj
49 0 obj
<>/MediaBox[0 0 612 792]/Parent 112 0 R/Resources<>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI]>>/Rotate 0/Tabs/S/Type/Page>>
endobj
51 0 obj
<>/MediaBox[0 0 612 792]/Parent 112 0 R/Resources<>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI]>>/Rotate 0/Tabs/S/Type/Page>>
endobj
54 0 obj
<>/MediaBox[0 0 612 792]/Parent 112 0 R/Resources<>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI]>>/Rotate 0/Tabs/S/Type/Page>>
endobj
56 0 obj
<>/MediaBox[0 0 612 792]/Parent 112 0 R/Resources<>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI]>>/Rotate 0/Tabs/S/Type/Page>>
endobj
58 0 obj
<>/MediaBox[0 0 612 792]/Parent 112 0 R/Resources<>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI]>>/Rotate 0/Tabs/S/Type/Page>>
endobj
60 0 obj
<>/MediaBox[0 0 612 792]/Parent 112 0 R/Resources<>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI]>>/Rotate 0/Tabs/S/Type/Page>>
endobj
62 0 obj
<>/MediaBox[0 0 612 792]/Parent 112 0 R/Resources<>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI]>>/Rotate 0/Tabs/S/Type/Page>>
endobj
64 0 obj
<>/MediaBox[0 0 612 792]/Parent 112 0 R/Resources<>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI]>>/Rotate 0/Tabs/S/Type/Page>>
endobj
65 0 obj
<>stream
xZo݀?z68#z8lQ[ϒp$dkr8zEpofloKdLɅdFL6lo v͛-& ֝_[G e̗;q[{牷zi)ɲru>ze¿&RxJM:]'l;Y4͟' S5}<6fN5UEdާ/[cJ1$7u"Wdγ%AE-]bAMt댨xR+hnL"^wF.jA>]l_ehf_NjpiXuq<4+YD6h,?=§o䥰pRkq"͂vԤ1OgMծ~kRUo*?vc 4^0,"Vn=!ǎ}*a`P9&.Mզդҙ.!mFpfy!wR;6
Y 8s;VkOe+}+G
11+gM[h|oFR\C =ꏕ^JD
3S
B;~7|Bhx){BjM{"4WsrX85.oݗz~}8:>t=;舞CtuZ
3u6z1:1^B&Ť=;])":cqdUlpJ˪D!zRPu7B_oM"Ѡ
W$b'C>܄Tr}YX-yc?wq>}kZVEFs2d
g3g*p8k}Q&)aPcvZp.%F+.EgЙE^71prK_.m)ǐXIPh6m%iڅ">AxJw9-Pȫvp;a{g
gsCCO(e:y'+5iKq3-.uLWCkloKϏDo#]907tmx9{Ekf2
`KR{\llmτ8Wt>K&QOd!b!\ӆc2