演算子

Last-modified: 2009-02-11 (水) 01:31:49

演算子の種類

算術演算子 四則演算や累乗など

演算子の前後の項を計算した結果の数値を評価値とします.
変数への割り当てステートメントの左辺や,関数の引数値などさまざまなところで使われます.

score= -2.58 + 4.73*x1 - 5.51*x2 ;
shortcode=substr(longcode,1,length(longcode)-5);
  • (+)加算
    3+4  x+2.4
  • (-)減算
    10-2  profit-loss
  • (*)乗算
    7*52  quantity*unitcost
  • (/)除算
    28/125  response/distribution
  • (**)累乗
    5**2  2**0.5
  • (<>)最大 -> max関数を使う事をお勧めします.
    10<>15  0<>x
  • (><)最小 -> min関数を使う事をお勧めします.
     10><15  99><x
  • (+)正符号 単項演算子
    +x
  • (-)負符号 単項演算子
    -x

比較演算子 等号,大小比較など

演算子の前後の項を比較した結果,真ならば数値の1を,偽ならば数値の0を評価値とします.
主に,IFステートメントの条件式や,真偽値を格納する変数の割り当てステートメントなどに使われます.

if segment=1 then output;
flag=(x1 gt 0);
  • (=,EQ) 等しい
    (1+1)=2  today eq "23jul2008"d
  • (^=,~=,¬=,NE) 等しくない
    x^=3  name ne "kakeru"
  • (>,GT) 大なり
    x>5  sqrt(5) gt 2
  • (<,LT) 小なり
    -1 lt 0  "apple"<"banana"
  • (>=,GE) 以上
    10>=9  x1>=x2
  • (<=,LE) 以下
    2<=3  y<=0
  • (in) 属する
    weekday in ("monday","tuesday","wednesday","thursday","friday")
    smallprime in (2,3,5,7)
  • (=:) 前方一致
    month =: "Jan"

論理演算子 AND,ORなど

複数の比較演算式などに対し,真偽値の論理演算を行います.IFステートメントなどの条件式などに使われます.

if (a>0) and (b>0) then delete;
do while (not(a=. ! b=.);
  • (&,AND) 論理積
    sex="M" & age<30
  • ( | , ! , | , OR) 論理和
    s=2 or s>10
  • (^ , ~ , ¬ , NOT) 否定
    not(a=1 or b=0)

連結演算子 文字列の連結

2つの文字列をつなげて,1つの文字列とします.

  • (||) 連結
    "PX"||"001"  trim(firstname)||lastname

演算子の優先順位

式の中に複数の演算子が使われている場合,括弧「()」が使われているなら,まず入れ子になっている括弧のもっとも内側の式の演算から順に計算されます.
その中で,演算子の種類によって,以下のような優先順位で計算されます.同順位の場合,多くは左から順に計算されますが,累乗演算子(**)などグループ1に属するものだけは,右から計算されます.優先順位

  • グループ1
    (**) 累積 [#l3ac1b92]
    (+) 正符号
    (-) 負符号
    (^, ~, NOT) 否定
    (<>) 最大
    (><) 最小
  • グループ2
    (*) 乗算 [#ibcec0af]
    (/) 除算
  • グループ3
    (+) 加算
    (-) 減算
  • グループ4
    (||) 連結
  • グループ5
    (>,GT) 大なり
    (<,LT) 小なり
    (>=, GE) 以上
    (<=, LE) 以下
    (=,EQ) 等号
    (^=,NE) 等しくない
    (IN) 属する
  • グループ6
    (&,AND) 論理積
  • グループ7
    (| , !  , OR) 論理和

WHERE句での非互換性

WHEREステートメントや,WHEREデータセットオプションでは,上記のような論理式がほぼ同じように使えますが,多言語の仕様との配慮からだとおもいますが,若干同じでない部分もありますので,注意が必要です.

  • <> WHERE句では,NE(等しくない)の意味で使われます.最大ではありません.
  • => 比較演算子>=と同じ意味ですが,WHERE句では,使えません.
  • =< 比較演算子<=と同じ意味ですが,WHERE句では,使えません.
  • between and WHERE句では,a<=x<=bの意味で使われます.WHERE句以外では使えません.