『壹』 在SAS中proc expand是做什麼用的求詳細解釋
1.proc expand主要用來處理時間序列問題,
比如,將日線數據轉換為月度單位數據(季度、年);求數據的平滑值(移動平均、求和、方差等等)。
2.data=have,have是你需要操作的數據集,out=want,want是expand操作得到的結果數據集
3.第一個id是數據中的一個變數,對其進行降序排序;第二個id是proc expand語句的一個函數,
id函數表示對數據have中一個數值型變數進行識別,通常id後面的變數是時間變數(year,month,day...).
id 函數要與by函數一起用,且它後面的變數不能有重復值。
『貳』 SAS入門2
數值型絕大多數情況下變數後 不用 加任何格式;
字元型必須要在變數後 加$ ;
日期型必須要在變數後加相應的日期格式
注意:日期型變數與後面的日期格式之間 一定要空格 。格式後如果指定寬度值,後面要 加點號 (.)。
數值型絕大多數情況下 無須 指定輸出格式;
字元型絕大多數情況下 無須 指定輸出格式;
日期型根據你的需要決定是否指定輸出格式
注意:s、d、p、c、b、n等分別表示slash(/)、dash(-)、point(.)、colon(:)、blank(空格)、nothing(無), 只用於輸出格式,不用於輸入格式
input id:$20.
day1:yymmdd10. day2:yymmdd10.;
注意:一定要指定一個 大的寬度值 。但日期型只能是6-32之間,字元型可以指定更大(如100或1000)。
語句:
data數據集;
merge 數據集1數據集2…;
by 變數1變數2…;
run;
例:假定有如下的數據集aa,包含性別和年齡兩個變數。現在想找出大於40歲(age>40)的男性(gender=」M」)。
data bb;
set aa;
if gender=」M」 and age>40;
proc print; run;
例:
data ht1; /*用drop語句實現*/
set ht;
drop id name date1 date2;
proc print; run;
PROC sort 語句: nopkey(刪除重復值)、nouniquekey(刪除唯一值)、by語句指定變數的排序,默認升序,descending降序。
例:
proc sort out=ht1 nouniquekey;
by date descending age; /*根據date升序排序和age降序排序*/
proc print data=ht1;
run;
proc transpose 語句:
proc compare語句:
base=數據集 compare=數據集 nosummary的作用是不顯示一些概括性的結果。
1.對變數名的注釋:Lable語句:
input id gender age;
lable gender="性別" age="年齡";
2.對變數的值進行注釋:
proc format;
invalue: 定義輸入格式
value:定義輸出格式
例:
proc format;
invalue A low-<40=30 40-<50=40 50-<60=50 60-high=60;
value gfmt1="male" 2="female";
data age;
input id gender age A.;
format gender gfmt.;
proc sort; by gender;
proc print data=baseline noobs label;/*選項noobs要求不顯示最左側的obs列*/
『叄』 spss使用方法
要是連軟體的安裝和打開都要我啰嗦的話,我勸您還是買一套洪恩的《開天闢地》好好熱熱身先。
SAS 8.2的界面中間是三個並排(或層疊)的窗口,那個叫做Program Editor的窗口(窗口標簽為Editor)就是用來輸入SAS語句的,編程操作的所有內容都是在該窗口內完成的,各位還是要跟它先多熟悉一下。
(一)數據集(dataset)和庫
統計學的操作都是針對數據的,SAS中容納數據的文件稱為數據集,數據集又包含在不同的庫(暫且理解為資料庫吧)中。SAS中的庫分為永久性和臨時性兩種。顧名思義,存在於永久庫中的數據集是永久存在的(只要你不去刪除它),臨時庫中的數據集則在你退出SAS後自動被刪除。至於SAS中庫的概念,最簡單的理解就是一個目錄,一個存放數據集的目錄。
數據集的結構完全等同於我們一般所理解的數據表,由欄位和記錄所構成,在統計學中我們習慣將欄位稱為變數,在後面的內容中欄位和變數我們就理解為同一種東西吧!建立數據集的方法很多,編程操作中有專門的數據讀入方法來建立數據集,但需要將數據現場錄入,費時費力。如果數據量大,我勸各位還是先以其它方法將數據集建好,否則程序語句的絕大部分會浪費在數據的輸入上。
What are 其它方法?各位是不是去參考一下別的書籍或資料。要不您是不是可以等一等,我准備若干年後出一本SAS操作大全。
(二)SAS程序概述
和其它計算機語言一樣,SAS語言(稱為SCL語言,SAS Component Language)也有其專有的詞彙(即關鍵字)和語法。關鍵字、名字、特殊字元和運算符等按照語法規則排列組成SAS語句,而執行完整功能的若干個SAS語句就構成了SAS程序。
SAS程序包括多個步驟和一些控制語句,一般情況下均包括數據步和過程步,一個或多個、數據步或過程步,它們之間任何形式的組合均可成為一段SAS程序,只要能完成一個完整的功能。通常情況下SAS程序還包括一些全程語句,用以控制貫穿整個SAS程序的某些選項、變數或程序運行的環境。
SAS程序的語句一般以關鍵字開始,以一個分號結束,一條語句可佔多行(SAS每看到一個分號,就將其以前、上一個分號以後的所有東東當作一條語句來處理,而不管他們處在多少個不同的行中)。SAS語句對字母的大小寫不敏感,你可以根據個人習慣決定字母的大寫或小寫。
1. 庫名(庫標記)的定義
為了保存寶貴的數據和方便操作起見,我習慣於指定自己的庫名及其路徑(目錄),因為SAS系統中已有的永久庫(SASUSER)無論庫名還是其對應的路徑都太過繁瑣,使用太不方便。程序中用到的數據,都可以永久的保存於該路徑下,保證以後可以重復使用。指定庫名的語句為全程語句,其格式如下:
Libname 庫名 『路徑』;
例如我們指定的庫名為「a」,路徑為:「e:\data\」,SAS語句如下:
libname a 『e:\data\』;
2. 數據步
SAS的數據步以data語句開始,用於創建和處理數據集。Data語句以關鍵字「data」開始,格式如下:
data 數據集名;
例如:data a.case; 將創建在庫a中名為case的SAS數據集,語句執行後你可在與庫a對應的目錄下看到剛剛建立的數據集文件case。
Data語句所指定的數據集,一般都是以「庫名.數據集名」的格式出現的,也可以單獨的「數據集名」出現,此時的數據集系統默認為是臨時庫中的數據集,退出系統後將會被刪除。
data語句有兩個重要的功能,標志數據步的開始和命名將要創建的SAS數據集。
除data語句外,數據步一般情況下還包括infile語句、input語句以及datalines語句等。在不同的數據輸入方式下對於它們的使用方式也不一樣。
SAS程序有兩種常見的數據輸入方式,即從外部文件讀入和直接輸入兩種方式。
(1)外部文件讀入方式
數據若已經包含在某個外部文件(文本文件或數據文件)中,可用此方法輸入數據到數據集文件中。
在以上介紹的data語句後,寫入以下語句:
infile 『外部文件的所在位置及名稱』 選項;
input 變數名1變數名2 …變數名n;
infile語句用於從外部文件讀入數據,必須出現在input語句之前。它的功能是指定一個包含原始數據的外部文件。
input語句用於向系統表明如何讀入每一條數據記錄。它的主要功能有:讀入由語句指定的數據列,為相應的數據域定義變數名,確定變數的讀入模式。
例如:
libname a 『e:\data\』;
data a.student;
infile 『e:\data\student.txt』;
input name height weight;
以上程序將目錄「e:\data\」下的文本文件「student.txt」中的數據輸入數據集student中,該數據集存放於目錄「e:\data\」下。
(2)直接輸入方式
數據量較少或操作者意志力堅強的情況下採用此種輸入方式,在data語句之後寫入如下語句:
input變數名1變數名2 …變數名n;
datalines;(在以前的版本下為cards,新版本下兩者可通用)
… … … …(數據行)
… … … …(數據行)
… … … …(數據行)
;
datalines語句用於直接輸入數據,標志著數據塊的開始。
注意:這里的數據行中數據之間以空格分隔,當然也可以其它東東如逗號等來分隔,這里大家先以空格來分隔好了。因為不同的分隔方式下input語句要採取相應的控制選項,這些我們以後再討論,這里我們還是省省力氣吧。另外數據行輸完後不能像其它語句那樣直接在後面加上分號,而要另起一行輸入分號,這樣SAS才認為這是在輸入原始數據而不是在搞別的什麼。
例如:
libname a 『e:\data\』;
data a.student;
input name $ height weight;(name後面的$符號表示變數name為字元型變數)
datalines;
Linda 171 51
Mary 168 50
Selinna 169 49
;
以上程序將直接建立數據集文件student,該數據集文件存放於目錄「e:\data\」下。
3. 過程步
SAS程序的過程步表示一個處理過程,如排序、T檢驗、方差分析等等。過程步以關鍵字proc開始,後面緊跟著過程名,用以區分不同的程序步,並以關鍵字run結束。
一般的格式如下:
proc 過程名 選項列表;
……(其它語句);
……(其它語句);
run;
SAS程序中涉及的過程多達數百種,實現統計功能時常用的過程也有數十種之多,現將最為常用的過程名稱及其所能實現的功能列入下表(表1.1),以便各位提前熱熱身。
表1.1 常用的過程名稱及其功能
過程名
功 能
Sort
將指定的數據集按指定變數排序
Print
將數據集中的數據列表輸出
tabulate
將數據按照指定的分類變數以表格的形式分類匯總
Means
對指定的數值變數進行簡單的統計描述
Freq
對指定的分類變數進行簡單的統計描述
Ttest
對指定的變數做t檢驗
Anova
對指定的變數做方差分析
npar1way
對指定的變數做非參數檢驗
Reg
對指定的變數做回歸分析
Corr
對指定的變數做相關分析
Discrim
對指定的變數做判別分析
Cluster
對指定的變數做聚類分析
Chart
繪出低解析度的統計圖
4. 幾個常用的重要過程
在進入一般統計學功能實現的內容之前,有關數據預處理和執行重要公共功能的過程大家有必要預先掌握,這里選出幾個常用的和重要的過程進行討論。
(1)對SAS文件進行操作的datasets過程
datasets過程是對數據文件進行管理操作的工具,利用它我們可以實現以下功能:
將SAS文件從一個庫中拷入另一個庫中;
對SAS文件進行重命名;
修復損壞的SAS文件;
刪除SAS文件;
列出某一SAS庫中所有的SAS文件;
列出一個SAS數據集的屬性,如最後修改時間、數據是否壓縮、數據是否索引等;
對SAS文件進行設置密碼的操作;
向SAS數據集添加記錄;
對SAS數據集的屬性以及數據集內變數的屬性進行修改;
創建或刪除SAS數據集的索引;
創建並管理SAS數據集的核查文件;
創建或刪除SAS數據集的完整性規則。
datasets過程的一般格式如下:
proc datasets <選項列表>;
age 當前文件名 相關文件名列表</選項列表>;
append base=數據集名 <data=數據集名 其它選項>;
audit 文件名<(操作密碼)>; initiate;<其它代碼;>
change 舊文件名1=新文件名1 <…舊文件名n=新文件名n> <選項列表>;
contents <data=數據集名> <其它選項>;
out=庫標記 <其它選項>;
exclude 文件名 <其它選項>;(該語句只能在語句後出現,不能和select語句同時出現)
select 文件名 <其它選項>;(該語句只能在語句後出現,不能和exclude語句同時出現)
delete 文件名 <其它選項>;
exchange文件名1=交換文件名1 <…文件名n=交換文件名n> <選項列表>;
modify 文件名 <選項列表>;
<modify語句之從屬語句>;
repair文件名 <選項列表>;
save文件名 <選項列表>;
run;
是不是太繁瑣了,我都有些不耐煩了。不過我還是得寫,已經寫了嘛!不忍心浪費掉,最起碼可以用來充充數,擴大一下篇幅。至於各位,嫌煩的可以略過此部分,想用的時候再來溫習也不遲。下面我就不厭其煩地向各位介紹一下各選項及各條語句的含義和用法。
proc datasets語句後各選項的含義及用法見下表(表1.2)。
表1.2 proc datasets語句後各選項的含義及用法
選項
含義及用法
alter=轉換保護密碼
SAS文件設置有轉換操作密碼時用以驗證操作的合法性,密碼正確時代碼才會被執行
details/nodetails
控制有關SAS文件的詳細信息顯示與否,前者為顯示,後者不顯示,默認值為後者
force
此選項具有兩個功能:(1)在過程步的語句存在錯誤時仍然強製程序的執行;(2)在append語句中,兩個數據集的變數不完全相同時仍然強制append語句的執行。
gennum=
控制對衍生數據集的處理方式,等號後可為all, hist, revert或某一整數
kill
此選項表示刪除待處理的庫中的所有文件,應慎用
library=庫標記
用以指定所要處理的庫
memtype=成員類型
指定處理所針對的庫成員類型(文件類型),默認值為all(所有類型)
nolist
在日誌文件中禁止對所處理文件目錄的顯示
nowarn
在語句中指定的文件不存在等情況下,禁止顯示出錯信息,強製程序繼續執行
pw=操作密碼
SAS文件設置操作密碼時驗證操作的合法性(包括讀、防寫以及轉換保護的文件)
read=讀保護密碼
SAS文件設置讀保護密碼時驗證操作的合法性
age語句用於批量地重命名文件,按照當前文件和相關文件的排列順序,依次將後一個文件名重命名給前一個文件,結果是最後一個文件被刪除,當前文件名被廢棄。
對此語句我所了解的就這么多,而且還是通過試驗得出的結論,但總感覺還是理解的不對,哪位若有高見還請不吝賜教。
append語句執行向數據集添加記錄的功能,選項「base=數據集名」用以指定要添加記錄的數據集,「data=數據集名」則指定所要添加的記錄所在的數據集,此選項若省略則默認為當前數據集(最近一次操作的數據集)。
audit語句用於對文件的核查,生成核查文件並對其進行管理;change語句以新文件名替換舊文件名;contents語句用於顯示指定數據集或當前數據集的各種屬性;語句用於將當前庫中相應的文件拷貝到指定的庫中,選項「out=庫標記」用來指定文件要拷貝到的目標庫;delete語句用於刪除指定的文件;exchange語句的功能是將等號前後兩個文件的文件名進行互換;modify語句用於修改文件各方面的屬性;repair語句用於對指定的文件(受到過某種損壞)進行修復,使其恢復到可以使用的狀態;save語句的功能是將其指定的文件保留,當前庫中的其他所有文件則被刪除。
(2)對數據文件中記錄進行排序的sort過程
sort過程的功能是對指定數據集中的記錄按照指定的變數進行排序。由於諸多過程有對數據集記錄進行排序的需要,比如過程步中存在by語句(用以將數據文件分割為若幹部分)的情況下,就需要按照by語句後的變數對數據先行排序,所以sort過程非常有用,而且非常常用。
sort過程的一般格式如下:
proc sort 選項列表;
by <descending> 變數名1 <變數名2 … 變數名n>;
run;
proc sort語句後各選項含義及其用法見下表(表1.3)。
表1.3 proc sort語句後各選項含義及其用法
選項
含義及用法
data=數據集名
用以指定sort過程所要處理的數據集,若省略則默認為最近建立或處理的數據集
date
此選項指定在不改變文件創建日期和修改日期的條件下對文件進行排序操作
out=數據集名
將排序後文件以指定的文件名存儲,原文件不進行任何修改,若無此選項則將原文件覆蓋
sortseq=排序依據
指定對字元型變數排序時依據的標准
reverse/equals/noequals
指定輸出數據中的排序方式,三者分別表示將字元變數的次序翻轉顯示,在排序變數的各水平內部次序保持不變,在排序變數的各水平內部允許次序的改變
nopkey/noprecs
指定重復變數的消除方式,前者表示除去排序變數值重復的記錄,後者表示除去所有變數值重復的記錄
sortsize=
用以指定可用最大內存的大小,等號後為表示內存大小的數值及單位,比如10m
force
用以強制執行重復排序(對已建立索引的文件排序)過程
tagsort
指定在臨時文件中僅存儲排序變數和記錄編號,以減少對磁碟空間的使用
by語句即用以指定排序所要依據的變數,變數可為數值型也可為字元型,其後可指定多個變數,sort過程在按照靠前的變數進行排序的情況下再按照靠後的變數進行排序。by語句中每個變數前可用descending/ascending選項來指定按照其排序的方式(降序或升序),默認狀態為升序。
(3)將數據文件輸出顯示的print過程
print過程的功能是將SAS數據集的記錄以一定的方式顯示到輸出設備(顯示屏),可以顯示其全部的變數或部分變數。利用此過程,你可以創建從簡單列表到可進行數據匯總的各種報告的各種不同的表單。
print過程的一般格式如下:
proc print 選項列表;
by <descending> 變數名1 <變數名2 … 變數名n 其他選項>;
pageby 變數名;
sumby 變數名;
id 變數名;
sum變數名;
var變數名;
run;
proc print語句後可跟的選項含義及其用法見下表(表1.4)
表1.4 proc print語句後選項含義及其用法
選項
含義及用法
contents=文本
用以指定html內容文件中指向輸出的鏈接的標識文本,等號後可為任何文本
data=數據集名
指定所要處理的數據集,等號後為數據集文件名
double
指定在相鄰的記錄間插入一空行
n=字元串
在報告的末尾或by變數各水平分組的末尾顯示顯示記錄的數目,並以等號後的字元串對其進行標識
noobs
禁止記錄編號在報告中的顯示
obs=列標題
用以指定記錄編號所在列的列標題
round
對未進行格式化的數值變數進行四捨五入,統一格式化為帶兩位小數的十進制數值
rows=page
規定頁面格式,目前』page』是此選項唯一可用的值,表示在每一頁中只顯示一條記錄的一行變數值,即一行中顯示盡可能多的記錄數
width=列寬度
指定列的寬度,可取的值有』full』,』minimum』,』uniform』,』uniformby』等,
heading=方向
取值可為v(vertical)或h(horizontal),表示列標題顯示的方向(橫向或縱向)
label
指定以變數標識作為相應的列標題,否則以變數名作為列標題
split=字元
首先此選項指定以變數標識作為列標題,以指定的字元作為列標題換行的標志
style=類型元素
指定報告中特定位置所要應用的類型元素(涉及很多內容,詳細內容略)
by語句在所有過程中的用法都相同,即將數據集分割為若干小數據集分別進行處理。pageby語句用來控制換頁時變數的顯示方式,對於其後所指定的變數,相同的值不會顯示在不同的頁中,該變數某一值的記錄在一頁的剩餘部分顯示不下時,則從該值的第一條記錄開始換行顯示。sumby語句的作用和pageby語句相似,只不過是將換頁的動作換為求和,對指定變數的每一值計算var變數的總計值。id語句的作用是用指定的變數值代替記錄編號對每一條記錄進行標識。sum語句用於指定報告中要進行求和操作的變數,var語句用於指定要在報告中顯示的變數。
以上過程作用較為普遍,使用頻率較高,有必要預先了解,以便於後面所討論內容的順利進行。
為節省篇幅,這里不進行實例演示。內容過於枯燥,可能的錯誤也難免,還請各位多多包涵。
SAS程序操作的大概情況就草草的這樣介紹一下吧,說得太多的話我怕各位沒有耐心看下去。更多的內容我想還是留在實際的例子中來介紹,這樣大家可以好好的切身體會一下,然後就會印象深刻,實際運用起來也就得心應手了。
『肆』 SAS是什麼
一、SAS系統簡介
SAS是一個龐大的系統,它目前的版本可以在多種操作系統中運行。當前在國內被廣泛使用的最新版本是8.2版,功能很強大,我深有體會。
據說9.0版已在國外面世,已經有一些有關它的搶先報道在網路上廣為流傳,說它如何如何美妙,令人不禁充滿期待。
SAS8.2的完整版本包含以下數十個模塊。
BASE,GRAPH,ETS,FSP,AF,OR,IML,SHARE,QC,STAT,INSIGHT,ANALYST,ASSIST, CONNECT,CPE,LAB,EIS,WAREHOUSE,PC File Formats,GIS,SPECTRAVIEW, SHARE*NET, R/3,OnlineTutor: SAS Programming,MDDB Server,IT Service Vision Client, IntrNet Compute Services,Enterprise Reporter,MDDB Server common procts,Enterprise Miner,AppDev Studio,Integration Technologies等。
所謂模塊,我的理解是將功能相近的程序、代碼等集中起來組成相對獨立的部分,就稱之為模塊,類似於辦公軟體系統office中包含的word、excel、access等。各模塊具有相對獨立的功能范圍,我們常用的模塊有base,graph,stat,insight,assist,analyst模塊等,分別執行基本數據處理、繪圖、統計分析、數據探索、可視化數據處理等功能。其餘模塊我用得很少,知道得也很少,所以也就不多說了。
SAS系統的長處,體現於它的編程操作功能的無比強大。SAS一直以來也是注重於其編程語言的發展,對於可視化方式的菜單操作投入較少,其較早的版本僅有很少的菜單操作功能,使用起來也是非常的別扭。這很可能就是在windows人機互動式操作系統占統治地位的今天,SAS較少被人問津的原因之一。
到了最新的幾個版本,SAS也對可視化操作方法投入了一定的關注。從8.0版以後,出現了幾個功能強大的可視化操作的模塊,如insight模塊和analyst模塊等,其菜單操作的方便程度以及人機界面的親和性絕不亞於SPSS等著名的可視化統計分析軟體。
然而要想完全發揮SAS系統強大的功能,充分利用其提供的豐富資源,掌握SAS的編程操作是必要的,也只有這樣才能體現出SAS在各個方面的傑出才能。
二、SAS系統基本操作及基本概念
哪位要是連軟體的安裝和打開都要我啰嗦的話,我勸您還是買一套洪恩的《開天闢地》好好熱熱身先。
SAS 8.2的界面中間是三個並排(或層疊)的窗口,那個叫做Program Editor的窗口(窗口標簽為Editor)就是用來輸入SAS語句的,編程操作的所有內容都是在該窗口內完成的,各位還是要跟它先多熟悉一下。
(一)數據集(dataset)和庫
統計學的操作都是針對數據的,SAS中容納數據的文件稱為數據集,數據集又包含在不同的庫(暫且理解為資料庫吧)中。SAS中的庫分為永久性和臨時性兩種。顧名思義,存在於永久庫中的數據集是永久存在的(只要你不去刪除它),臨時庫中的數據集則在你退出SAS後自動被刪除。至於SAS中庫的概念,最簡單的理解就是一個目錄,一個存放數據集的目錄。
數據集的結構完全等同於我們一般所理解的數據表,由欄位和記錄所構成,在統計學中我們習慣將欄位稱為變數,在後面的內容中欄位和變數我們就理解為同一種東西吧!建立數據集的方法很多,編程操作中有專門的數據讀入方法來建立數據集,但需要將數據現場錄入,費時費力。如果數據量大,我勸各位還是先以其它方法將數據集建好,否則程序語句的絕大部分會浪費在數據的輸入上。
What are 其它方法?各位是不是去參考一下別的書籍或資料。要不您是不是可以等一等,我准備若干年後出一本SAS操作大全。
(二)SAS程序概述
和其它計算機語言一樣,SAS語言(稱為SCL語言,SAS Component Language)也有其專有的詞彙(即關鍵字)和語法。關鍵字、名字、特殊字元和運算符等按照語法規則排列組成SAS語句,而執行完整功能的若干個SAS語句就構成了SAS程序。
SAS程序包括多個步驟和一些控制語句,一般情況下均包括數據步和過程步,一個或多個、數據步或過程步,它們之間任何形式的組合均可成為一段SAS程序,只要能完成一個完整的功能。通常情況下SAS程序還包括一些全程語句,用以控制貫穿整個SAS程序的某些選項、變數或程序運行的環境。
SAS程序的語句一般以關鍵字開始,以一個分號結束,一條語句可佔多行(SAS每看到一個分號,就將其以前、上一個分號以後的所有東東當作一條語句來處理,而不管他們處在多少個不同的行中)。SAS語句對字母的大小寫不敏感,你可以根據個人習慣決定字母的大寫或小寫。
1. 庫名(庫標記)的定義
為了保存寶貴的數據和方便操作起見,我習慣於指定自己的庫名及其路徑(目錄),因為SAS系統中已有的永久庫(SASUSER)無論庫名還是其對應的路徑都太過繁瑣,使用太不方便。程序中用到的數據,都可以永久的保存於該路徑下,保證以後可以重復使用。指定庫名的語句為全程語句,其格式如下:
Libname 庫名 『路徑』;
例如我們指定的庫名為「a」,路徑為:「e:\data\」,SAS語句如下:
libname a 『e:\data\』;
2. 數據步
SAS的數據步以data語句開始,用於創建和處理數據集。Data語句以關鍵字「data」開始,格式如下:
data 數據集名;
例如:data a.case; 將創建在庫a中名為case的SAS數據集,語句執行後你可在與庫a對應的目錄下看到剛剛建立的數據集文件case。
Data語句所指定的數據集,一般都是以「庫名.數據集名」的格式出現的,也可以單獨的「數據集名」出現,此時的數據集系統默認為是臨時庫中的數據集,退出系統後將會被刪除。
data語句有兩個重要的功能,標志數據步的開始和命名將要創建的SAS數據集。
除data語句外,數據步一般情況下還包括infile語句、input語句以及datalines語句等。在不同的數據輸入方式下對於它們的使用方式也不一樣。
SAS程序有兩種常見的數據輸入方式,即從外部文件讀入和直接輸入兩種方式。
(1)外部文件讀入方式
數據若已經包含在某個外部文件(文本文件或數據文件)中,可用此方法輸入數據到數據集文件中。
在以上介紹的data語句後,寫入以下語句:
infile 『外部文件的所在位置及名稱』 選項;
input 變數名1變數名2 …變數名n;
infile語句用於從外部文件讀入數據,必須出現在input語句之前。它的功能是指定一個包含原始數據的外部文件。
input語句用於向系統表明如何讀入每一條數據記錄。它的主要功能有:讀入由語句指定的數據列,為相應的數據域定義變數名,確定變數的讀入模式。
例如:
libname a 『e:\data\』;
data a.student;
infile 『e:\data\student.txt』;
input name height weight;
以上程序將目錄「e:\data\」下的文本文件「student.txt」中的數據輸入數據集student中,該數據集存放於目錄「e:\data\」下。
(2)直接輸入方式
數據量較少或操作者意志力堅強的情況下採用此種輸入方式,在data語句之後寫入如下語句:
input變數名1變數名2 …變數名n;
datalines;(在以前的版本下為cards,新版本下兩者可通用)
… … … …(數據行)
… … … …(數據行)
… … … …(數據行)
;
datalines語句用於直接輸入數據,標志著數據塊的開始。
注意:這里的數據行中數據之間以空格分隔,當然也可以其它東東如逗號等來分隔,這里大家先以空格來分隔好了。因為不同的分隔方式下input語句要採取相應的控制選項,這些我們以後再討論,這里我們還是省省力氣吧。另外數據行輸完後不能像其它語句那樣直接在後面加上分號,而要另起一行輸入分號,這樣SAS才認為這是在輸入原始數據而不是在搞別的什麼。
例如:
libname a 『e:\data\』;
data a.student;
input name $ height weight;(name後面的$符號表示變數name為字元型變數)
datalines;
Linda 171 51
Mary 168 50
Selinna 169 49
;
以上程序將直接建立數據集文件student,該數據集文件存放於目錄「e:\data\」下。
3. 過程步
SAS程序的過程步表示一個處理過程,如排序、T檢驗、方差分析等等。過程步以關鍵字proc開始,後面緊跟著過程名,用以區分不同的程序步,並以關鍵字run結束。
一般的格式如下:
proc 過程名 選項列表;
……(其它語句);
……(其它語句);
run;
SAS程序中涉及的過程多達數百種,實現統計功能時常用的過程也有數十種之多,現將最為常用的過程名稱及其所能實現的功能列入下表(表1.1),以便各位提前熱熱身。
表1.1 常用的過程名稱及其功能
過程名
功 能
Sort
將指定的數據集按指定變數排序
Print
將數據集中的數據列表輸出
tabulate
將數據按照指定的分類變數以表格的形式分類匯總
Means
對指定的數值變數進行簡單的統計描述
Freq
對指定的分類變數進行簡單的統計描述
Ttest
對指定的變數做t檢驗
Anova
對指定的變數做方差分析
npar1way
對指定的變數做非參數檢驗
Reg
對指定的變數做回歸分析
Corr
對指定的變數做相關分析
Discrim
對指定的變數做判別分析
Cluster
對指定的變數做聚類分析
Chart
繪出低解析度的統計圖
4. 幾個常用的重要過程
在進入一般統計學功能實現的內容之前,有關數據預處理和執行重要公共功能的過程大家有必要預先掌握,這里選出幾個常用的和重要的過程進行討論。
(1)對SAS文件進行操作的datasets過程
datasets過程是對數據文件進行管理操作的工具,利用它我們可以實現以下功能:
將SAS文件從一個庫中拷入另一個庫中;
對SAS文件進行重命名;
修復損壞的SAS文件;
刪除SAS文件;
列出某一SAS庫中所有的SAS文件;
列出一個SAS數據集的屬性,如最後修改時間、數據是否壓縮、數據是否索引等;
對SAS文件進行設置密碼的操作;
向SAS數據集添加記錄;
對SAS數據集的屬性以及數據集內變數的屬性進行修改;
創建或刪除SAS數據集的索引;
創建並管理SAS數據集的核查文件;
創建或刪除SAS數據集的完整性規則。
datasets過程的一般格式如下:
proc datasets <選項列表>;
age 當前文件名 相關文件名列表</選項列表>;
append base=數據集名 <data=數據集名 其它選項>;
audit 文件名<(操作密碼)>; initiate;<其它代碼;>
change 舊文件名1=新文件名1 <…舊文件名n=新文件名n> <選項列表>;
contents <data=數據集名> <其它選項>;
out=庫標記 <其它選項>;
exclude 文件名 <其它選項>;(該語句只能在語句後出現,不能和select語句同時出現)
select 文件名 <其它選項>;(該語句只能在語句後出現,不能和exclude語句同時出現)
delete 文件名 <其它選項>;
exchange文件名1=交換文件名1 <…文件名n=交換文件名n> <選項列表>;
modify 文件名 <選項列表>;
<modify語句之從屬語句>;
repair文件名 <選項列表>;
save文件名 <選項列表>;
run;
是不是太繁瑣了,我都有些不耐煩了。不過我還是得寫,已經寫了嘛!不忍心浪費掉,最起碼可以用來充充數,擴大一下篇幅。至於各位,嫌煩的可以略過此部分,想用的時候再來溫習也不遲。下面我就不厭其煩地向各位介紹一下各選項及各條語句的含義和用法。
proc datasets語句後各選項的含義及用法見下表(表1.2)。
表1.2 proc datasets語句後各選項的含義及用法
選項
含義及用法
alter=轉換保護密碼
SAS文件設置有轉換操作密碼時用以驗證操作的合法性,密碼正確時代碼才會被執行
details/nodetails
控制有關SAS文件的詳細信息顯示與否,前者為顯示,後者不顯示,默認值為後者
force
此選項具有兩個功能:(1)在過程步的語句存在錯誤時仍然強製程序的執行;(2)在append語句中,兩個數據集的變數不完全相同時仍然強制append語句的執行。
gennum=
控制對衍生數據集的處理方式,等號後可為all, hist, revert或某一整數
kill
此選項表示刪除待處理的庫中的所有文件,應慎用
library=庫標記
用以指定所要處理的庫
memtype=成員類型
指定處理所針對的庫成員類型(文件類型),默認值為all(所有類型)
nolist
在日誌文件中禁止對所處理文件目錄的顯示
nowarn
在語句中指定的文件不存在等情況下,禁止顯示出錯信息,強製程序繼續執行
pw=操作密碼
SAS文件設置操作密碼時驗證操作的合法性(包括讀、防寫以及轉換保護的文件)
read=讀保護密碼
SAS文件設置讀保護密碼時驗證操作的合法性
age語句用於批量地重命名文件,按照當前文件和相關文件的排列順序,依次將後一個文件名重命名給前一個文件,結果是最後一個文件被刪除,當前文件名被廢棄。
對此語句我所了解的就這么多,而且還是通過試驗得出的結論,但總感覺還是理解的不對,哪位若有高見還請不吝賜教。
append語句執行向數據集添加記錄的功能,選項「base=數據集名」用以指定要添加記錄的數據集,「data=數據集名」則指定所要添加的記錄所在的數據集,此選項若省略則默認為當前數據集(最近一次操作的數據集)。
audit語句用於對文件的核查,生成核查文件並對其進行管理;change語句以新文件名替換舊文件名;contents語句用於顯示指定數據集或當前數據集的各種屬性;語句用於將當前庫中相應的文件拷貝到指定的庫中,選項「out=庫標記」用來指定文件要拷貝到的目標庫;delete語句用於刪除指定的文件;exchange語句的功能是將等號前後兩個文件的文件名進行互換;modify語句用於修改文件各方面的屬性;repair語句用於對指定的文件(受到過某種損壞)進行修復,使其恢復到可以使用的狀態;save語句的功能是將其指定的文件保留,當前庫中的其他所有文件則被刪除。
(2)對數據文件中記錄進行排序的sort過程
sort過程的功能是對指定數據集中的記錄按照指定的變數進行排序。由於諸多過程有對數據集記錄進行排序的需要,比如過程步中存在by語句(用以將數據文件分割為若幹部分)的情況下,就需要按照by語句後的變數對數據先行排序,所以sort過程非常有用,而且非常常用。
sort過程的一般格式如下:
proc sort 選項列表;
by <descending> 變數名1 <變數名2 … 變數名n>;
run;
proc sort語句後各選項含義及其用法見下表(表1.3)。
表1.3 proc sort語句後各選項含義及其用法
選項
含義及用法
data=數據集名
用以指定sort過程所要處理的數據集,若省略則默認為最近建立或處理的數據集
date
此選項指定在不改變文件創建日期和修改日期的條件下對文件進行排序操作
out=數據集名
將排序後文件以指定的文件名存儲,原文件不進行任何修改,若無此選項則將原文件覆蓋
sortseq=排序依據
指定對字元型變數排序時依據的標准
reverse/equals/noequals
指定輸出數據中的排序方式,三者分別表示將字元變數的次序翻轉顯示,在排序變數的各水平內部次序保持不變,在排序變數的各水平內部允許次序的改變
nopkey/noprecs
指定重復變數的消除方式,前者表示除去排序變數值重復的記錄,後者表示除去所有變數值重復的記錄
sortsize=
用以指定可用最大內存的大小,等號後為表示內存大小的數值及單位,比如10m
force
用以強制執行重復排序(對已建立索引的文件排序)過程
tagsort
指定在臨時文件中僅存儲排序變數和記錄編號,以減少對磁碟空間的使用
by語句即用以指定排序所要依據的變數,變數可為數值型也可為字元型,其後可指定多個變數,sort過程在按照靠前的變數進行排序的情況下再按照靠後的變數進行排序。by語句中每個變數前可用descending/ascending選項來指定按照其排序的方式(降序或升序),默認狀態為升序。
(3)將數據文件輸出顯示的print過程
print過程的功能是將SAS數據集的記錄以一定的方式顯示到輸出設備(顯示屏),可以顯示其全部的變數或部分變數。利用此過程,你可以創建從簡單列表到可進行數據匯總的各種報告的各種不同的表單。
print過程的一般格式如下:
proc print 選項列表;
by <descending> 變數名1 <變數名2 … 變數名n 其他選項>;
pageby 變數名;
sumby 變數名;
id 變數名;
sum變數名;
var變數名;
run;
proc print語句後可跟的選項含義及其用法見下表(表1.4)
表1.4 proc print語句後選項含義及其用法
選項
含義及用法
contents=文本
用以指定html內容文件中指向輸出的鏈接的標識文本,等號後可為任何文本
data=數據集名
指定所要處理的數據集,等號後為數據集文件名
double
指定在相鄰的記錄間插入一空行
n=字元串
在報告的末尾或by變數各水平分組的末尾顯示顯示記錄的數目,並以等號後的字元串對其進行標識
noobs
禁止記錄編號在報告中的顯示
obs=列標題
用以指定記錄編號所在列的列標題
round
對未進行格式化的數值變數進行四捨五入,統一格式化為帶兩位小數的十進制數值
rows=page
規定頁面格式,目前』page』是此選項唯一可用的值,表示在每一頁中只顯示一條記錄的一行變數值,即一行中顯示盡可能多的記錄數
width=列寬度
指定列的寬度,可取的值有』full』,』minimum』,』uniform』,』uniformby』等,
heading=方向
取值可為v(vertical)或h(horizontal),表示列標題顯示的方向(橫向或縱向)
label
指定以變數標識作為相應的列標題,否則以變數名作為列標題
split=字元
首先此選項指定以變數標識作為列標題,以指定的字元作為列標題換行的標志
style=類型元素
指定報告中特定位置所要應用的類型元素(涉及很多內容,詳細內容略)
by語句在所有過程中的用法都相同,即將數據集分割為若干小數據集分別進行處理。pageby語句用來控制換頁時變數的顯示方式,對於其後所指定的變數,相同的值不會顯示在不同的頁中,該變數某一值的記錄在一頁的剩餘部分顯示不下時,則從該值的第一條記錄開始換行顯示。sumby語句的作用和pageby語句相似,只不過是將換頁的動作換為求和,對指定變數的每一值計算var變數的總計值。id語句的作用是用指定的變數值代替記錄編號對每一條記錄進行標識。sum語句用於指定報告中要進行求和操作的變數,var語句用於指定要在報告中顯示的變數。
以上過程作用較為普遍,使用頻率較高,有必要預先了解,以便於後面所討論內容的順利進行。
為節省篇幅,這里不進行實例演示。內容過於枯燥,可能的錯誤也難免,還請各位多多包涵。
SAS程序操作的大概情況就草草的這樣介紹一下吧,說得太多的話我怕各位沒有耐心看下去。更多的內容我想還是留在實際的例子中來介紹,這樣大家可以好好的切身體會一下,然後就會印象深刻,實際運用起來也就得心應手了。
『伍』 SAS課程作業
data tablename;
length varname 8;
input varname;
cards;
2
6
5
4
3
1
;
run;
proc sort data=tablename;
by sortvar;
run;
proc summary data=tablename nway missing;
var varname;
output out=outtablename mean=mean_varname;
run;
proc print data=outtablename;
run;
『陸』 sas proc sort 能夠一個升序 一個降序么
proc sort data=test out=new;
by var1 decending var2;
run;
『柒』 SAS統計軟體的問題~ 急~
proc contents 列印輸出SAS資料庫中的某一文件內容的描述信息。
libname 將你電腦硬碟上某一目錄同庫標記聯系起來,例如c:\sas\mydir,是物理存在的(即實際存在於你的硬碟上),你取一個庫名old,用old聯系c:\sas\mydir,是一種邏輯關系。下一步你就可以用data在這個庫里創建數據集。mydir是一文件夾。
filename 將一個外部文件的全名字與一個文件標記聯系起來,與上面的libname類似,也是一種邏輯關系,但這里是用於文件或某一輸出設備。然後就可以通過文件標記就可以訪問這個外部文件了,如用infile,file等程序語句訪問等。假設c:\sas\mydir下有個文件a.dat,a里有個變數叫var1。取個文件標記叫abc
filename abc 『 c:\sas\mydir\a.dat』;
data marker;/*work.marker*/
infile abc;
input var1;
run;
infile 其實不用多說,就是打開一個你電腦上的一個文件,從裡面讀東西。可以直接 infile 『c:\sas\mydir\a.dat';
proc reg不知道,沒見過。delimiter 分隔符。f 不知啥意思