2007年8月28日火曜日

プログラムで使われる英語の意味を調べてみよう!PART2



前回に続いて、同じような趣旨の記事です。

今回は省略語的なものに注目してみます。


■INT関数

これは頻繁に使用する関数ですね。

引数の小数部分を切り捨てて、整数値を返します。
(例)

X = INT(1.5) ; → 1

X = INT(-2.3) ; → -2

では、このINT関数の"INT"とは何の省略語でしょうか?

これはお分かりですね?

SAS以外のデータ型に厳格な言語でも使うキーワードです。

JAVAやC言語では同じく省略形で、VBではフルスペルで記述します。

正解は「integer」です。

意味は「整数」です。


■ABS関数

これも割と使用する機会があるでしょうか。

いわゆる"絶対値"を返す関数です。
(例)

X = ABS(1.5) ; → 1.5

X = ABS(-2.3) ; → 2.3

では、このABS関数の"ABS"とは何の省略語でしょうか?

SASとは全く関係ないですが、CSSでも使われます。

position : absolute ;

位置は相対指定でなく絶対指定でという意味です。

正解は「absolute」です。

absolute valueで絶対値という意味になります。

海外の映画やドラマで、

「Absolutely.」という台詞がよく使われますね。

「そのとおりだ」「まったくだ」というように同意を示す言い回しです。


■DLM=オプション

INFILEステートメントやFILEステートメントで、外部ファイルの区切り文字を指定するオプションです。
(例)

infile "入力するファイル名" dlm="09"x ;

この例は、タブ区切りの外部ファイルを読み込む場合です。

では、この"DLM"とは何の省略語でしょうか?

これは当然お分かりですね?

正解は「delimiter」です。

意味は「区切り文字」です。

ちなみに、省略形を使わないで、
infile "入力するファイル名" delimiter="09"x ;

のような記述でも問題ありません。


■LRECL=オプション

最後に、INFILEステートメントやFILEステートメントで使用するLRECL=オプションです。
(例)

file "出力するファイル名" lrecl=1000 ;

SASは、外部ファイルを入出力する際の論理レコード長をデフォルトで256バイト取ります。

固定長ファイルや、256バイトを超える入出力の場合に、LRECL=オプションで適切なバイト数を指定します。

では、この"LRECL"とは何の省略語でしょうか?

少し難しいですかね。

"論理的なレコードの長さ"の頭文字をそれぞれ取っています。

正解は「logical record length」です。

意味は「論理レコード長」です。


今回挙げたもの以外にも様々な省略語がSASでは使われています。

日頃何気なく使っている省略語を調べることで、何か新しい発見があるかもしれませんね。



[google]

2007年8月15日水曜日

プログラムで使われる英語の意味を調べてみよう!PART1



SASもそうですが、ほとんどのプログラミング言語は英語で開発されています。

そのため、構文中のキーワードや関数名は、英単語そのものだったり、その省略形だったりすることが多いです。

(当然といえば当然ですね。)




SASでの例をいくつか挙げてみましょう。

まずは、英単語そのものがそのまま使われているもの。

これは挙げればキリがありませんが、いくつか。

LENGTHステートメント、LABELステートメント、RENAMEステートメント

SELECTDELETEDROPKEEPもそうですね。

どれもみな高校卒業程度の英語力でも充分に理解できる単語です。

また、以下のようなものは学校教育で教わるような(受験に出題されるような!)単語ではありませんが、

SASの世界では欠かせないものですね。

RETAINステートメント、MERGEステートメント
retain

~を保有する、保つ、保持する、持ち続ける、留保する、維持する、そのままにしておく、実行し続ける

merge

合併する、同化吸収する、融合する、結合する、吸収される、次第に変わる、結婚する

retain one's beauty 美しさを保つ

merge with ~    ~と結婚する

なんて使い方もします。




それでは、以下の2つの単語はいかがでしょうか?

ceil

floor

floorは日本語にもなっているので簡単ですね。「床」という意味です。

ceilも、シーリングライト(天井照明)とかシーリングファン(天井扇風機)で使われています。つまり、「天井」という意味です。

