時間的運算是許多研究中會遭遇到的問題,特別是探討值大夜班,或工作至翌日凌晨的職業醫學之相關研究。今日將介紹時間的資料格式與相關的函數,且依2種情形進行時間計算:

1. 計算24小時內的時間差

2. 跨夜的時間差

 

再依時間是否與日期結合,分為3種狀況:

1. 若時間與日期為不同變項

2. 若時間與日期已結合為同一個變項

3. 僅有時間資料(只能計算24小時的時間差,無法計算跨夜的時間差)

 

在介紹函數之前,先介紹SAS中的時間格式

SAS_Time_Function  

 

【若時間與日期為不同變項】

以下的例子為時間與日期為不同變項的情況,但一般打卡鐘會將日期與時間結合,就不需要繁複的資料處理將兩者結合起來,但還是要依實際的資料型態作決定。

 

(程式說明)

cards輸入1筆資料,共4個變項,包含2個日期(date1, date2)2個時間(time1, time2)資料。這4個變項為外部資料,必須藉由轉換為SAS格式後,方可讀入。

input指令後方,指定讀入的每個變項之資料型態,透過指定資料格式,即可轉換為SAS格式。

由於時間與日期是不同變項,因此需要透過DHMS(date, hour,munite, second)含數將兩者結合在一起,這個函數的argument(參數)必須有4個,包括date, hour,munite, second,所以需要將時間拆解成hour,munite, secondHOUR(), MUNITE()為取時間中的小時與分鐘,因外部資料檔無秒數資料,參數中的second直接以0取代。

兩者結合後,即可計算20144/1623:5020144/1706:00的時間差,此時,可利用INTCK('時間單位',起始時間, 結束時間),且指定時間差為HOUR,可算出兩時間點相差幾小時,指定時間差為MUNITE,可算出兩時間點相差幾分鐘,若想知道相差幾小時又幾分鐘的分鐘,則須另外計算

最後利用format指定所有輸出到output視窗中的日期與時間之SAS格式,如此, 才可理解這些變項所代表的日期或時間意義。

 

data cc;

         input date1:yymmdd10.  time1:time5.  date2:yymmdd10.  time2:time5.;
                  hour1=
hour(time1); munite1=minute(time1);
                  hour2=
hour(time2); munite2=minute(time2);
                  datetime1=
dhms(date1,hour1,munite1,0); 
                  datetime2=
dhms(date2,hour2,munite2,0);                  

                  mm=intck('munite',datetime1,datetime2); /*-兩時間點相差幾分鐘-*/
                  hour=intck('HOUR',datetime1,datetime2);/*-兩時間點相差幾小時-*/
                  mumite=(mm/60-hour)*60; /*--相差幾小時又幾分鐘的分鐘*/

cards;
2014-04-16 23:50 2014-04-17 06:00
;
proc print;
format date1 date2 yymmdd10. time1 time2 time5. datetime1 datetime2 datetime13.;
run;

 

 結果

SAS_Time_Function(1)   

 

【若時間與日期已結合為同一個變項】

以下例子之時間與日期已結合為同一個變項,只需利用intck( )函數計算時間差即可

 

data cc;

         input datetime1:datetime13. datetime2:datetime13. ;
                  mm=intck('munite',datetime1,datetime2); /*-兩時間點相差幾分鐘-*/
                  hour=intck('HOUR',datetime1,datetime2);/*-兩時間點相差幾小時-*/
                  mumite=(mm/60-hour)*60; /*--相差幾小時又幾分鐘的分鐘*/
cards;
16APR14:23:50 17APR14:06:00
;
proc print;
format datetime1 datetime2 datetime13.;
run;

 

 結果

SAS_Time_Function(2)  

 

【僅有時間資料】

以下例子無日期資料,SAS資料格式為time5.,因為無日期,無法計算跨夜時間差,只可計算24小時內的時間差,此時,起始時間為06:00,結束時間為23:50

 

data cc;
input time1:time5. time2:time5. ;
         mm=intck('munite',time1,time2); /*-兩時間點相差幾分鐘-*/
         hour=intck('HOUR',time1,time2);/*-兩時間點相差幾小時-*/
         mumite=(mm/60-hour)*60; /*--相差幾小時又幾分鐘的分鐘*/
cards;
06:00 23:50
;
proc print;
format time1 time2 time5.;
run;

 

 結果

SAS_Time_Function(3)  

 

arrow
arrow
    文章標籤
    SAS 時間函數 時間格式
    全站熱搜
    創作者介紹
    創作者 estat 的頭像
    estat

    以斯帖統計顧問公司

    estat 發表在 痞客邦 留言(0) 人氣()