跳到主要內容

發表文章

目前顯示的是 3月, 2020的文章

Python與SAS資料處理入門-檔案合併(1)

檔案合併目的就是資料整合,透過列合併增加資料總筆數,例如不同年份的資料整合,或是透過欄合併增加欄位數。 有時候資料為了紀錄方便或是避免檔案的訊息量太大太雜,會將不同年份或是不同類型的資訊分開成不同的資料檔儲存。對於即將跨入大數據的讀者,必須要摒棄那種到手的檔案應該要包含所有資訊的概念,因為通常取得的檔案不可能囊括了所有需要的資訊,很大的情況是,訊息分布在不同的檔案。 如果是收案的資料確實可以簡單的依據所需要的資訊設計欄位,但是更多的情況是來自於已經存在的大型資料庫,舉例來說 : 健保資料庫就是個很好的例子,依據類型可以簡單分成門診、住院、藥局等資料庫,由於資料龐大,因此不同類型的資料又依據年分拆成小檔。所以這時候就會需要用合併來彙整處理好的資料。 合併的概念 以簡單的例子進行操作 假設手上有 2 種檔案 : 1.     參與滿意度調查受試者的基本資料 : 裡面包含年齡、性別等資訊 2.     2018-2019 年生活品質調查結果 ( 這份問卷可於受試者回診時重複施測,屬重複測量的資料 ): 裡面包含每次受訪日期以及問卷填答結果。 接下來,分別以 SAS 及 Python 進行操作示範,將檔案進行合併,關於軟體的基本概念可參閱 上一篇內容 。 以 SAS 進行列合併 ( 縱向堆疊 ) 將 2018 年跟 2019 年生活品質調查結果合併 proc sort data = y_all; set y_2018 y_2019; run ; 在進行 set 時要注意資料的結構, 欄位寬度不同時進行堆疊,會以寫在最前面的為主 。舉例來說,如果 y_2018 的資料 Q1 欄位長度為 1 ,而 y_2019 的資料 Q1 欄位長度設定為 2 ,這兩個檔在進行合併時會以寫在前的欄位長度為主。 欄位屬性不同時無法堆疊 ,例如 y_2018 的資料 Q1 欄位為數值格式, y_2019 的資料 Q1 欄位則為文字格式,要 set 兩個檔案,系統會出現錯誤訊息,因此務必注意欄位屬性是否一致。 以 Python 進行列合併 ( 縱向堆疊 ) 將 2018 年跟 2019 年生活品質調查結果合併,同樣會 用到 pandas 套件 。

Python與SAS資料處理入門-檔案合併(2)

上一篇文章已介紹完列合併的部份,這邊就不再贅述,直接開始介紹欄合併怎麼執行。 以 SAS 進行欄合併 ( 橫向堆疊 ) 將基本資料中的性別、年齡等資料併入 2018 年的生活品質調查結果,進行橫向堆疊操作。 欄合併的部分在 SAS 會有 2 種常用做法,一個是用 merge 合併,另一個則是用 SQL 的方式合併,以下分別依序說明。 ü    merge 合併       這部分務必記得, merge 前要先排序 ( 不知道的可以點這 )(proc sort) 做排序, 不       然系統會出現錯誤訊息無法執行。 proc   sort   data =id_list; by  id; run ; proc   sort   data =y_2018; by  id; run ; data  combine_2018; merge  y_2018 id_list; by  id; run ; 透過 by 告訴程式依照 ID 做合併,也就是 ID 一樣的話就將基 本資料串上。 ü      SQL 合併   proc sql ; create table combine_2018 /* 新創建的表格名稱 */ as select a. *, b. * /* 選擇表格所需的欄位, a.* 表示選擇 a 的所有欄位 */ from y_2018 as a full join id_list as b on a.id=b.id; /* 合併的方式,與 merge 中的 by 同樣意思 */ quit ; SQL 的語法有些不同,一開始可能會有些不太習慣,不過 SQL 合併的好處是檔案 不需先排序 ,可直接進行 DataFrame 合併。 ü   進階整理 實務上可能會遇到存在於 A 檔的人, B 檔卻沒有記錄的情況,當要併檔的資料不見得一致時就必須要指定以哪個檔案為主作欄位合併,因此在基礎概念後帶入更進階的觀念「 主從關係」 。 此外,使用 SAS 合併欄位的時候要注意併檔的資料間是否有 相 同的欄位名稱 ,以免 欄位覆蓋 。如果有重複的欄位名稱 merge 語法會以後面重複的欄位覆蓋前面的欄位, sql 則是前蓋後,也就是以前面的欄位為