跳到主要內容

python與SAS資料處理入門--資料排序


排序目的是將原本沒有依次序排列的資料,依照特定的順序進行排列。

一般在做資料清理時會將散亂的資料進行排序,如果大家有使用excel的經驗,應該都有使用過排序的功能,例如研究上探討患者做完治療後生活品質的變化,在患者做完治療的當下以及每次回診時固定請患者自填生活品質測量問卷,然而每個患者收案或是回診的時間都不一樣,所以資料建檔時可能會長這樣:








編號為每個患者的識別代號,填寫日期為問卷填寫的時間,由上圖可以看到,同一個患者不同填寫時間的資料是分散的,因此excel處理上會用排序將同一個患者的資料依照時間先後整理在一起(如下圖),但是在小型資料上excel還可以處理,但是當資料筆數太多時excel顯然就不是那麼適用了。 

接下來,延續上次的主軸,分別以SASPython進行操作示範,關於軟體的基本概念可參閱上一篇內容。上一篇有提到命名規則,因此讀取資料前務必確認符合規則,以這例子來說必須先做名稱轉換,為了同時適用SASPython的操作,重新簡單命名如下:

SAS進行資料排序
proc sort data= test; by id Q_date; run; /*依照ID 跟填寫日期做排序*/


一般SAS排序的default設定為ascending(升冪)排序,但如果要更改排序方式為降冪,則需要要改變排序的變數前面下descending指令
proc sort data= test; by id descending Q_date; run; /*改變變數Q_date的排序方式為降冪*/

讀者可以透過範例圖的呈現看出排序差異。

Python進行資料排序


test.sort_values(["ID","Q_date"],ascending=False, inplace=True)  # inplace=True表是取代目前的資料


這邊要注意的一點是,如果沒有下inplace=True,那麼排序後的結果不會回存到test檔案上,test維持排序前的樣貌。

PythondefaultSAS一樣以ascending當作設定值,如果不要ascending排序,下ascending=False指令可使排序方式改為descending。除了可以統一設定所有排序的欄位為升冪或是降冪排序外,同樣可以透過ascending參數分別設各個欄位的排序方式,如下所示:

test.sort_values(["ID","Q_date"],ascending=[True, False], inplace=True)


留言