お気付きの方もいるかもしれませんが、この2つの単語はそのままSAS関数になっています。
FLOOR関数・・・最大整数<=引数 な整数値を返す

CEIL関数 ・・・最小整数>=引数 な整数値を返す

簡単に説明してしまうと、FLOOR関数は引数が正の場合は小数点以下を切り捨て、負の場合は小数点以下を切り上げます。

逆にCEIL関数は、引数が正の場合は小数点以下を切り上げ、負の場合は小数点以下を切り捨てます。

(※ともに、引数と最も近い整数との差の絶対値が10の-12乗以内の場合は、その整数値を返します。)

以下、実行例です。

f:id:n-insight:20070814184803j:image

この2つの関数を闇雲に覚えてしまうと、いざ使うときに迷ってしまいます。

そんなときは、元々の英語の意味を思い出すといいでしょう。
floor ⇒ 床  ⇒ の方 ⇒ 引数以下の最大整数を返す

ceil ⇒ 天井 ⇒ の方 ⇒ 引数以上の最大整数を返す

このように元々の英語の意味で覚えていれば、FLOOR関数とCEIL関数を使用する際に間違えることはなくなるはずです。




普段プログラムで使っているキーワードの意味を調べると面白い発見があったりもします。

また、そうすることで英語の勉強にもなり、トータルでのスキルアップにもつながるでしょう。



[google]

2007年8月9日木曜日

便利な条件分岐処理 CASE式を使ってみよう!



条件分岐処理は、SASに限らず様々なプログラミング言語で不可欠なものです。

SASのDATAステップ処理においては、おなじみの
・IF 条件式 THEN 処理 ;

・IF 条件式 THEN 処理1 ;

ELSE 処理2 ;

・IF 条件式1 THEN 処理1 ;

ELSE IF 条件式2 THEN 処理2 ;

や、SELECTステートメントを使用した、
・SELECT(変数名) ;

WHEN(条件1)処理1 ;

WHEN(条件2)処理2 ;

OTHERWISE ;

END ;

・SELECT ;

WHEN(条件式1)処理1 ;

WHEN(条件式2)処理2 ;

OTHERWISE ;

END ;

などの書き方があります。

では、SQLプロシジャでの条件分岐処理はどのように記述すればいいでしょうか。

例えば、以下のようなSASデータセットがあるとき、

f:id:n-insight:20070808154320j:image

変数VAR2の値が偶数のときは、変数VAR3に"偶数"を、

変数VAR2の値が奇数のときは、変数VAR3に"奇数"を格納する処理をしてみます。
proc sql ;

create table temp2 as

select var1,

var2,

case mod(var2,2)

when 0 then "偶数"

else "奇数"

end as var3

from temp ;

quit ;

構文は以下の通りです。
CASE 変数名 WHEN 変数の値1 THEN 返す値1 WHEN 変数の値2 THEN 返す値2 ~ ELSE 返す値 END

CASEの後に変数名と書きましたが、上記プログラムのように関数を直接記述することも可能です。

その場合は、変数の値と書いた箇所を関数の戻り値と解釈して下さい。

また、CASE式は「IF ~ THEN ~ ; ELSE IF ~ THEN ~ ; ELSE ~ ;」のように評価していきます。

よって、と評価された時点でCASE式を抜けます。また、全てと評価されればELSE以降の処理が行われます。

記述方法は少し異なりますが、以下のような書き方も可能です。
proc sql ;

create table temp3 as

select var1,

var2,

case

when mod(var2,2)=0 then "偶数"

else "奇数"

end as var3

from temp ;

quit ;

最後にそれぞれの実行ログと出力結果を掲載しておきます。

f:id:n-insight:20070808173638j:image

f:id:n-insight:20070808173712j:image



[google]

ネイチャーインサイト サイトリニューアル&NIBLOGの引っ越し

ご連絡が遅くなりましたが、 ネイチャーインサイトの際とがリニューアルしました。 https://www.n-insight.co.jp/ それに伴い、NIBLOGも引っ越しすることになりました。 https://www.n-insight.co.jp/niblog/ ...