?
http://web5.pku.edu.cn/pucssr/SASbiancheng.pdf?
?
本教程中的主題將向您介紹 SAS Enterprise Guide。您最好依次 瀏覽這些主題。
?
概述 啟動項目并瀏覽主要窗口 向項目添加 SAS 數據 從文本文件導入數據 關于 SAS 任務 創建和修改列表報表 創建條形圖 關于“查詢生成器” 使用查詢連接表 將計算列添加至查詢 從查詢生成“匯總表” 創建餅圖 執行線性模型分析 將多個報表組合成單個文檔 使用過程流 更多內容
?
?
簡明SAS教程 by LongFei? version:0.11
SAS?統計軟件
前言 簡明致敬郇爺,細節留作習題。(霧)
本教程的內容主要是SAS的簡單基本知識和SAS在多元統計分析中的應用。? 側重在SAS的應用,會介紹如何根據SAS的輸出結果得到結論,但不會深入講解其中的統計原理。? 在每一章的開始,會簡要概括本章內容和學習目標,以幫助同學們有針對性地進行學習。
代碼講解將由一條條的statement講解來構成。
作者的話 這篇文章是為了整理自己最近復習SAS的心得筆記而寫,旨在梳理自己的學習內容。
我以前修讀多元統計分析課程時,SAS上機作業常常是照著課本和課件做的,對代碼的含義一知半解,一旦提交了作業,幾乎就會忘掉代碼了。如今復習,由于已積累了較多的編程實踐經驗,對代碼的理解也加深了。我把自己的理解寫出來,希望能幫助正在或打算學習SAS的同學們。
原本只是打算寫一個小教程,但寫作過程中有點貪多求全,現在越寫越多,只能強行“簡明”了。
注意事項 本教程使用的SAS版本是9.4,SAS版本最低不低于9.3。
快速入門 本章介紹SAS編程的基本概念和邏輯,并寫一個簡單的示例程序,以期讓初學者快速上手SAS編程。
學習目標 了解DataSet(數據集)、Procedure(過程),Statement和Option(選項)的概念 了解SAS程序執行流程和SAS代碼基本語法結構。 了解簡單日志信息的含義 寫一個Hello World程序 基本概念 DataSet(數據集)
一張表,每列代表一個變量,每行代表一個觀測。數據集是SAS進行統計分析的基本單位。 Procedure(過程)
簡稱為proc,SAS集成的各種統計分析功能的總稱??梢允褂貌煌倪^程來完成不同的分析。 Statement(語句)
SAS代碼,無論分成多少行,都要以一個分號結束,這一條到分號結束的代碼,就被稱為一個statement或語句,這是SAS執行代碼的基本單位。一條條的語句,構成了SAS程序。? statement之間是有層次關系的。頂層statement是一個獨立執行單元的statement,比如data xxx;,proc print;,run;等等。次級statement則需要依賴于頂層statement——先執行頂層statement,才能執行次級statement,典型的次級statement就是by xx;,input a b;等等。? 次級statement是有使用范圍的,需要在正確的頂層statement下才能被SAS執行,他們的主要作用是在細節上控制主statement的行為,在某些過程(proc)中,某些次級statement是必須設置的。比如說在排序過程(sort)里,就不能直接執行proc sort;,而必須在它后面添加by 變量名;來指定用于排序的變量后,才能執行。? 以下示例代碼的每一行都是一個statement
data xxx; set a; proc print data=xxx; run; Option(選項)
選項是指寫在statement語句后,分號前,以空格間隔的一系列單詞或等式,比如noprint,data=xxx等。它們通常不是必要的,但能控制statement的宏觀行為如:指定用于分析的數據集,不輸出結果,指定繪制直方的數量等等。? 頂層statement和次級statement的option寫法稍有不同。頂層statement的option是接空格如?proc procname data=xxx noprint;,而次級statement是接/如histogram RM/normal nmidpoints=12; 程序編寫流程 dataprocrun data
代碼以data作為標識符起頭,稱為data步(數據步)。數據步的作用是建立數據集,進行數據的讀取和修改,后續可以提供給過程步進行統計分析。SAS提供了強大的數據輸入功能,能夠把各種格式的數據輸入到SAS中。此外,還能在數據輸入的過程中進行計算,生成新的數據列,甚至能處理缺失數據,功能十分強大。 proc
代碼以proc起頭,稱為proc步(過程步)。過程對指定的數據集進行統計分析。SAS提供了豐富多樣的統計分析功能,還有各種選項可供細化。 run
寫下一個run;,就可以讓SAS在讀取到這一步時,運行前面的所有語句。如果沒有這一條,則代碼只是被SAS讀取了,但不會運行。 我們編寫SAS程序,正是按照上述的運行過程來做的:? 1. data步——獲取和整理數據? 2. 寫proc步——分析數據? 3. 提交代碼給SAS,得到output——輸出分析結果
程序執行流程 提交代碼逐條讀取語句讀取run后運行并輸出繼續讀讀完代碼
在提交代碼后,SAS會逐條讀入statement。當讀到run;這條statement時,SAS就會執行前面的所有statement,輸出分析結果。如果我們的SAS程序中沒有run;語句,則程序會處于持續運行狀態,但不會執行前面讀取到的statement。? 有些proc步的statement是持續性的,會阻止下一個proc的執行。這時就需要加一句quit;來終止該proc步。這是后話,待到用時再說。
在SAS 9.3以后,在默認設置下,proc步的分析結果會被輸出到一個html文件上,這個html文件會被SAS用結果瀏覽器打開。如果不喜歡這種方式,可以使用ODS(Output Delivery System 輸出交付系統)來改變輸出方式和樣式。這在后續的章節中會講到。
基本語法 當初我學習的時候沒有特別考究過SAS的語法,老師也沒有強調,導致我常常需要記憶整段的代碼來解決某個具體問題。這種學習方式效率十分低下,也缺乏拓展性——問題要求稍微變化一點就沒轍了。? 事實上,SAS的代碼雖然語法簡單而選項繁多,但也有基本的編程語法結構。了解語法結構,能讓我們在記憶時更有針對性,更容易理解代碼含義,從而提高我們解決相似問題的能力。
從上一節的SAS運行過程可以看出,要編寫一個SAS程序,就需要編寫data步和proc步的代碼,它們有著相似的語法結構。編寫完成之后,再寫一行run;讓程序執行statement即可。
Data步
Data步以data作為開頭標識,空格后接自行設定的數據集名,生成一個數據集。下面接上各種statement描述如何處理這個數據集。Data步有自己的次級statement語句,只可在data步中使用。? 一個完整data步的語法結構如下,以<>括起來的部分都是可選的,不必嚴格遵守下面的順序:
DATA datasetname;/* 設定數據集名 */ <code that defines the variables in the data set>;/* 定義數據集的變量 */ <code to enter data>;/* 輸入數據 */ <code to create new variables>;/* 創建新變量 */ <code to assign missing values>;/* 設定缺失值 */ <code to output data>;/* 設定輸出的數據集 */ <code to assign labels to variables>;/* 設定變量的標簽 */ <and other data tasks>;/* 其它數據任務 */ Proc步
Proc步以proc?作為開頭標識,空格后接SAS過程名,再一個空格后接該過程的選項,最后仍以分號結束。分號后面接上多句次級statement,。同data步一樣,proc有自己的次級statement語句。不過每一個過程的次級statement語句都不一樣,有些能通用,有些則不能,有些還是必寫的,需要具體問題具體分析。一般的語法結構如下,:
proc procname <options>;/* 啟動過程步 對數據進行統計分析 */ <statements>/<options>;/* 次級statement,如果要添加選項,必須加/隔開 */ run和quit
run;和quit都是一條statement語句,而且是不依賴于data步和proc步的statement。? 當SAS執行了run;時,它就會把前面讀取到的所有data步或proc步的statement都執行完。如果一個程序里沒有run;,那么這個程序在提交后也不會被執行。? 當SAS執行了quit;時,它就會把某些會持續運行,占用SAS資源的的proc停掉,讓SAS能夠執行后面的proc。 大小寫問題
在SAS中,各種statement的關鍵字,如data,proc等,都是不區分大小寫的。不過,在字符串中,則會區分大小寫。 學習心得:? “做中學”是以實際問題驅動學習的方式,這在編程語言的學習中非常高效。我認為這一方式同樣適用于SAS的編程學習。在學習中應當多多實踐,盡可能完成課本的所有練習,加深對SAS代碼的理解。? 對data步,重要的是掌握它的次級statement操作,包括創建、讀取、修改、刪除、輸出等等。處理數據是統計分析的開始,也是重要的一步。在多元統計分析的學習中,我們更關注統計分析的實踐。練習中使用的數據一般都是處理好了的標準數據,可以直接使用。不過,在工作中可能會遇到各種各樣的數據,有很多可能會有缺失值,如果想要在SAS的使用上更進一步,就一定要對data步有更多的了解。? 對proc步,則需要按不同的過程,逐個學習。對有些功能相似的過程,可以先學習其中一個過程,然后對比另一個過程,進行遷移學習。? 在學習一個過程時,我喜歡首先了解它的應用背景,也就是了解它是用來做什么的。然后學習它常用的statement,知道如何從細節上控制分析過程。做到這一步就足夠完成一些基本的統計分析了。但有時候有一些特殊需求,比如不輸出分析結果,或者畫直方圖時順帶畫出正態分布曲線,這就需要設置可選項了,這時候再去了解這個過程的可選項,以及相應的某些核心的statement的可選項即可。
日志(Log) 在向SAS提交代碼之后,務必檢查日志里的內容,確認程序的執行情況。特別是需要關注錯誤和警告。
錯誤
紅色的字表示錯誤(error),說明代碼出錯了,會導致程序在停止在SAS所提示的出錯行,不再繼續往下執行代碼。 警告
綠色的字表示警告(warning),說明當前提示的這句代碼可能有問題,有可能會讓你得不到預期的結果,但程序還是能繼續運行下去。 學會閱讀日志能幫助快速地排除小BUG,避免不必要的時間浪費。? 日志默認是打開的,如果沒有打開,或者不小心關掉了??梢允謩哟蜷_:菜單欄-->視圖-->日志
Hello World 將以下代碼復制到SAS的代碼編輯器里并提交
data hellodata; input ISay $ 1-20; datalines; Hello World One Hello World Two Hello World Three ; proc print; run; 會得到以下輸出:
ObsISay 1 Hello World One 2 Hello World Two 3 Hello World Thre
數據輸入和儲存 本章介紹SAS的數據集的基本知識和data步中的數據輸入方法。
學習目標 了解SAS數據集類型、結構和變量數據類型 掌握input的使用方法,能夠精細地設定數據輸入格式 掌握infile的使用方法,能夠導入數據文件 掌握datalines的使用方法,能夠手動輸入數據 SAS數據集基本知識 數據集類型 數據集分為臨時數據集和持久數據集兩種類型。
臨時數據集
數據集名是一個single name,也就是簡單的名字,如:data example;,data dec2016等。臨時數據集的數據,會暫時儲存在SAS程序里,但一旦關掉SAS,就會被銷毀,想要重新使用數據的話,就需要再次提交輸入數據的代碼。 持久數據集
數據集名則是一個two-part name,也就是用一個.連接的復合名字,如:data research.2016,data MyData.0001等。這個復合名字的前半部分是SAS的 library(邏輯庫)名,后半部分是數據集名。這樣的數據集會以文件的形式被儲存到硬盤上,具體的位置是library指定的路徑。即使關掉了SAS,下次再打開,只需要分配邏輯庫名,就能直接使用,無需再次提交數據輸入的代碼。 實際上,臨時數據集在SAS中也是存在library里的。這個library的名字叫work。每次關閉SAS時,系統會自動銷毀這個library里的數據。? 在數據量比較小,數據輸入耗時可忍受(幾秒鐘)的情況下,兩種數據集沒有什么使用上的差別。但一旦數據規模擴大到輸入耗時幾十分鐘甚至幾十個小時的時候,持久數據集就要優于臨時數據集了。? 一般來說,實驗可以使用臨時數據集,做實際工作則應該使用持久數據集。
/* Ex 2.1 臨時數據集和持久數據集的區別 */ /* 臨時數據集實例 每一次重新打開SAS,要運行代碼中的proc步,就必須先提交data步。 */ data tempdata;/* 輸入數據集 */ input t @@; datalines; 1 2 3 4 ; proc print data=tempdata;/* 打印數據集 */ run; /* 持久數據集實例 只有第一次需要提交全部的代碼,之后數據集就會被以文件形式儲存在MyData庫中。之后要使用,只需要執行第一句分配邏輯庫名,就可以直接提交proc步,而無需再次提交data步輸入數據。 */ libname MyData "D:\MyData";/* 分配邏輯庫名 */ data MyData.tempdata;/* 輸入數據集 */ input t @@; datalines; 1 2 3 4 ; proc print data=MyData.tempdata;/* 打印數據集 */ run; 如果知道數據集文件的儲存路徑,還可以直接用文件路徑名調用。比如,假設文件`D:\MyData目錄下有一個名為tempdata的SAS數據集文件,我們可以直接使用:
proc print data="D:\MyData\tempdata"; run; 但是,不建議使用。
數據集的結構 數據集的結構就是一張表,每一列表示一個變量,每一行表示一個觀測。以下是一個典型的SAS數據集? 在第一行中,第一列的Obs表示觀測的序號,后面的a b c分別是變量名
變量命名規則 SAS允許為變量自由命名,但存在一些規則:
可以設定長度為1-32的任意字母、數字或下劃線,不能包含空格。 必須以字母或下劃線開頭 不區分大小寫 最好具有描述性(就是說能從變量名看出這個變量的含義,少用諸如a,b,c這樣無語義的變量名),這項規則是可選的,但建議盡量遵守。 一些正確的變量名:? GENDER?AGE_IN_1999?AGEin1999?_OUTCOME_HEIGHT_IN_CM?WT_IN_LBS? 一些錯誤的變量名:? AGE IN 2000?2000MeaslesCount?S S Number?Question 5?WEIGHT IN KG?AGE-In-2000
變量數據類型 學習過編程語言的同學都知道,在編程語言中,變量的數據類型是很重要的。在SAS中,雖然沒有明確指出,但實際上也是存在不同的數據類型的,分別如下:Numberic
數字型變量,也是SAS的默認變量類型。決定一個變量是不是數字型,只需要看它在邏輯上是否可以進行運算,如身高、體重之類,就可以用于計算,ID號、電話號碼之類,不可用于計算,所以前兩者是數字型變量,后兩者不是。這種變量類型會自動忽略掉高位的0,如果你把ID號設置為數字類型,那么00012就會變成12。 Character
字符型變量,也包括Text(文本)或String(字符串)。這種類型的變量不能用于運算,并且會區分大小寫。如果你對性別變量分組,那么M和m會被分成不同的組。SAS默認會把數據看成數字型變量,所以必須要手動把諸如ID號之類的數字形式的變量設置成字符型變量。 Date
日期型變量。要輸入SAS的數據集中的日期變量可能會有多種多樣的格式,比如10/15/09、01/05/2010或JAN052010等等。在后面會看到如何處理這多種多樣的日期格式數據,并把他們轉化為SAS能夠用于分析的數據。實際上,在SAS數據集中儲存的日期型變量數據是用整數表示的,這能很方便地進行數據操作。 變量數據類型實例程序 /* Ex 2.2 變量數據類型實例程序 */ data vartypes; input id_num id_char $ weight_num @18 birth_date MMDDYY10.;/* 輸入4個變量,分別是id_num(默認-數字型) id_char(字符型) weight_num(默認-數字型) birth_date(日期型,格式為:月/日/年) */ datalines; 0001 0001 60 03/07/2016 0002 0002 50 04/02/2016 0003 0003 30 12/31/2016 0004 0004 45 04/12/2016 0005 0005 49 04/07/2016 ; proc print data = vartypes; run; 打印的結果如下:
Obsid_numid_charweight_numbirth_date 1 1 0001 60 20520 2 2 0002 50 20546 3 3 0003 30 20819 4 4 0004 45 20556 5 5 0005 49 20551
可以看到id_num的0被去掉了,而birth_date變成了整數形式
數據的輸入 數據的輸入分為兩步:首先,從外部文件或流式數據(in-stream data,可以簡單地理解為直接嵌在代碼里的數據)中讀取原始數據,然后是將原始數據轉化為SAS使用的標準數據集,需要設定一定的轉化規則。? SAS提供的數據輸入功能十分強大,但是實際用到的不多,只講簡單實用的部分即可。
讀取原始數據 外部文件
使用infile語句進行讀取。格式為?infile filepath;。可以后接選項詞做進一步的輸入控制。常用的有DLM,用于指定分隔符;FIRSTOBS,用于指定從哪一行開始讀數據;OBS指定到哪一行結束讀取。? infile "D:\MyData\MyCSV.csv" DLM=',' FIRSTOBS=2 OBS=10表明從D:\MyData\MyCSV.csv中讀取數據,分割符為逗號,從第2行開始讀,第10行結束。 流式數據
以datalines;開頭,換行之后就可以寫數據了,到最后換行,以一個分號結束即可。? 如果要寫入的數據中有分號,則可以以dalines4;開頭,最后結尾換成三個分號。 不要使用cards,這是很老舊的用法了,現在的datalines;完全可以替代cards;的作用 input語句用于設定如何將各種格式的數據轉化成SAS使用的標準數據集。
設定轉化規則 讀入了原始數據之后,需要設定轉化規則,用數學說原始數據集到SAS數據集的映射,把原始數據轉化成標準的SAS數據集。SAS提供了多種多樣的方法來確定轉化規則,但一般來說,我們只需要使用input語句來設定規則就足夠了。? input語句的通用的語法為:input <specification(s)> <@ | @@>;? specification(s)表示一個或多個特殊的表述,內容可以包括變量,以圓括號括起來的變量列表,$符號,指針控制,列控制,格式化標識等等,非常復雜,具體可以通過SAS的官方幫助手冊里查input Statement進行了解。下面列舉最常用的幾種輸入格式,能夠解決絕大多數的輸入問題。它們之間可以互相混合使用以完成最佳輸入。
Freeform List Input(自由輸入)是最簡單也是最常用的。只需要設置變量列表,以及指定某些變量為字符類型即可,SAS會自動讀取數據,數據之間以空格作為間隔符。
通用語法:input variable <$> ;? variable為變量名,$是可選項,表明指定它前面的變量為字符類型。這最簡單的語法,在大多數時候已經能滿足學習中的數據需要了。這主要用于以作為空格間隔的原始數據。
/* Ex 2.3 Freeform List Input */ data test; input x $ y z; /* x后接一個$,表明x是字符型變量,不省略高位的0 */ datalines; 001 2 3 004 5 6 007 8 9 ; proc print; run; 輸出結果:
Compact Data Format(緊湊輸入)也是非常常用的,比起自由輸入,只是增加了末尾用于控制數據輸入指針的符號。? 通用語法:input variable <@|@@>;? <@ | @@>表示可以寫@或@@或不寫,這決定著讀取數據的指針的行為。? -?不寫:指針立刻換行? -?@:指針暫不換行,直到下一個input或一輪循環結束。? -?@@:指針不換行。循環結束也不換行。? 緊湊輸入指的是末尾添加@@符號的寫法,這可以讓SAS連續地讀取所有的數據。
/* Ex 2.4 Compact Data Format-input中@數量的區別 */ data test; input x @; /*單個@,暫時不換行,直到下一個input或一輪循環結束 */ input y; /*沒有@,下一個input語句會去讀新的一行*/ input z @@; /*兩個@,下一個input不換行,直接從下一個數據開始讀*/ datalines; 1 2 3 4 5 6 7 ; proc print; run; 輸出結果:
Column Input(列輸入)是以列控制指針來控制輸入的,可以以精確到具體列的形式進行數據的讀取。? 基本語法:input variable <$> startcol<-endcol> ...;? <$>正是前面說的字符類型控制符。startcol指明從哪一行開始讀,<-endcol>是可選項,指明到哪一行讀取結束,不寫的話,就默認取starcol的值。
/* Ex 2.5 Column Input 列輸入 */ data MyData; input ID $ 1-3 SBP 4-6 DBP 7-9 GENDER $ 10 AGE 11-12 WT 13-15; datalines; 001120 80M15115 002130 70F25180 003140100M89170 004120 80F30150 005125 80F20110 ; run; 輸出結果
ObsIDSBPDBPGENDERAGEWT 1 001 120 80 M 15 1 2 002 130 70 F 25 1 3 003 140 100 M 89 1 4 004 120 80 F 30 1 5 005 125 80 F 20 1
Formatted Input(格式化輸入)是用于將特殊的數據格式轉化為SAS可識別的數據類型的,比如日期或者帶小數點的數字。? 通用語法:input formated-vars ;? formated-vars指的是格式化變量,標準格式是:col-pointer variable informat? 其中,col-pointer指明從第幾列開始讀取數據,用@n來表示,n為指定開始讀取的列,variable指出變量名,informat指出輸入的格式,所有的informat都必須以點號.或點號.后接1個數字的形式作結尾,具體格式表如下:
informat輸入格式表
InformatMeaning n. n 列數據,數字類型 $n. n列數據,字符類型,移除頭部的空格 $CHARn. n列數據,字符類型,保留頭部的空格 COMMAn. n列數據,數字類型,去除小數點或美元符號(比如$40,000會被讀取為40000) COMMAn.m n列數據,數字類型,其中帶有2位小數,去除小數點或美元符號(比如$19,020.22會被讀取為19020.22) MMDDYY8. 輸入日期,形如01/12/16(月-日-年)(注意Y2K問題) MMDDYY10. 輸入日期,形如04/07/2016(月-日-年) DATE7. 輸入日期,形如20JUL16(日月年) DATE9. 輸入日期,形如12JAN2016(日月年) (沒有Y2K問題)
需要特別說明地是,日期在SAS中是以整數的形式儲存的,這樣便于進行統計分析。如果需要輸出日期的數據,則需要在輸出時,特別指出輸出格式。
/* Ex 2.6 Formatted Input */ data MyData; input @1 SBP 3. @4 DBP 3. @7 GENDER $1. @8 WT 3. @12 OWE COMMA9. @22 InputDate MMDDYY8.; format InputDate MMDDYY8.; /* 指定InputDate的輸出格式,沒有這句則會輸出整數 */ /* 列標尺 ----+----1----+----2----+ */ datalines; 120 80M115 $5,431.00 01/11/16 130 70F180 $12,122 01/12/16 140100M170 7550 01/12/16 120 80F150 4,523.2 01/12/16 125 80F110 $1000.99 01/12/16 ; proc print data=MyData; run; 輸出結果
ObsSBPDBPGENDERWTOWEInputDate 1 120 80 M 115 5431.00 01/11/16 2 130 70 F 180 12122.00 01/12/16 3 140 100 M 170 7550.00 01/12/16 4 120 80 F 150 4523.20 01/12/16 5 125 80 F 110 1000.99 01/12/16
判別分析 判別分析的應用場景:對于總體,各自有自己的觀測集,現在給出一個樣本,需要判斷它屬于哪一個總體。
根據不同的判別指標和條件,我們可以用不同的衡量方法,來進行不同的判別分析,它們有各自不同的優劣。
距離判別 距離無疑是最直觀的衡量方法,樣本距離哪個總體近,就判它屬于哪個總體。? 具體地說,就是利用觀測集來估計總體(或總體的某些關鍵統計量),然后以某種方式來衡量觀測與總體的遠近程度,然后選擇最近的總體。
馬氏距離 要判斷距離,首先得明確計算距離的方法。現在我們希望了解的是給定樣本到某個總體的距離。聯系歐氏空間,很自然地就想到,這個距離可以定義成到總體的中心的距離,而總體的中心可以用它的均值向量來表示,為了方便計算,我們一般取距離的平方。此外,還要考慮總體的集中程度,越集中的,自然就越高,這個在一元下可以用方差表示,在多元下則是用協差陣來表示。由此想法,我們可以定義樣品與總體的馬氏距離為?
?
對于多個總體,我們只需要比較的大小即可
特別地,在兩總體比較中,我們可以定義一個線性函數,從而得到判別準則:?
?
SAS程序 在SAS中,我們可以使用discrim過程來完成上述的各種判別分析。
通用語法是
proc discrim <options>; class variable; <other statements>; class variable;是必填的,它決定著要用什么變量來劃分類別。然后我們可以根據不同的需求來添加options和statement完成統計分析。
馬氏距離判別 ?
?
?
?
?
?
?
?
?
統計軟件SAS使用教程 2009-07-17?
?fire216 百度空間?|?百度首頁? |?登錄 長江的空間 技術的匯集地:人杰地靈. 主頁博客相冊|個人檔案?|好友 統計軟件SAS使用教程 2007-06-16 23:31 第1章SAS系統簡介 §1.1 SAS發展概況 SAS(Statistical Analysis System)是一個大型的數據管理與數據統計分析處理的軟件包。1966年由美國North Carolina州立大學開始研制,1976年在美國成立了SAS研究所。 SAS主要用于數據處理和統計分析領域,是一個功能齊全、使用方便靈活。只須要有少量的、簡單的語句、寫出SAS程序,進行運行,就可以滿足擁護要求,一些特殊的計算或處理方式可以通過選項來指定。從而達到且讓用戶將SAS程序在SAS環境下提高運行,及時了解到程序運行情況及出現的錯誤,程序可以方便的編輯修改和運行,直到用戶得出滿意的計算結果。 目前,SAS已經發展成為一個功能齊全、應用范圍廣泛、使用靈活方便的數據庫管理和數據分析的標準軟件系統。其統計分析部分,在數據處理和統計分析領域,被業界和國際上公認為標準軟件和最權威的統計軟件包。 SAS應用廣泛,其應用范圍涉及到理、工、農、林、醫、管理、商業、行政事物等各個領域。國際上成立了專門的SAS協會SUGI(SAS User Group International),每年有學術會議討論研究有關SAS的問題。 SAS在我國的應用。 SAS的主要版本。 §1.2 SAS的結構、功能、特點 一、SAS結構與功能: SAS軟件包由多個大的功能模塊組成,用戶可以根據需要,選擇安裝部分或全部SAS功能模塊來組成一個運行系統。 SAS系統的核心(基本)部分是SAS/BASE模塊,其功能是承擔數據管理,管理用戶使用環境,進行用戶語言的處理,調用其他模塊。在SAS/BASE模塊的基礎上,還可以增加如下不同的模塊、從而實現不同的功能。 ⑴SAS/BASE? ⑵SAS/STAT ⑶SAS/AF ⑷SAS/FSP ⑸SAS/GRAPH ⑹SAS/ETS ⑺SAS/IML ⑻SAS/OR ⑼SAS/QC 二、SAS的特點: l 實用性強、功能完善、使用方便、編程簡單、容易學習。 l 信息存儲簡單,數據交換接口豐富,可以調用多種格式的數據文件。 l 語言編程能力強大。 l 對數據連續處理。 l 統計分析方法豐富,使用簡單。 l 具有強大的報表輸出和繪圖功能。 三、SAS的運行環境: l 硬件系統:586計算機 l 操作系統:Windows95/98/2000 §1.3 SAS for Windows 的操作入門 SAS for windows系統的操作界面是標準的圖形用戶界面,是標準的多文檔界面,如同Word、Excel等軟件一樣,操作使用簡單、類似。軟件操作可以通過菜單或命令方式完成。 一、 SAS的安裝與啟動 ⒈ SAS的安裝: ⒉ SAS的啟動: ⒊ 系統的設置: 二、 SAS集成環境介紹: ⒈ SAS的集成環境: ⒉ 程序編輯窗口(Program Edit): ⒊ 日志窗口(Log): ⒋ 輸出窗口(Output): ⒌ 其它窗口: 三、 SAS操作入門: ⒈ 程序的編輯: ⒉ 程序的運行: ⒊ 結果查看: ⒋ 有關文件的操作。 §1.4 SAS/ASSIST簡介 SAS/ASSIST是為初學者學習使用SAS系統提供的一個交互式輔助系統,目的是初學者更容易的掌握SAS的強大功能。 一、 SAS/ASSIST的啟動: 二、 SAS/ASSIST的操作入門: 三、 SAS/ASSIST的的學習資料: 請訪問:cie.nwsuaf.edu.cn/apptech/sjm/sas?? οnlοad="this.style.overflowX='auto';">第2章SAS語言的基本概念 §2.1 SAS語言概述 SAS提供了一種完善的編程語言。如同大多數計算機高級語言一樣,SAS用戶只須要熟悉其命令、語句及簡單的語法規則就可進行數據管理和分析處理工作。因此,掌握SAS編程技術是學習SAS的關鍵環節。 在SAS中,系統具有眾多的計算過程,把大部分常用的復雜的數據計算的算法作為標準過程調用,用戶僅需要指出過程名及必要的參數即可,這樣使得SAS的變成變的十分簡單。 SAS程序是SAS語句的有序集合。以程序的功能將SAS程序劃分成多個程序模塊(程序段),這些模塊分為兩類:數據準備模塊——數據步(DATA Step)和過程部(PROC Step)。在一個SAS程序中可以有一個或多個數據步與過程步。 SAS程序的結構和數據流向示意圖 數據步的作用是把數據源中的數據作為輸入,經過加工后輸出到一個或多個“SAS數據集”。 過程步是把由數據步建立和產生的數據集中的數據作為輸入,調用一個或多個標準過程,經標準過程計算處理后,將結果以清晰的表格或圖形方式輸出到OUTPUT窗口中或寫入磁盤文件。 簡單說:數據步是為過程步準備數據,并將數據放入數據集中; 過程步是把指定的數據集中的數據計算處理后并輸出結果。 一個簡單的SAS程序的如下: data student; ??? input xh$ xm$ yy gs; ??? p=yy gs; ??? cards; ?????? 001 aaa 89 91 ?????? 002 bbb 70 88 ?????? 003 ccc 90 92 ?????? 004 ddd 70 87 ?????? 005 eee 85 83 proc print; proc means; run; 運行結果如下: 數據集: OBS???? XH????? XM????? YY???? GS????? P 1????? 001???? aaa???? 89???? 91???? 180 2????? 002???? bbb???? 70???? 88???? 158 3????? 003???? ccc???? 90???? 92???? 182 4????? 004???? ddd???? 70???? 87???? 157 5????? 005???? eee???? 85???? 83???? 168 平均數: Variable?? N?????????? Mean??????? Std Dev??????? Minimum??????? Maximum ------------------------------------------------------------------- YY???????? 5???? 80.8000000???? 10.0349390???? 70.0000000???? 90.0000000 GS???????? 5???? 88.2000000????? 3.5637059???? 83.0000000???? 92.0000000 P????????? 5??? 169.0000000???? 11.7898261??? 157.0000000??? 182.0000000 §2.2 SAS 常量 SAS中有多種常量:數值常量,字符常量,日期、時間、日期時間常量。 ①數值常量: ?? 數值常量是一個十進制數值,在書寫上與數學書寫習慣一致。可分為:正負整數、小數和科學記數法。例如: ????? 數???????????? SAS書寫 -3???? -3 3.12???? 3.12 18000000?? 1.8E6??? (大于1032-1必須用科學記數法表示) -0.0000125?? -1.23E-5 ②字符常量: 字符常量是用一對單引號或雙引號括起來的一串字符,其長度不超過200個字符。 ③日期、時間、日期時間常量: 這三類常量是將其對應的格式化值用單引號括起來,并且后跟類型符來表示的。 l 日期值(DATE):表示為’ddmmmyy’D或’ddmmmyyyy’D。 其中dd表示日,mmm表示月份,yy或yyyy表示年份。 如:’24MAR03’D或24MAR2003’D l 時間值(TIME):表示為’hh:mm:ss’T或’hh:mm:ss. ss’T。 其中hh表示小時,mm表示分鐘,ss表示分鐘。 如:’14:30:25’T或’14:30:25. 87’T。 l 日期時間值(DATATIME):表示為:’ddmmmyy:hh:mm:ss’DT。 §2.3 SAS 變量 一、變量及變量的命名 變量:指具有相同性質的數據值的集合。變量是用變量名表示的。 變量的命名:以字母或下畫線開頭,后跟字母或數字或下畫線的字符串。長度不多于8個字符。空格和特殊的字符($、@、#)不能出現在變量名中。 二、變量的屬性 SAS的變量分為兩類:數值型與字符型。每個變量都有長度、輸入格式、輸出格式和標號四種屬性。變量的屬性可以由首次出現的上下文給出定義,也可以用專用的語句定義明確給出。 1、變量的取值范圍: 數值型變量的值是數值,數值的范圍是:±10-307到±10 308。 字符型變量的值是字符串,其取值范圍最多為200個字符。 2、變量長度: 變量長度是指SAS數據集中存儲它的每一個值的字節數。 數值型變量的長度為:3"8個字節,默認為8個字節。 字符型變量的的長度為:1"200個字節,默認為8個字節。 3、變量的格式標號 由于變量名長度不能超過8個字符,有時變量名受此限制而不能完全表達變量的含義。變量的格式標號是用來給變量定義一個標簽,這樣可以提高輸出變量值時的可讀性。用LABEL語句可以定義變量的格式標號。 4、數據缺值(Missing Values) 在數據分析中,經常會遇到數據不全或數據缺少的問題。SAS在數據分析時允許數據缺值,一般用“.”表示。 5、變量的簡化表示 SAS程序定義了完整的變量清單,可以在許多語句中使用縮寫變量清單,達到簡化書寫的目的。(參見P9表2.1) §2.5 SAS 函數 如同其他高級語言一樣,SAS提供了豐富的標準函數,為計算帶來極大方便。SAS函數的書寫格式為: 函數名(參數表) 例如:SIN(X) ABS(X) 一、數的參數 函數的參數可以是常量、變量、表達式。函數的參數可以是一個或多個。如: sin(x)?? 一個參數 max(x1,x2,x3,x4,x5)?? 多個參數 參數書寫形式有如下三種: ① 將所有參數列入括號內,參數間用“,”隔開。如:max(x1,x2,x3,x4,x5) ② 將所有參數列入括號內,參數間用“空格”隔開,前面冠以OF,如: max(of?? x1?? x2?? x3?? x4?? x5) ③ 參數變量名的尾部是有序整數時,可寫成:(OF 變量名1-變量名n),如: max(of?? x1-x5) 二、函數值 除個別函數外,多數函數值的類型與其參數類型是一致的。 三、關于函數的幾點說明 ① 函數不能直接用在PUT語句中。 ② 函數參數都有特定的取值范圍。 ③ 除樣本統計函數外,多數函數不允許有缺值。 ④ 對某些概率函數,若參數選擇不當,可能引起不收斂的問題。 四、函數分類 SAS函數的類型有:算術、數學、截尾、三角、樣本統計、概率函數。(略) §2.6 SAS表達式 SAS表達式是由操作符和圓括號將各種操作數連接起來表示運算關系的的式子。表達式的值可能是:數值、字符串或缺失值。 一、操作符 ① 算術運算符 **(乘方)?? *(乘)?? /(除)??? (加)?? -(減) ② 比較(關系)運算符 = 或EQ??? 等于?? ^= 或 NE?? 不等于 > 或GT??? 大于??? < 或LT??? 小于 >=或GE??? 大于等于?? <=或LE?? 小于等于 比較兩個量大小關系,構成比較表達式,運算結果為邏輯值。如: 5>3 1??? X<2*Y??? ”ab c”>=”XYZ” ③ 邏輯運算符 &;amp; 或 AND?? | 或 OR??? ^ 或NOT 對邏輯值再進行運算,構成邏輯表達式,運算結果為邏輯值。如: 5>3 1 AND X<2*Y 邏輯運算真值表: 邏輯值A 邏輯值B A AND B A OR B NOT A 真 真 真 真 假 真 假 假 真 假 假 真 假 真 真 假 假 假 假 真 ④ 其它運算符 <>??? 取兩個量中最大值?? 53<>34 ><??? 取兩個量中最小值?? 53><34 || 或!聯接兩個字符串?? ”abc” || ”de” 二、操作符運算優先級 在一個SAS表達式中,同時可能包含多個操作符,各種操作符的執行優先順序規定如下: 規則1:括號內優先 規則2:具有較高優先級的操作先執行,優先級次序如下: 組1:**,正負號,NOT,<>,>< 組2:*,/ 組3: ,- 組4:|| 組5:<,<=,=,^=,> ,> 組6:AND 組7:OR 規則3:組號小者優先組號高者,優先級先同時,依次從左向右執行。 §2.7 SAS語句與程序 SAS語句是以SAS關鍵字(保留字)開頭、后跟SAS名、特殊字符、操作符等組成,以分號結束。一個語句規定了一種操作或為系統提供默寫信息。 一、SAS關鍵字: 關鍵字是SAS系統已經賦于特定含義的一個單詞或單詞縮寫,是一個特定的字符串。在SAS語句中,多數語句是以關鍵字作為開頭的。 二、SAS 名: SAS名是以字母或下畫線開頭,后跟字母或數字或下畫線的字符串。長度不多于8個字符??崭窈吞厥獾淖址?#xff08;$、@、#)不能出現在變量名中。 另外,SAS保留了一些特殊的變量名并賦予特定的含義。這些變量都是以下畫線開頭和結尾,如:_N_表示當前數據步已經執行過的次數。 在SAS語句中,可能出現的SAS名有:變量名、數據集名、過程名、輸出格式名、選項名、數組名、語句標號名、文件邏輯名等。 三、SAS程序 SAS程序是由若干SAS語句組成的有序特定的集合,典型的SAS程序都包括兩個部分:數據步和過程步,整個程序以RUN語句結束。 同其它高級語言一樣,SAS程序由多行語句組成,其書寫格式如下: ① 語句可以在一行任意列開始書寫 ② 一個語句可以寫一行或多行,但要以分號結束 ③ 多條語句可以寫在一行,語句見必須以分號隔開(英文分號“;”) ④ SAS語句對英文字符不區分大小寫。 ⑤ 建議將程序書寫成鋦齒形,便于程序閱讀與調試。
總結
以上是生活随笔 為你收集整理的sas教程 的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔 網站內容還不錯,歡迎將生活随笔 推薦給好友。