1. 程式人生 > >SAS語言入門教程

SAS語言入門教程

1.什麼是SAS

    SAS語言是一種專用的資料管理與分析語言,它提供了一種完善的程式語言。
類似於計算機的高階語言,SAS使用者只需要熟悉其命令、語句及簡單的語法規則就可以做資料管
理和分析處理工作。因此,掌握SAS程式設計技術是學習SAS的關鍵環節。
    在SAS中,把大部分常用的複雜資料計算的演算法作為標準過程呼叫,使用者僅需要指出過程名
及其必要的引數。這一特點使得SAS程式設計十分簡單。
中文名 統計分析系統 外文名 SAS 全稱 Statistics Analysis System

2.語言簡介

1.SAS語句:
    1.SAS語言程式由資料步和過程步組成。
        1.資料步用來生成資料集、計算、整理資料,
        2.過程步用來對資料進行分析、報告。
    2.SAS語言的基本單位是語句,
        1.每個SAS語句一般由一個關鍵字(如DATA,PROC,INPUT,CARDS,BY)開頭,
          包含SAS名字、特殊字元、運算子等,以分號結束。
        2.SAS關鍵字是用於SAS語句開頭的特殊單詞,SAS語句除了賦值、累加、註釋、空語
          句以外都以關鍵字開頭。
        3.SAS名字在SAS程式中標識各種SAS成分,如變數、資料集、資料庫,等等。
        4.SAS 名字由1到8個字母、數字、下劃線組成,第一個字元必須是字母或下劃線。
        5.SAS關鍵字和SAS 名字都不分大小寫。

