簡體   English   中英

SAS PROC SQL; -創建DateTime變量

[英]SAS PROC SQL; - creating DateTime variable

我試圖通過連接PROC SQL中的DATE變量(以DATE格式)和time變量(字符串hh:mm:ss)來創建過去3個小時的datetime變量;

非常感謝您提供任何幫助!

例:

APPLCTN_DT  =  05NOV2018:00:00:00.000 
APPLCTN_TM  =  20:04:57

我想根據上述內容創建一個數字DATETIME字段

假定_DT變量實際上是一個datetime值,沒有確切的時間部分(因此只有日期)。

使用DATEPART提取SAS日期值,使用INPUT將時間字符串轉換為時間值,使用DHMS構造目標日期時間值,使用INTNX計算與目標之間的新日期時間值偏移量。

data _null_;
  APPLCTN_DT  =  '05NOV2018:00:00:00.000'dt ;
  APPLCTN_TM  =  "20:04:57";

  date_part = datepart(applctn_dt);
  time_part = input(applctn_tm,time8.);

  target_dt = dhms(date_part,0,0,0) + time_part;


  target_minus_3hr_dt = intnx ('dthour'
    , dhms(date_part,0,0,0) + time_part
    , -3
  );

  target_minus_3hr_exact_dt = intnx ('dtsecond'
    , dhms(date_part,0,0,0) + time_part
    , -3*60*60
  );


  format target: datetime20.;

  put target_dt ' combined';
  put target_minus_3hr_dt ' combined, 3 hours ago';
  put target_minus_3hr_exact_dt ' combine, exactly three hours ago (to the second)';
run;

將顯示在日志中

05NOV2018:20:04:57  combined
05NOV2018:17:00:00  combined, 3 hours ago
05NOV2018:17:04:57  combine, exactly three hours ago (to the second)

由於看起來您的“日期”變量實際上是零時間的DATETIME變量,您也許可以將時間部分添加到其中?

new_datetime =  APPLCTN_DT + input(APPLCTN_TM,time8.);

或者為了安全起見,您可以在添加時間部分之前將datetime值的時間部分強制為零。 這有兩種方法。

new_datetime =  dhms(datepart(APPLCTN_DT),0,0,input(APPLCTN_TM,time8.));
new_datetime =  intnx('dtdate',APPLCTN_DT,0) + input(APPLCTN_TM,time8.);

實際上,您的代碼接近結果,我認為您忘記了將SAS日期格式轉換為顯示格式。

在變量target_minus_3hr_dt和target_minus_3hr_exact_dt中使用put函數,因為SAS日期顯示為數字,所以我們需要使用put函數進行傳輸。

 data _null_;
APPLCTN_DT  =  '05NOV2018:00:00:00.000'dt ;
APPLCTN_TM  =  "20:04:57";

date_part = datepart(applctn_dt);
time_part = input(applctn_tm,time8.);

target_dt = put(date_part,date9.)||applctn_tm;


target_minus_3hr_dt = put((intnx ('dthour'
  , dhms(date_part,0,0,0) + time_part
  , -3
)),datetime20.);

target_minus_3hr_exact_dt = put((intnx ('dtsecond'
  , dhms(date_part,0,0,0) + time_part
  , -3*60*60
)),datetime20.);


put target_dt ' combined';
put target_minus_3hr_dt ' combined, 3 hours ago';
put target_minus_3hr_exact_dt ' combine, exactly three hours ago (to the second)';
run;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM