Site Banner
【04】資料魔法|運算式、運算子與運算元的應用

【04】資料魔法|運算式、運算子與運算元的應用


目錄


運算式 – Expression

由運算子 (Operator) 與運算元 (Operand) 所組成,並以此組合產出 1 個值,這個值可以是文字型變數、數值型變數或是布林值。

運算式能用在建立新變數、賦予新值或條件式敘述句等。如果將含運算子的運算式用來作為新變數的值時,運算式成立會回傳 1、不成立回傳 0。文章最後會以實例幫助更深入理解運算式的實際用法。

Simple Expression

  • 僅由 1 個運算子組成的運算式
  • 常數 (Constant)、變數 (Variable)、函數 (Function)

Compound Expression

  • 由多個運算子所組成的運算式
  • 當 SAS 遇到多個運算子時,依據特定規則來決定執行順序

運算子 – Operator

是一種表示算術、比較、邏輯等的符號 (Symbol),例如:加 (+)、減 (-)、乘 (*)、除 (/);大於 (>)、小於 (<)。

主要分為 2 類運算子:

  • Prefix Operators (前綴運算子):最常見的為 + (正)、- (負),用來表示數值的正負。另外,NOT 也是屬於 1 種前綴運算子
  • Infix Operators (中綴運算子):可以被夾在中間,並用來與左右兩個進行互動的運算子,依照功能分為以下 5 類

算數運算子 – Arithmetic Operator

執行計算的功能

運算符解析計算結果
+5 + 7
9 - 2
*2 * 6
/12 / 2
**乘冪2 ** 3

比較運算子 – Comparison Operator

用來比較大小,使用時可以使用符號或是助記符,兩種皆適用。

符號助記符定義範例
>gt大於Age > 5
<lt小於Weight lt 180
>=ge大於等於Height >= 155
<=le小於等於51 le 60
=equal等於No = 5
^=、~=not equal不等於5 ^= 9
21 ~= 16
In等於清單之一A in (12, 19, 51)

邏輯運算子 – Logical Operator

布林值 (Boolean Values),通常用來連結比較或算術運算子。

符號助記符定義範例
&ANDMe & My broken heart
|、!ORA OR B
^、~NOT^(b < 4)

字串運算子 – Concatenation Operator

用來連接兩個字串。

| ||、!! | 串接 | “I” || “Like” || “You” |


特殊運算子 – Max、Min Operator

不在前面所提分類的運算子。

符號定義範例
<>取最大值後回傳5 <> 2
><取最小值後回傳. >< 0

運算子執行順序

以下依照優先順序列出:

  1. (乘冪)、+(正號)、-(負號)、NOT、><(最小值)、<>(最大值)
  2. * (乘法)、/ (除法)
  3. + (加法)、- (減法)
  4. 字串運算子
  5. < (小於)、<= (小於等於)、= (等於)、^= (不等於)、>= (大於等於)、> (大於)、In
  6. & (AND)
  7. | (OR)

但這麼多運算子順序可能會混淆,最簡單的方法是使用括號 ( ),在 SAS 中,括號內的運算式會先執行,這樣就能避免混淆哪些運算子應該先執行。


運算元 – Operand

可以是常數、數值型變數、文字型變數。


實例

Data sample;
	input Age Height Weight Animal $;
cards;
5 65 80 Dog
1 45 26 Cat
7 35 67 Bird
;

Data Question;
	set sample;
	A = Age < (2**3); 
	B = Height;
	C = Animal NE "Dog";
	D = "My " || "Favorite " || "Animal " || "is " || Animal;
	E = 5 <> 1;
run;

Q:第1筆觀察值中A的值為?

Ans:1

Q:第2筆觀察值中B的值為?

Ans:45

Q:第1筆觀察值中C的值為?

Ans:0

Q:第2筆觀察值中D的值為?

Ans:My Favorite Animal is Cat

Q:第1筆與第3筆觀察值中E的值為?

Ans:5;5