SAS學習筆記

來源:互聯網
上載者:User

最近在做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 統計選項</計算選項>;

 

 

 

待續………………
 

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.