216 Views
October 21, 24
スライド概要
[第10回大阪sas勉強会]
SAS言語を中心として,解析業務担当者・プログラマなのコミュニティを活性化したいです
第10回大阪SAS勉強会 2024.10.18(金) 小さく始める2進数 ~今どき聞かない2進数をあえて学ぶ~ ノーベルファーマ株式会社 研究開発本部 データサイエンス部 森田 祐介 1
要旨 • コンピュータは0と1で情報処理するため、2進数との親和性が高い • 2進数を知ることで、SASのことを、より理解できるかもしれない 2
発表内容 1. 導入 2. 2進数とは 3. SASと2進数 4. まとめ 3
導入:いまさら2進数? • 2進数とは、0と1を使って数を表す方法 • コンピュータは内部で0と1で情報を扱っているため、2進数との親和性が高い • OSや開発環境によって、ハードウエアが高度に抽象化され、 また、メモリも潤沢になった現在では、 2進数をプログラミングで意識する機会は少なくなっている • しかし、SASプログラミングでも2進数が顔をのぞかせる場面があり、 この機会に2進数とその登場シーンを紹介したい 4
2進数とは:0と1だけで情報を表現 • 数を数えてみる 10進数 2進数 1 1 2 10 3 11 4 100 0と1しか使えないので 桁数を増やすしかない 5
2進数とは:0と1だけで情報を表現 10進数:0~9が使える 2進数:0と1が使える 16進数:0~Fが使える 1 0001 1 2 0010 2 3 0011 3 4 0100 4 5 0101 5 6 0110 6 7 0111 7 8 1000 8 9 1001 9 10 1010 A 11 1011 B 12 1100 C 13 1101 D 14 1110 E 15 1111 F しれっと導入 4桁の2進数を 1文字で表すのに便利 A~Fも使えるので 桁が繰り上がらない 6
2進数とは:情報(0と1)の量 • 2進数で表現したデータの単位 0 0 0 0 1 0 0 0 1バイト=8ビット 1Kバイト=1024バイト 1Mバイト=1024×1024バイト=1024Kバイト 1Gバイト=1024×1024×1024バイト=1024Mバイト 1ビット: 2進数の一桁 7
SASと2進数:数値データの取扱い • 倍精度浮動小数点(8バイト=64ビット)で1つの数値を格納 指数部(11bit) 仮数部(52bit) 符号部(1bit) 0:正、1:負 -1023 (2進数) 1.625=(-1)0×1.101(2進数)×201111111111 (=1023) data double_byte; num = 1.625; length binary sign exponent fraction $64; binary = put(num, binary64.);*64bitの2進数に変換; sign = substr(binary,1,1); *符号部の切出し; exponent = substr(binary,2, 11);*指数部の切出し; fraction = substr(binary,13, 52);*仮数部の切出し; run; SAS Help Center: Numerical Accuracy in SAS Software 8
SASと2進数:2進数⇔10進数⇔16進数 • フォーマットを用いて簡単に変換できる ※1つ前のスライドは SASが内部で数値をどう格納するかの話 このスライドは数値をどう見せるかの話 *****************************************; *2進数⇔10進数⇔16進数への変換; *****************************************; data bin2dec2hex; do i = 1 to 15; *10進数(数値)から2進数(文字)へ; binary = put(i, binary4.); *2進数(文字)から10進数(数値)へ; decimal = input(binary, binary4.); *10進数(数値)から16進数(文字)へ; hex = put(decimal, hex1.); *16進数(文字)から10進数(数値)へ; decimal2 = input(hex, hex1.); output; end; run; 9
SASと2進数:色の指定 ※赤、緑、青の各成分を 2桁の16進数(=8bitの2進数=0~255)で指定 proc sgplot data=sashelp.class; styleattrs datasymbols = (circlefilled trianglefilled) datacontrastcolors = (cx0000FF cxFF0000); scatter x=height y=weight / group=sex; run; 色を自在に操る(HSVカラーコードのすすめ) 10
SASと2進数:COMPAREプロシジャ • COMPAREの結果がマクロ変数SYSINFOに自動的に格納 SYSINFOのbit構成 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 1 0 0 0 0 0 ①変数ラベルだけに不一致があるとき 0 0 0 0 0 0 0 0 0 0 ②変数ラベル・FORMAT・Lengthに不一致があるとき 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 つまり、SYSINFOの値を調べれば どのような不一致があったのかを知ることができる! データステップ100万回 SAS新手一生: Compareプロシジャの結果が一致か不一致 か、何が不一致かをマクロ変数で取得する話 (sas-tumesas.blogspot.com) 11
まとめ • 今どき聞かない2進数(と16進数)をおさらいした • 本発表の内容を知らなくても、おそらく不利益はありません • しかし、2進数の知識をもつことで SASの気持ちになって考えることができたり SASプログラミングでのAHA体験が増えるかもしれない 12