最近在做SAS轉碼,之前學過,但時間長了有所忘記,為了以後方便尋找,所以再次進行複習的時候,對SAS學習進行了簡單的記載。
SAS常用文法結構
SAS的變數的基本類型
第一:數值型
第二:字元型 變數名後必須使用$說明符
其他資料類型中,日期、時間等變數存為數值型,可以使任意的整數,定點實數、浮點實數等,一般使用8個位元組。字元變數預設的長度為8個字元,當然也可以通過length語句指定其長度。Length 字元型變數名 $ 長度
對資料處理兩大步驟:資料步和過程步
資料步 以data語句開始,以run語句結束;過程步以proc開始,以run語句結束。
libname 庫標記 '檔案夾位置' 選項;
假設C盤目錄下,有一個檔案夾"user",該檔案夾下有一個sas資料集為aa。
那麼就是這樣執行:
libname a 'c:\user';
proc print data=a.aa;
run;
資料庫分兩個永久庫和臨時庫:臨時庫就只有一個:名為WORK,永久庫有多個。
指定兩個庫標記:
SASUSER:
WORK:
每個資料集都有一個兩級名,第一級為庫標記,第二級是資料集名
格式如下: 庫標記.資料集名
DATA語句用於建立和處理資料集。作用有二:
第一:標誌資料步調開始
第二:命名將要建立的SAS資料集
格式: DATA 資料集名;的
INFILE 用於從外部檔案讀入資料,必須出現在INPUT語句之前,主要功能如下:
第一:確定一個包含未經處理資料的外部文字檔
格式:INFILE '外部檔案的所在位置及名稱' 選項;
CARDS語句,用於直接輸入資料,標誌著資料區塊的開始。
CARDS:
資料區塊
;
INPUT語句,用於向系統資料表明如何讀入每一條記錄,主要功能:
讀入由語句指定的資料列
為相應的資料域定義變數名
確定變數讀入模式
格式:
INPUT 變數名 [變數類型 起止列數] ....;
資料的兩種輸入方式:直接輸入和外部輸入
SAS程式塊
程式總是以PROC開頭,後面緊跟程式步名
常用步名如下:
SORT 將指定資料集按指定變數排序
PRINT 將資料集中的資料列表輸出
MEANS 對指定的數值變數進行簡單的統計描述
FREQ 對指定的分類變數進行簡單的統計描述
TTEST 對指定的變數做t檢驗
ANOVA 對指定的變數做方差分析
NPAR1WAY 對指定的變數做非參數校正
REG 對指定的變數做迴歸分析
CORR 對指定的變數做相關分析
CHART 繪出低解析度的統計圖
SQL 調用SQL語言
格式:
PROC 過程名 [data=資料集名] [選項];
該過程的專用語句描述;
[VAR 變數序列;]
[WHERE 條件運算式....;]
[BY 變數序列;]
RUN;
SAS各種常用隨機函數
| 隨機數函數名 |
作用 |
| UNIFORM(seed) |
產生(0,1)地區均勻分布隨機數,乘同餘發生器 |
| RANUNI(seed) |
產生(0,1)地區均勻分布隨機數,素數模發生器 |
| NORMAL(seed) |
產生標準常態分佈隨機數,利用中心極限定理近似公式 |
| RANNOR(seed) |
產生標準常態分佈隨機數,利用變換抽樣法 |
| RANEXP(seed) |
產生λ=1的指數分布隨機數 |
| RANGAM(seed,alpha) |
產生伽馬分布隨機數,alpha>0,seed為任意數值 |
| RANTRI(seed,h) |
產生三角分布隨機數,0<h<1,seed為任意數值 |
| RANCAU(seed) |
產生標準柯西分布隨機數 |
| RANBIN(seed,n,p) |
產生二項分布隨機數,n>0的整數,0<p<1,seed為任意數值 |
| RANPOI(seed,lambda) |
產生泊松分布隨機數,lambda>0,seed為任意數值 |
| RANTBL(seed,p1,…,p2,…pn) |
產生離散分布隨機數,0≤pi≤1,seed為任意數值 |
分支語句
if 條件 then 語句;
if 條件 then do 語句1;....語句n; end;
if 條件 then 語句; else 語句;
多分支結構:
select(選擇運算式);
when(值列表) 語句;
when(值列表) 語句;
.....
otherwise 語句;
end;
或
select;
when(條件) 語句;
when(條件) 語句;
.....
otherwise 語句;
end;
SAS過程步常用命令
title 指定標題
var 指定分析變數
class 指定分類變數
model 指定模型形式
means 產生簡單統計量
plot 繪製散佈圖
print 列出資料集內容
sort 按變數值進行排序
by 指定變數分組
output 指定輸出結果存放的資料集
Freq 指定一個重複變數
where 選擇資料集的子集
label 臨時標籤
我們這裡給出了RETAIN語句幾種常用的使用格式:
l Retain;
l Retain T1 T2 T3;
l Retain T1 T2 T3 100;
l Retain T1 T2 T3 (100 );
l Retain T1 T2 T3 (100 99 98 );
第一種使用格式表示用INPUT語句或指派陳述式建立的所有變數從DATA步的這次執行到下一次重複時被保留。第二種使用格式規定了變數名字,變數列表或數組名,它們的值是使用者想保留的。第三種使用格式表示一個變數列表T1、T2、T3接受同一個初始值100。第四種使用格式是將初始值100用小括弧括起來,SAS系統將分配括弧中的這個值給變數列表中的第一個變數,即T1=100,其它T2和T3為缺失值。第五種使用格式給出了初始值列表,將依此分配初始值列表中的值給變數列表中各個變數,即T1=100,T2=99,T3=98。
IN=選項
格式:SAS-data-set(IN=variable)
一個臨時的數字類型的變數,其值為0或1
IN選項,當讀入多個SAS資料集時,用IN選項可以確定本觀測資料來自那個資料集。
variable=0表示觀測不是來自本資料集
variable=1表示觀測是來自本資料集
SAS群集
PROC CLUSTER <資料集名> METHOD=NAME <options>;//必須語句
VAR
COPY
RMSSTD
ID
BY
FREQ
以上是可選擇語句
if語句
data;
if x>y then
put "x>y";
else
if x<y then
put "x<y";
else
put "x=y";
run;
for語句
do 計數變數=初始值 to 終止值 by 步長;
....;
end;
do while (迴圈條件運算式);
.....;
end;
do until (迴圈條件運算式);
.....;
end;
= eq
< lt
> gt
<= le
>= ge
<> ne
set語句 表示從那個資料集裡讀入資料
格式:set 資料集名;
刪除/增加變數或觀測值
data Car;
set SASUSER.Car;
drop ID;
run;
data Car;
set SASUSER.Car;
keep Q1 B1 B2;
run;
資料拆分
data SASUSER.Car_low SASUSER.Car_high;
set SASUSER.car;
select;
when (B1<=2) output SASUSER.Car_Low;
otherwise output SASUSER.Car_high;
end;
run;
資料合併有兩種:縱向和橫向
data SASUSER.Car_total;
set SASUSER.car_low SASUSER.car_high;
run;
proc sort=SASUSER.student_profile;
by ID;
run;
proc sort=SASUSER.student_score;
by ID;
run;
data SASUSER.student_total;
merge SASUSER.student_profile SASUSER.student_score;
by ID;
run;
proc print;run;
資料清洗
一般用proc sql的方式
資料修正
資料標準化
資料尺度變換 如:未經處理資料十分制變成百分制
資料更新 update
proc rank 其實最主要的是掌握那幾個選項,該proc 的整體文法結構如下:
proc rank <選項>;
var 變數;
ranks 新變數名字;
by 分組變數;
run;
這是一個整體的文法結構,舉例,比如說我要對sashelp中的height排名次:
proc rank data=sashelp.class out=result;
var height;
run;
很顯然就是這樣寫,用var來指定要排名次的變數,但是你運行該程式後會發現一個問題,就是原來的height的值都被名次代替了。如果我想保留原來的height值,那就需要用ranks語句了:
proc rank data=sashelp.class out=result;
var height;
ranks r_height;
run;
這樣原來的height變數就不會動,產生名次變數r_height,這就是ranks的作用。
例子:
proc rank descending out=oE11;
var compsit;
ranks rankcompsit;
proc sort; by rankcompist;
proc print data=oE11;
run;
均值
data;
x=mean(89,90,78,98,87,76,69,90,92,88);
put '均值=' x;
run;
均值統計裡有兩個概念:截尾均值和縮尾均值
前者是去掉最大N個和最小N值後的平均值
後者是最小的N個值用第N+1小的那個數值替換,同時也把最大的N個值用第N+1大的那個數值替換,然後計算均值
用univariate過程計算上述兩種均值
data null;
input score@@;
cards;
89 90 78 98 87 76 69 90 92 88
;
proc univariate data=null trimmed=2 winsorized=2;
var score;
run;
中位元
如果資料個數是奇數,中位元是處於正中心位置的數值;如果資料個數是偶數,中位元則是處於正中心位置的兩項資料的平均數
data;
x=median(89,90,78,98,87,76,69,90,92,88);
put '中位元=' x;
run;
分位元
就是分等分。在實際應用中四分位應用最為廣泛。
在SAS中 Q1表示處於25%,Q3表示處於75%
data null;
input score@@;
cards;
89 90 78 98 87 76 69 90 92 88
;
proc means data=null q3 q1;
var score;
run;
眾數
指資料中出現次數最多的數值。
data null;
input score@@;
cards;
190 188 188 185 183 183 180 180
180 180 177 175 175 174 173
;
proc univariate data=null modes;
var score;
run;
離散程度
集中趨勢概括資料可以使人們在大體上對資料產生初步的印象,但是這些指標對資料進行高度抽象的同時,也忽略了一些必要的資料資訊,使得
人們在某些情況下只能看到資料呈現出來的假象,而不能讀懂其真正的內在涵義。
指標有級差、平均差、四分位差、異眾比率、方差、標準差、標準誤差及離散係數
級差
是資料最大值減去最小值所得的差
data;
x=range(89,90,78,98,87,76,69,90,92,88);
put '級差=' x;
run;
四分位差
具體指第3個四分位元減去地1個四分位元得到的差
其值越小,說明中間的資料越集中
data null;
input score@@;
cards;
190 188 188 185 183 183 180 180
180 180 178 177 175 175 174 173
;
proc means data=null qrange;
var score;
run;
方差
用全體資料進行計算的,因此它反映了所有資料相對於資料中心發散的平均程度。方差的算術平方根就是標準差。
data;
x=var(89,90,78,98,87,76,69,90,92,88);
y=std(89,90,78,98,87,76,69,90,92,88);
put '方差=' x '標準差=' y;
run;
標準誤差
它的樣本均值的標準差。在進行資料抽樣中,由於隨機性的存在,採用同一種抽樣方法在不同的時間、地點、環境等條件下進行多次抽樣,可能得到多個不同的樣本資料。
標準誤差不是觀測值的實際誤差,也不是誤差範圍,它只是對一組觀測資料可靠性的估計。標準誤差越小,則觀測到可靠性大,反之則不大可靠。多數應用都用標準誤差來評價資料的測量精度。
data;
x=stderr(89,90,78,98,87,76,69,90,92,88);
put '標準誤差=' x;
run;
變異係數
變異係數是衡量相對離散程度的一個重要指標。具體是指一組資料的標準差與其相應的均值之比,變異係數越小,說明資料的離散程度越小。
舉例說明,身高和體重差異如何進行對比。直接採用標準差是無法進行對比的,因為標準差是帶有單位的,身高的單位是厘米,體重的單位是千克,不同的單位的統計量對比起來是沒有任何意義的。為此,採用變異係數來消除量綱即計量單位的影響,進行對比。
data;
height=cv(157,170,161,184,184,168,166,158,174,166,173,189,188,163,161,189,183,186,188,155);
weight=cv(61,71,74,59,71,55,73,66,50,57,48,68,73,52,60,56,53,67,73,64);
put '身高的變異係數=' height '體重的變異係數=' weight;
if height>weight then
put '身高比體重的差異大';
else
if height<weight then
put '身高比體重的差異小';
else
put '身高比體重的差異相當';
run;
分布形狀
在對資料進行概括性的分析時,考察集中趨勢和離散程度是兩個重要方面,但並非僅此而已。就像對一個人進行評價一樣,不僅要考察人的高矮情況,也考考察胖瘦情況,更要看看一個人是否站有站相,坐有坐相。對於資料的分布狀況,也要進行概括性的分析,才能掌握資料的全貌。
資料分布的測度主要考察資料分布的偏斜程度、扁平程度,以及資料分布是否對稱,其指標主要有偏度和峰度兩類。
偏度
是對資料分布對稱性的測度。通常採用三階中心矩的計算方法,其主要考察離差三次方之和與標準差的三次方的比例。
如果資料是對稱的,則偏度等於0;如果偏度明顯不等於0,則表明資料分布是非對稱的,具體地說,偏度大於0時,均值右邊的資料更為分散,表明資料右偏;偏度小於0時,均值左邊的資料更為分散,表明資料左偏。
data;
x=skewness(190,188,188,185,183,183,180,180,180,180,178,177,175,175,174,173);
put '偏度=' x;
run;
峰度
用來反映資料分布曲線頂端陡峭或偏平程度的指標。這裡所說的陡峭或偏平是針對標準常態分佈而言的。
data;
x=kurtosis(190,188,188,185,183,183,180,180,180,180,178,177,175,175,174,173);
put '峰度=' x;
run;
sas利用FREQ、MEANS、UNIVARIATE過程進行描述統計分析。
proc freq <選項>;
by 變數/變數列表;
exact 統計選項</計算選項>;
待續………………