當資料歸戶需要加總多筆數值或累計次數成為一筆資料時就會需要用到累加的處理。
我們在做資料處理時,經常拿到的資料並非整理完成可直接進行統計分析的檔案。資料的呈現可能是個流水帳的方式,也就是同一個ID或是歸戶編號會有多筆資料,而在分析上我們需要將資料整合成1筆,才能進行後續的處理。
² 情境1:就診次數
每次的就診紀錄就是1筆資料,但每個人可能會有不只一次的就診紀錄,如果我們需要分析每個人的平均就診紀錄時,就會需要累計這段時間的就診次數。
² 情境2:每月支出
另一個簡單好理解的範例是計算每個月的花費支出,每個月都有多次的消費支出紀錄,那如果需要知道每個月支出的總金額,就需要以月為歸戶單位,加總該月的花費。
以簡單例子進行操作
延續之前的資料,以手上這份滿意度調查問卷來操作,累計每個人填答的次數。
在進行累計的操作前必須十分清楚資料需要歸戶的單位。以情境1來說,歸戶的單位是人;情境2歸戶的單位是月份。
以SAS進行資料累計
- proc sort data= y_2019; by id Q_date; run; /*依照ID 跟填寫日期做排序*/
- data test; set y_2019;
- by id Q_date;
- if first.id then count=0; /*這邊會用到if…then的概念*/
- count+1;
- if last.id; /*保留最後1筆ID的資料*/
- keep id count;
- run;
這邊會需要用到排序的語法,在歸戶之前需要依照歸戶的單位進行排序。爾後使用if…then的概念進行累計,這部分可理解為,依照ID排序後,遇到每個不同ID的第一筆資料,count這個變項的數值就歸零,從新開始累計,每遇到相同的ID就加1。最後歸人,保留每個人最後1筆的資料。
執行完成後就可以得到每個人問卷填寫的次數。
以Python進行資料累計
- y_2019["count"]= y_2019['ID'].groupby(y_2019["ID"]).cumcount()
- y_2019=y_2019.drop_duplicates (subset=["ID"],keep="last") #歸筆,同ID保留最後1筆資料
- y_2019["count"]=y_2019["count"]+1 # cumcount()函數起始值為0,因此全體+1
- y_2019=y_2019[["ID","count"]]
Python跟SAS的區別:
(1) Python所使用的pandas套件在進行累計時,不需要先進行排序的動作。
(2) cumcount()函數起始值為0
不論是熟悉SAS或是Python的處理方式,只要能理解其中任一個運作的概念,就可以靈活運用在各種不一樣的情境中。
留言
張貼留言