SAS 操作數據集的觀測


SAS  操作數據集的觀測

1. SAS表達式

     表達式是操作數和操作符的序列,該序列會形成一組可執行並產生 結果值的指令。其中,操作數可以是常量、變量或表達式;操作符是表 示比較、數學計算或邏輯運算的符號,也可以是SAS函數或者括號組。 SAS程序語句中,創建變量、賦值、求新值、轉換變量和執行條件處理都會用到表達式。

1.操作數

操作數可以是常量、變量或表達式。SAS常量是表示一個固定值的 數字或字符串。常量可用作許多SAS語句的表達式,包括變量賦值語句 和IF-THEN語句,還可作為特定選項的值,例如OBS=5。SAS中存在4 類常量:字符常量、數字常量、時間日期常量和位測試常量。

(1)字符常量 字符常量由1到32767個字符組成,並且必須放在引號(單引號或雙引號)中。在下面的SAS語句中,Tom是一個字符常量。

if name='Tom'  then  do;

如果字符常量包括單引號,則將該常量放入雙引號中。例如,為了指定字符值Tom's,使用下面的形式:

if name="Tom's"  then  do;

或者將字符串放入單引號,並且用兩個連續的單引號表示撇號。 SAS將兩個連續的引號作為一個引號。例如,要表示字符串Tom's,則 使用下面的形式:

if name='Tom''s'  then  do;

要表示Tom“s,可以使用以下形式:

if name="Tom""s"  then  do;

注意 使用引號一定要匹配,否則會致使SAS誤讀當前的錯誤語

(2)數字常量   數字常量指的是SAS語句中出現的數字值。

(3)時間日期常量  SAS中還可以創建日期常量、時間常量、時間日期常量。這些常量的形式為包含在單引號或雙引號中的指定日期或時間,並接着跟隨一 個d(日期)、t(時間)或dt(日期時間)來說明值的類型。例 如,'1jan2013'd、'9:25't、'01may12:9:30:00'dt。

(4)變量 變量是一組描述給定特性的數據值,可用於表達式中。 如果在一個表達式中指定了變量,但是變量值不匹配需要的類型,例如,在需要數值變量的地方使用了字符變量,或者相反,在需要字符 變量的地方使用了數值變量,SAS則會嘗試將該變量值轉換成所期望的 類型。SAS會按照如下規則自動在字符變量和數值變量之間轉換:

  ·如果使用要求數字操作數的操作符(例如加號+)時指定了字符變 量,SAS將字符變量值轉換為數字。

  ·在使用比較操作符比較字符變量和數值變量時,SAS會將字符變量 值轉換為數字。

  ·如果使用要求字符操作數的操作符(例如級聯操作符)時指定使用了數值變量,SAS使用格式BEST12.將數值變量值轉換為字符。

  ·如果在賦值語句的左側使用了數值變量而右側是字符變量,SAS會 將字符變量值轉換為數字。反之,當左側是字符變量而右側是數值變量 時,SAS會使用格式BESTn.將數值變量值轉換為字符。其中,n是左側 變量的長度。

當執行自動轉換時,SAS會在日志中打印提示信息,表明發生了轉 換。如果將字符變量值轉換成數字時產生了無效的數字值,那么表達式 的結果是缺失值,並且會在日志窗口打印錯誤消息,同時,會將自動變 量_ERROR_設置為1。

2. 操作符

   操作符包含算術操作符、比較操作符、邏輯操作符等,分別用於算 術運算、比較表達式和對布爾值進行操作等。此外,它還提供了一些只 能用於WHERE語句或WHERE=選項的操作符。

1)算術操作符

使用算術操作符的表達式其運算結果是數值。表給出了算術操作符的定義、示例及示例表達式的計算結果。

算術操作符號

2)比較操作符

使用比較操作符的表達式其運算結果是真(1)或假(0)。

比較操作符

在對數字值進行比較時,SAS會基於值進行比較。缺失數字值小於 任何其他數字值。表達式為真時,表達式的結果是1或真(true);表達 式為假時,表達式的結果是0或假(false)。比較操作符常用於IF- THEN語句中,如以下例子:

if x<y   then  c=5;
else  c=12;

也可在賦值語句表達式中使用比較,例如:

c=5*(x<y)+12*(x>=y);

  這時,SAS先計算括號內表達式(x<y)和(x>=y)的值(為0或1),然后使用計算結果替代括號里的表達式。因此,假設x=6,y=8, 那么賦值語句c=5*(1)+12*(0)的結果是c=5。

  字符操作數的比較也會產生數字值1(或真)或0(或假)。SAS會 從左至右逐個字符對字符操作數進行比較。空格和缺失值小於其他任何 可打印字符值。字符順序依賴於計算機的排列順序,此順序通常指的是在ASCII或EBCDIC編碼中的順序。例如在EBCDIC和ASCII的排列順序中,G大於A。因此,表達式'Gray'>'Adams'的值為1或真。

  如果是不同長度的兩個字符值進行比較,在比較之前,SAS會假設 已經用空格補充到了較短的字符操作數結尾處,使兩個字符值有了相同 的長度。在比較中尾綴空格會忽略,所以'fox'等於'fox'。然而,在字符值開始處和中間的空格都會參與比較,所以,'fox'不等於'fox'。

  還可以在比較操作符之后使用“:”來比較字符表達式的指定前綴。 SAS會在比較過程中截斷較長的值使其與較短值的長度一致。在下面的 例子中,在等於符號后面的冒號修改器告訴SAS僅查看變量LastName的 第一個字符是否為S。

if lastname=:'S';

3)邏輯(布爾)操作符    使用邏輯操作符的表達式其運算結果是布爾值,即為真(1)或假(0)。下表給出SAS的邏輯操作符、等效字符、示例及其說明。

邏輯操作符

4)其他操作符 在SAS表達式中還可以使用一些其他操作符,例如級聯操作、括號等

  *級聯符號取決於當前操作環境。 在表達式,特別是包含多個操作符的復合表達式中,經常會將一些子表達式放入括號()中,表示優先對括號中的表達式求值,同時也會提高表達式的易讀性。級聯操作符||會將操作符兩側的字符值進行級聯。通常會使用賦值語句將級聯操作的結果存儲在結果變量中。如果事先沒有通過LENGTH或ATTRIB語句指定該結果變量的長度,則其長度為在級聯操作中每個變量或常量的長度總和。級聯操作不會去除操作數的前導和尾綴空格。如果變量帶尾綴空 格,在級聯前使用TRIM函數可去除值中的尾綴空格。如果要去除操作 數的前導和尾綴空格,通常使用表達式TRIM(LEFT(char))。

5)WHERE語句操作符

  在WHERE語句或數據集選項WHERE=中使用的表達式稱為WHERE表達式。在WHERE表達式中除了可以使用上述操作符之外,還 可以使用如下表的操作符。注意,這些操作符只能在WHERE表達式中使用。

6)MIN、MAX操作符

  MIN(><)和MAX(<>)操作符分別用於找到兩個操作數中的最 小值和最大值。例如,如果A<B,那么A><B的返回值為A,A<>B的返 回值為B。如果比較中包含缺失值,SAS使用缺失值的排序順序。

注意,在WHERE語句或WHERE從句中,<>操作符等同於NE。

3.復合表達式求值

  僅包含一個操作符的表達式為簡單表達式。為了表示復雜的邏輯或 操作,表達式中通常會包含多個操作符,這樣的表達式稱為復合表達 式。復合表達式中經常使用括號對操作數進行分組。當遇到復合表達式 時,SAS會遵循下述規則確定計算表達式各部分的順序:

   ·如果復合表達式中有括號,SAS會先對在括號中的表達式求值,再 對括號外的表達式求值。

   ·下表中給出了不同組的優先級。SAS先對組Ⅰ中的表達式部分求 值,然后依次對組Ⅱ、組Ⅲ等組求值。

   ·下表也給出了同組內的求值順序。對組Ⅰ中的操作符是從右到 左,而其他組的操作符都是從左到右。

復合表達式求值順序

①NOT、NE、OR以及組IV中的級聯符號取決於當前操作環境。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM