SAS是現今非常流行的數據分析和數據挖掘軟件,想從事數據分析行業,掌握SAS很有必要。雖然SAS本身提供了豐富的人機交互界面,通過手動調用各個Menu能方便地完成數據統計分析的任務,但是,通過代碼來調用各個功能模塊無疑能為工作帶來巨大的靈活性,並顯著提高效率。
本文主要是根據網上找到的一個電子文檔《SAS語句簡介》(可能是某本書的其中一章)以及朱世武老師的《SAS編程技術教程》整理而成。
SAS 程序通常分為數據步和過程步,一段SAS 程序根據目的和需要可以有0到多個數據步(Data)和0到多個過程步(Proc),還可以有系統選項語句、ODS語句等全局語句。
1.數據步(Data Step)
以關鍵詞Data 開頭,可由多條語句構成,結束標志可以是空語句、Run 語句、過程步或下一步數據步。
數據步功能有:
(1)從外部文件中讀取數據;
(2)將數據寫入到外部文件中;
(3)讀取SAS數據文件和視圖;
(4)創建SAS數據文件和視圖。
2.過程步(Proc Step)
以關鍵詞Proc 開頭,可由多條語句構成,結束標志是Run或Quit 語句。過程步的功能有:
(1)調用 SAS 過程(SAS Procedures)分析和處理SAS數據集形式的數據,或執行其他分析;
(2)將分析結果以報表、圖表的形式輸出,或輸出成 SAS數據集、外部文件;
(3)生成SQL查詢;
(4)數據操作和管理。
下面是一段代碼示例,通過注釋可以看出怎樣寫SAS語句。
1 /****************************\
2 | 10名學齡兒童的身高體重資料 |
3 \****************************/ /*這三行都是注釋,SAS中的注釋跟C語言一樣,是用/*和*/來包括的*/
4 OPTIONS nodate number=0; /*系統選項語句,nodate參數指定不在結果標題中顯示時間,number=0也可以寫成nonumber,指定不在標題中顯示頁數*/
5 DATA SASTJFX48_1; /*數據步,以Data開始,SASTJFX48_1是用戶自定義的SAS數據集的名字*/
6 INPUT name $ height weight @@; /*INPUT創建變量、讀取數據值、給變量賦值的語句,name,height,weight是用戶自定義變量,$表示name是字符變量,*/
/*@@是讀取數據值的指針控制符號,指定在同一個數據行可以讀取2個以上的觀測數據*/
7 BMI=weight/(height/100)**2;
8 LABLE BMI=‘body mass index’; /*通過“LABEL”語句設置變量BMI 的標簽為“body mass index”*/
9 DATALINES; /*指DATALINES單獨占一行,指定其后為數據行*/
10 WangHB 149.4 30.8 WuCJ 167.6 46.6 /*此處開始為數據行*/
11 ChenF 146.3 33.1 GaoSY 170.7 44.0
12 ZhanZL 161.5 36.3 LiYZ 164.6 40.8
13 ShenJJ 155.5 36.7 ZhaoJH 158.5 35.4
14 ZhangHX 149.4 33.1 WangXS 156.4 31.8
15 ;
16 RUN;17 ODS HTML; /*ODS為輸出語句,指定以HTML語句的格式輸出*/
18 PROC MEANS data=SASTJFX48_1; /*PROC指示過程步的開始,后接過程名,MEANS為SAS過程名,’data’為數據集選項,*//*指定過程步分析的數據集為SASTJFX48_1*/
19 VAR bmi; /*VAR后跟變量名,指定分析的變量*/
20 OUTPUT out=result mean=BMImean; /*OUTPUT為將運行結果輸出,out后為用戶自定義的輸出數據集名,mean為結果中的均數名,=后面是用戶自定義的輸出名*/
21 RUN;
22 PROC PRINT data=result (keep=BMImean); /*調用PRINT過程在窗口顯示result數據集,keep=是數據集選項,指定保留的變量*/
23 FORMAT BMImean 4.1; /*FORMAT規定變量的輸出格式,其后是變量名和輸出格式,4.1表示標准數值型數據輸出格式*/
24 RUN;ODS HTML CLOSE; /*與17行的ODS成對出現的語句,指示關閉HTML格式的輸出*/
3.SAS程序書寫規則
SAS程序在書寫的時候要遵循如下幾點規則:
(1)每條SAS語句以分號(;)結尾;
(2)SAS語句可以從任何一行、任何一列開始,一行上可以寫多條SAS語句;
(3)一條SAS語句可以寫在多行上,但不能把一個語法單位分開寫在不同的行上;
(4)一般情況下,一條語句中不同的語法單位要用空格或換行符分隔,但是一些字符的前方或后方,可以不用空格分隔,SAS可以自動分析語句結構、識別語法單位;
(5)SAS語句書寫不區分字母的大小寫,但在一些特殊場合除外。
4.SAS的注釋
下面的一幅圖片很好的解釋了SAS的注釋語句。
5.SAS命名規則
SAS要遵循如下的命名規則:
(1)SAS 名以字母或下划線開頭,后續字符可以是字母、數字或下划線(同C語言);
(2)SAS 名依據其使用的場合有一定長度限制,有的部位的SAS 名至多有32 個字節長度,有的部位的SAS 名至多有8 個字節長度;
(3)SAS 名不區分大、小寫,例如BMI、Bmi、bmi 在SAS 名中都是一個詞;
(4)SAS 名中不能出現空格,並且SAS 名中除了字母、數字、下划線外,不能含有其他特殊字符,如#、$、@、%等特殊字符不能出現在SAS 名中;
(5)SAS 保留了一些自動變量名及變量列表、SAS 數據集名和邏輯庫引用名;
6.SAS變量
編程語言一般都離不開變量。變量相當於一個容器,用來保存一定結構的數據。SAS變量除了具備常規編程語言所具備的許多共性外,也有一些自己的特點,下面主要講述它特別的地方:
(1)SAS中只有兩種數據類型--數值型和字符型。變量后加美元號表示該變量時字符型,美元號可以緊跟變量名后面,也可以空格。
(2)變量默認長度為8個字節,通常一個普通英文字符占一個字節,一個漢字占兩個字節;用戶可以用Length,Attrib語句修改變量的長度。如果變量第一次出現在表達式左邊,則變量長度與表達式右邊的結果值的長度一致。
(3)輸出格式:字符型變量默認輸出格式是“BEST16.”,數值型變量默認的輸出格式是“$w.”,可以用Format,Attrib語句或者Format過程定義或修改變量的輸出格式。
(4)變量次序:指數據步創建或定義變量的次序。
(5)索引類型:決定這個變量是否是數據集索引的一部分的屬性。這個屬性可以用Contents 過程的‘OUT=’選項進行定義和修改。
7.SAS運算符
8.SAS文件系統
(1)邏輯庫
邏輯庫名是SAS名,長度不能超過8B。建立SAS邏輯庫的語句:
LIBNAME libref <engine> ‘SAS-data-library’
語法說明:
libref:邏輯庫名
SAS-data-library:邏輯庫對應的物理地址
engine:引擎名稱(缺失時是默認引擎)
邏輯庫又分為臨時庫和永久庫:臨時邏輯庫指的是內容只在啟動SAS時存在,一旦退出SAS時內容完全被刪除。系統默認臨時邏輯庫是work,引用臨時庫work中的文件時,可以不加庫名。永久庫當然在SAS關閉后仍舊保留。
(2)數據集
SAS數據集分為兩類:SAS數據文件和SAS數據視圖。SAS數據文件同時描述信息和存儲數據值,SAS視圖並不實際存儲數據,它相當於一個查詢語句。
(3)數據集選項
數據集選項用在SAS數據集名稱后的括號中,多個選項之間用空格隔開。括號中的數據集選項的作用:
重新命名變量;
選擇需要的觀測;
輸出數據集中保留或刪除的變量;
數據集加密。
語法格式:
Data-set-name(Data-set-options)
(option-1=value-1<…option-n=value-n>)
例子:
data scores(keep=team game1 game2 game3);
/*scores中保留team, game1, game2, game3四個變量*/
proc print data= new(drop=year); /*去掉變量year*/
set old(rename=(date=Start_Date)); /*將date改名*/