637 Views
March 26, 24
スライド概要
[第9回大阪SAS勉強会] 坂尻大樹
SAS言語を中心として,解析業務担当者・プログラマなのコミュニティを活性化したいです
フラグ変数 EPS 坂尻 大樹 1
--フラグ変数はどう持つのがお得なのか?-・[数値] or [文字] ・[1,0] or [ 1,missing ] ・[compress=yes(char)] or [compress=binary] YES | CHAR RLE (ランレングスエンコーディング)を使用してSPD Engineデータセット内のデータをブ ロック単位で圧縮するように指定します。RLEでは、反復実行される同じ文字(空白を含む)を2 バイトまたは3バイトの表現に削減することでデータが圧縮されます。 BINARY RDC (ロスデータ圧縮)を使用してSPD Engineデータセット内のデータをブロック単位で圧縮 するように指定します。RDCでは、RLEとスライディングウィンドウ圧縮を組み合わせて反復 バイトパターンをより効果的に表現することでファイルが圧縮されます。 2
--フラグ変数はどう持つのがお得なのか?-COMPRESS= yes(char)を指定すると、単一バイトの反復が存在する場合に適切な圧縮結果が もたらされる data mylib.CharRepeats(compress=char); length ca $ 200; do i=1 to 100000; ca='aaaaaaaaaaaaaaaaaaaaaa'; cb='bbbbbbbbbbbbbbbbbbbbbb'; cc='cccccccccccccccccccccc'; output; end; run; NOTE:Compressing data set MYLIB.CHARREPEATS decreased size by 88.55 percent.Compressed is 45 pages; un-compressed would require 393 pages. 3
--フラグ変数はどう持つのがお得なのか?-COMPRESS=BINARYを指定すると、バイト列の反復が存在する場合に適切な圧縮結果がもた らされる。 また、単一バイトの反復よりも、バイト列の反復を見つける方が労力を要する。 data mylib.StringRepeats(compress=binary); length cabcd $ 200; do i=1 to 1000000; cabcd='abcdabcdabcdabcdabcdabcdabcdabcd'; cefgh='efghefghefghefghefghefghefghefgh'; cijkl='ijklijklijklijklijklijklijklijkl'; output; end; run; NOTE:Compressing data set MYLIB.STRINGREPEATS decreased size by 70.27 percent.Compressed is 1239 pages; un-compressed would require 4167 pages. 4
--サンプルでの検討1-・症例番号(数値) ・日付 ・50個のフラグ変数(あたり20%:1) 症例番号 日付 1 2019-07-20 2 2019-10-21 … 9999-99-99 1000000 2019-11-22 フラグ1 フラグ … フラグ50 1 1 1 1 1 5
--サンプルでの検討2-1:[数値 8.] [1,missing] [no]:398MB [yes]:252MB [binary]: 111MB 2:[数値 8.] [1,0] [no]:398MB [yes]:68MB [binary]:68MB 3:[文字 $10.] [1,missing] [no]:500MB [yes]:60MB [binary]:65MB 4:[文字 $10.] [1,0] [no]:500MB [yes]:165MB [binary]:104MB 5:[文字 $1.] [1,missing] [no]:69MB [yes]:46MB [binary]:74MB 6:[文字 $1.] [1,0] [no]:69MB [yes]:52MB [binary]:74MB 6
--結果-・文字型設定のほうがデータサイズ的には節約できた。 ・数値の場合は「0」、文字の場合は「missing」 の方が圧縮効率が良 かった。 ・Compress = yes は、今回設定の全パターンでデータサイズを圧縮 した。 ・Compress = binary は多数の数値フラグ設定時に強かった。 ・Compress = binary は、Lengthに余裕のない文字フラグ設定時に は圧縮に失敗した。 7
--まとめ-・数値の場合は「0」で埋める、文字の場合は「missing」とすること でその後の圧縮効率が良かった(非圧縮時のサイズは一緒)。 ・Option compress = yes をおまじない的に使うのはあながち間違い ではなさそう ・数値フラグを多数設定する(されている)場合には、 compress = binary を検討(データサイズが小さくなる可能性(1/4))。 8
ありがとうございました 9