跳到主要內容

python與SAS資料處理入門--格式轉換

 當匯入的資料格式並非分析時所需的格式時,就需要事先進行轉換。

 舉個最常見的例子,在資料處理時常常會遇到日期資料以為文字格式做儲存,如下圖所示,生日的部分為文字格式並非日期格式,分析上往往需要的是年齡變項,必須透過生日計算年齡。但是當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之後設定日期格式


當然,實務上會遇到需要轉換成不同形式的日期格式,並不會種是這麼單純,因此以下彙整SASpython日期格式的表示。

 

Python 程式

%Y

4位數的年

%y

2位數的年

%m

2位數的月[01,12]

%b

英文月份簡寫

%B

英文月份完整寫法

%d

2位數的日[0131]

%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.

 


留言