2.SAS表示式
	1.SAS資料步程式中的計算用表示式完成。
  	  表示式把常量、變數、函式呼叫運算子、括號連線起來得到一個計算結果。
	    1.常 量
	      SAS常量主要有數值型、字元型兩種,並且還提供了用於表達日期、時間的資料型別。
	      數值型:數值型常數可以用整數、定點實數、科學計數法實數表示。如:
	      	 	12,-7.5,2.5E-10
	      字元型:字元型常數為兩邊用單撇號或兩邊用雙撇號包圍的若干字元。如:
	            'Beijing',"Li Ming","李明"
	      日期、時間:
	            日期型常數:
	            	在表示日期的字串後加一個字母d大小寫均可),中間沒有空格。
	            時間型常數:
	            	是在表示時間的字串後加一個字母t。
	            日期時間型常數在表示日期時間的字串後加字母dt。
	            日期型:'13JUL1998'd
	            時間型:'14:20't
	            日期時間型:'13JUL1998:14:20:32'dt
	      因為SAS是一種資料處理語言,而實際資料中經常會遇到缺失值,比如沒有觀測到
	      數值,被訪問人不肯答,等等。
	      SAS中用一個單獨的小數點來表示缺失值常量。
	    2.變 量
	        1.SAS變數的基本型別有兩種:數值型和字元型。
	        2.日期、時間等變數存為數值型(實際記錄為距1960/01/01的天數)。
	        3.SAS的數值型變數可以儲存任意整數、定點實數、浮點實數,一般不關心其區別。
	          數值型變數在資料集中的存貯一般使用8個位元組。SAS的字元型變數預設的長度
	          是8個字元,但是如果在INPUT 語句中輸入字元型變數時指定了長度則不受此
	          限制。可以用LENGTH語句直接指定變數長度。
	            LENGTH 語句一般應出現在變數定義之前,格式為:
	            LENGTH 變數名 $ 長度;例如:
	            LENGTH name $ 20;
	    3.運算子
	        SAS運算子包括算術、比較、邏輯及其它的運算子。
	        1.算術運算子
	            算術運算子: + - * / **,運算優先順序按通常的優先規則。
	        2.比較運算子:
	             比較運算子用於比較常量、變數的值大小、相等,包括
	                = ^= > < >= <=
	                EQ NE GT LT GE LE IN
	                其中EQ等名字和=等特殊字元是同一運算子的等價寫法。比較運算子得
	                到“真”或“假” 的結果,主要用於需要條件的分支、迴圈等語句中。
	                運算子IN是一個SAS特有的比較運算子,用來檢查某個變數的取值是否
	                在一個給定列表中,例如:
	                	  prov in ('Beijing', 'Tianjin', 'Shanghai', Chongqing')
	                   可以判斷變數prov的取值是否為四個直轄市之一。
	        3.邏輯運算子
	            邏輯運算子用來連線比較得到的結果以構成複雜的條件,有三種邏輯運算
	            符: &(AND) |(OR) ^(NOT) 。
		            AND是&(與)的等價寫法
		            OR是|(或)的等價寫法
		            NOT是^(非)的等價寫法。
	            例如:
	                (salary >= 1000) AND (salary < 2000)
	                表示工資收入在1000-2000之間(不含2000)
	                (age <= 3) OR (sex = '女')
	                表示三歲以下(含三歲)的嬰兒及婦女
	                NOT ((salary >= 1000) AND (salary < 2000))
	                表示工資收入不在1000-2000之間
	                複雜的邏輯表示式最好用括號表示其運算優先順序,以免誤記優先規則並
	                可利於閱讀程式。
	        4.其它的運算子
	            其它的運算子:
	            ||(兩個連續的|號),兩個字串連線
	            <> 取兩個運算值中較大一個的(比如3<>5結果為5)
	            >< 取兩個運算值中較小一個的 (比如3><5結果為3)
	            注意:<>符在有些語言中用作“不等於”比較算符,而SAS 中用法則較特殊。

3.SAS程式規則

1.SAS程式由語句構成。每個語句以分號結尾。
2.在SAS程式中,一個語句可以寫到多行(不需任何續行標誌),也可以在一行連續寫幾個語句。
3.SAS語言中只要允許用一個空格的地方就可以加入任意多個空白(空格、製表符、回車),允
  許用空格的地方是名字周圍、運算子周圍。
4.SAS關鍵字和名字大小寫不分,但字元型資料值要區分大小寫,比如"Beijing" 和"BEIJING"
  被認為是不同的資料值。
5.在SAS程式中可以加入註釋,註釋的內容用/*和*/在兩端界定。這種註釋可以出現在任何允許
  加入空格的位置,可以佔多行。
6.SAS中一般只把註釋單獨佔一行或若干行,不把註釋與程式程式碼放在同一行。註釋的另一個作
  用是把某些程式碼暫時遮蔽使其不能執行。
7.SAS程式包括資料步和過程步兩種結構,每一個步是一段相對完整的可以單獨執行的程式。
  資料步用來生成、整理資料和自程式設計計算,過程步呼叫SAS已編好的處理過程對資料進行處理。
  自己用SAS程式設計序進行計算主要在資料步中進行。
8.SAS資料步以DATA語句開頭,以RUN語句結尾。DATA步中可以使用INPUT、CARDS、INFILE 、
  SET、MERGE等語句指定資料來源輸入資料,也可以用賦值、分支、迴圈等程式設計結構直接生成
  資料或對輸入的資料進行修改。
9.作用編輯
    SAS是一種專用的資料處理、統計計算語言,但是它也包含一般的高階語言程式設計能力並擴充
    了許多數學、統計等方面的函式。
    SAS語言的程式設計計算能力主要由SAS資料步提供。DATA語句以關鍵字DATA 開頭,後面給出
    一個數據集名,例如:
    	data out1;
    則在本資料步要生成的資料集,其名字為out1。我們也可以省略資料集名,這時SAS自動生
    成一個臨時資料集名。也可以使用特殊名字_NULL_ ,表示本資料步不生成資料集。

4.一賦值語句

在SAS中用賦值語句計算一個值並存放到變數中。
格式為:變數名 = 表示式;
例如:
    avg = (math + chinese)/2;
    isfem = (sex='女');
    y=sin(x)**2;
    newv = .;
    其中第一個賦值語句用一個公式計算平均分數。第二個生成一個取值為0或1的變數,
    性別為女時為1,否則為0。第三個使用了正弦函式和乘方運算。第四個給變數賦了缺失值。

5.二輸出語句

1.SAS資料步的輸出一般是資料集,用賦值語句計算的結果會自動寫入資料集。SAS也提供了一個PUT語句用於立即列印輸出結果。
    PUT語句的語法:
        PUT 輸出項表
        輸出項表中只能是變數或字串,項間用空格隔開。
        如:
            data;
            x=0.5;
            y=sin(x);
            put 'Sine function value of ' x 'is ' y;
            run;
            結果將在執行記錄視窗顯示一行
                Sine function value of 0.5 is 0.4794255386
2.PUT說明
    ⒈在PUT語句中,若在變數名後加“=”,則指定輸出項可以顯示帶有變數名的輸出結果。
      比如把上程式中的PUT語句改為
          put x= y=;
      則結果在LOG視窗顯示為
          X=0.5 Y=0.4794255386
    ⒉指定變數輸出項的具體列位置及小數位數
        絕對位置格式:
        變數 起始列-結束列.小數位數
        比如:
            put x 10-20 .6 y 30-40 .6;
      指定把X數值顯示在第10-20列,保留6位小數,把Y數值顯示在第30-40列,保留6位
      小數。
      在指定的列位置內,數值型資料靠右對齊,字元型資料靠左對齊。變數為整數值或者字元
      型則不指定小數位數。
      相對位置格式:
          變數 寬度.小數位數(用於數值型)
          變數 $寬度.(用於字元型)
      如:put x 20.8 y 20.8; 使X佔用第1-20列,8位小數,右對齊;Y佔用第21-40列,
          8位小數,右對齊。
	     而put name $10.;使name佔用10列。
         輸出佔位不滿指定寬度時,數值型資料向右對齊,字元型資料向左對齊。
    3.如果希望PUT語句的輸出不產生換行,使下一個PUT的結果可以顯示在同一行,只要在
      PUT 語句結尾處加一個@符。
      PUT語句的輸出結果預設情況下被送到執行記錄視窗。若在PUT語句之前用FILE語句可以
      改變PUT語句的輸出目的地。如,在PUT語句之前用file print;可以把PUT語句的輸出
      轉向到輸出視窗。在FILE語句中指定一個包含檔名的字串可以把PUT語句的輸出轉向
      到此檔案中。比如file 'tmp.out';輸出檔案把後續的PUT語句輸出轉向
      到當前工作目錄下的檔案“tmp.out”中,生成tmp.out 。注意當前工作目錄在SAS狀態
      欄的右方顯示,雙擊可以更改。檔名也可以指定全路徑,比如“C:\SAS\TMP.OUT”。

6.三分支結構

⒈if...then...else 結構
⒉SELECT結構
1. if...then...else 結構
格式為:
IF 條件 THEN 語句;
ELSE 語句;
例: data temp1
input x @@;
if x>0 then put x '是正數';
else put x '是負數';
cards;
1 2 -3 4 -5
;
run;

有時我們在條件成立時需要進行的操作無法用一個語句完成,這時可以使用SAS提供的複合語句功能。例:

ut [email protected]@; /*不分行符@@的使用:每讀入一天記錄後,資料指標保持原位不換行,

繼續讀下一條記錄*/

if x>0 then do;
y=2*x;
put 'f(' x ')=' y;
end;
else put 'Data Error!';
cards;
1 2 -3 4 -5
;
run;