當匯入的資料格式並非分析時所需的格式時,就需要事先進行轉換。
舉個最常見的例子,在資料處理時常常會遇到日期資料以為文字格式做儲存,如下圖所示,生日的部分為文字格式並非日期格式,分析上往往需要的是年齡變項,必須透過生日計算年齡。但是當Birthday變項為文字格式時,在計算上就會遇到困難,必須優先進行格式轉換的處理。
以下的操作就以生日欄位為例進行格式轉換。以SAS進行日期格式轉換
基礎版,用substr做擷取
data id_date;set id;
Birth_date=mdy(substr(Birthday,5,2),substr(Birthday,7,2),substr(Birthday,1,4)) ;
format Birth_date yymmdd10.;run;
進階版,用input直接轉換
data id_date;set id;
Birth_date=input(Birthday, yymmdd8.) ;
format Birth_date yymmdd10.;run;
以Python進行日期格式轉換
id_list["Birth_date"] = pandas.to_datetime(id_list["Birthday"], format = '%Y%m%d') #format之後設定日期格式
當然,實務上會遇到需要轉換成不同形式的日期格式,並不會種是這麼單純,因此以下彙整SAS與python日期格式的表示。
|
Python 程式 |
|
年 |
%Y |
4位數的年 |
%y |
2位數的年 |
|
月 |
%m |
2位數的月[01,12] |
%b |
英文月份簡寫 |
|
%B |
英文月份完整寫法 |
|
日 |
%d |
2位數的日[01,31] |
時 |
%H |
時(24小時制)[00,23] |
%l |
時(12小時制)[01,12] |
|
分 |
%M |
2位數的分[00,59] |
秒 |
%S |
秒[00,61]有閏秒的存在 |
特殊表示 |
%w |
用整數表示的星期幾[0(星期天),6] |
%F |
%Y-%m-%d簡寫形式例如,2017-06-27 |
|
%D |
%m/%d/%y簡寫形式 |
SAS的格式邏輯則不像Python那麼直觀,SAS利用符號與數字來搭配表示對應的格式,以2020/8/1的日期為例:
|
Python |
SAS |
20200801 |
%Y%m%d |
yymmdd8. |
2020/08/01 |
%Y/%m/%d |
yymmdd10. |
如果遇到斜線的部分Python僅需要表示出斜線的位置即可,但在SAS上則是有明確對應的格式設定。因此以下整理幾個SAS常用的日期格式。
SAS 程式 |
|
日期呈現 |
Format 格式 |
20200801 |
yymmdd8. |
2020/08/01 |
yymmdd10. |
2020.08.01 |
yymmddp10. |
08/01/20 |
mmddyy8. |
01AUG2020 |
date9. |
留言
張貼留言