【01】SAS初學者指南|從Data Step開始

什麼是Data Step?
SAS資料處理的心臟
主要用來進行資料處理的語法,包括建立資料、修改及轉換資料

什麼是DATA STEP?

SAS資料處理的心臟

主要用來進行資料處理的語法,包括建立修改轉換資料


Data Step與Proc Step

是SAS中用來進行資料處理的語法,由Data語法與依附在Data Step下的語法所組成

建立資料

建立單個/多個不同屬性資料集

修改

修改變數格式及標籤、觀察值

轉換

資料計算、重新分組

在SAS中,與之相對的是「Proc Step」,由程序(Procedure)所建立的語法,在官方的語法文件中你所看到的Proc開頭都是Proc Step。

Proc Step在SAS中擔任的角色主要是資料分析、圖表產出的功能,但其實它也能執行部分的資料處理功能哦!例如:Proc Transpose,它可以把資料在橫式與直式之間進行轉換。


Data Step程式碼

Data test;
  * --- Multiple Statements ---;
run;

以上是最簡單的Data Step程式碼:

  • Data為Data Step必要的keyword,也是告訴SAS我們要開始執行Data Step
  • test是指我們要透過Data Step來建立一個名為test的資料集(Dataset),但SAS的資料集命名有特別的規則必須遵守,其中一條是不得超過32個位元組
  • 中間灰底的字則是可以放入可以在Data Step中使用的各種語法
  • run是告訴SAS去執行以上的程式,並不是必要的,但可以用來幫助辨別不同區塊的Data Step

請注意到每行語法後方都有一個分號「;」,這個分號是告訴SAS這一句語法的結束,這一行語法又稱作Statement(敘述句),在上方的程式中共有2個敘述句「Data test;」與「run;」。


Phase

在背後運作分為兩個階段,Compile Phase(編譯階段)與Execution Phase(執行階段),執行順序是先執行Compile Phase後再執行Execution Phase

Compile Phase

顧名思義,在這個階段就是將程式碼編譯成SAS讀得懂的內容,在這裡我們並不需要去瞭解SAS把程式碼轉成什麼內容,只要知道在這一個階段中SAS做了什麼。

不管你是使用SAS base、SAS Enterprise Guide、SAS Studio,在按下「執行(run)」按鈕後:

  1. 檢查所執行程式碼是否有語法錯誤(Syntax Error),發生時終止目前執行程式,語法錯誤指的是不符合SAS規則的語法
  2. 在記憶體建立Input Buffer、Program Data Vector(PDV)、Descriptor Information這3個區塊

Execution Phase

SAS正式執行的階段,較Compile Phase複雜

  1. 讀取資料
    1. 資料來源是透過Input敘述句讀取非SAS資料集,繼續執行c
      1. 有>資料寫入Input Buffer,繼續執行ii
      2. 無>SAS自動建立2個變數(_N_、_Error_),將PDV所有變數設為遺漏值,將Input Buffer資料寫入PDV
    2. 資料來源為SAS資料集,繼續執行c
      • SAS自動建立2個變數(_N_、_Error_),PDV所有變數設為遺漏值,將資料直接寫入PDV
    3. 在Descriptor Information建立資料集的資訊,包含資料集與變數屬性
  2. 由上往下繼續執行其他可執行敘述句
  3. 碰到「run;」或是另一個Data Step、Procedure時,將該筆資料從記憶體寫入到新建立的資料集
  4. 反覆執行1~3直到沒有任何觀察值可以被讀取後,停止當前的Data Step

圖解

圖片來源:How the DATA Step Works: A Basic Introduction


實例

接下來我們以實例來拆解、說明每一步吧!

Data test;
  input No Gender $ Score;
  cards;
1 F 66
2 M 91
3 F 28
4 F 59
5 M 99
;  
run;

以上是使用3個變數、讀取cards敘述句以下5筆資料後,建立「test」SAS資料集的程式。

  1. 在開始讀取第1筆資料時,因為有使用到Input敘述句讀取非SAS資料集,所以先建立Input Buffer
  2. 依照所定義的屬性建立變數
  3. 將第1筆資料寫入到Input Buffer
  1. 依照Input敘述句的變數建立PDV
  2. 將PDV的變數設為遺漏值
  3. 自動變數_N_被賦值為1;自動變數_error_被賦值0
  1. 將資料從Input Buffer由左到右寫入到PDV
  2. 當這1筆資料的所有變數都被寫到PDV後,將這筆資料寫進新資料集
  1. 因為資料還有第2筆,所以會回到Data Step最上方準備讀取資料
  2. 自動變數_N_會自動+1
  3. 如果過程沒有出現錯誤,自動變數_Error_會被重設為0
  • 繼續將第2筆觀察值寫入Input Buffer
  1. 將資料從Input Buffer由左到右寫入到PDV
  2. 當這1筆資料的所有變數都被寫到PDV後,將第2筆資料寫進新資料集
  1. 反覆以上步驟,直到沒有資料可以被讀取時,SAS關閉資料集
  2. 向下執行其他Data Step或Procedure

參考資料:

How the DATA Step Works: A Basic Introduction

謝謝閱讀這篇文章,有問題歡迎在下方留言

Categories: Basic