【SAS】様々な日付関数活用方法|YEAR・MONTH・TODAY・INTCK・INTNX

当ページには広告が含まれています。

こんにちは、DXCEL WAVEの運営者(@dxcelwave)です!

こんな方におすすめ!
  • SASプログラムで活用できる様々な日付関数の活用方法が知りたい!
目次

【SAS】対象日付から年・四半期・月・日・曜日を抽出する方法

対象日付YYYY-MM-DDをもとに各種日付要素を抽出する方法について解説します。

【事前準備】サンプルデータセット読込

後述では次のようなサンプルデータを活用します。SASプログラムの先頭に記述しましょう。

/* 
=================================================================
サンプルデータ作成
=================================================================
*/

DATA test_db;
   INPUT date yymmdd10.;
   FORMAT date yymmdd10.;
   DATALINES;
2023/01/01
2022/02/05
2021/03/06
2020/04/09
2019/05/10
2018/06/11
;
RUN;

【実践】YEAR・QTR・DAY・WEEKDAY関数による日付抽出

対象日付から年・四半期・月・日・曜日を抽出する場合、次のようなコードで実現できます。

コード

DATA test_db2;

	/* 対象データ指定 */
	SET test_db;
	
	/* 項目追加 */
	date_year    = YEAR(date);     /* 対象日付の年 */
	date_qtr     = QTR(date);      /* 対象日付の四半期 */
	date_month   = MONTH(date);    /* 対象日付の月 */
	date_day     = DAY(date);      /* 対象日付の日 */
    date_weekday = WEEKDAY(date);  /* 対象日付の曜日(1:日曜, 2:月曜, 3:火曜・・・) */
RUN;

/* 出力 */
PROC PRINT DATA=test_db2;
RUN;

出力イメージ

Obs	      date	date_year	date_qtr	date_month	date_day	date_weekday
1	2023-01-01	     2023	       1	         1	       1	           1
2	2022-02-05	     2022	       1	         2	       5	           7
3	2021-03-06	     2021	       1	         3	       6	           7
4	2020-04-09	     2020	       2	         4	       9	           5
5	2019-05-10	     2019	       2	         5	      10	           6
6	2018-06-11	     2018	       2	         6	      11	           2

【SAS】本日日付の取得

SASの関数を用いて本日日付を取得する方法について解説します。

コード

DATA test_db3;

	/* 項目追加 */
	date_today    = TODAY();     /* 本日日付取得方法(1) */
	date_today2   = DATE();      /* 本日日付取得方法(2) */
   
    /* フォーマット */
    FORMAT date_today date10. date_today2 date10.;
RUN;

/* 出力 */
PROC PRINT DATA=test_db3;
RUN;

出力イメージ

Obs	date_today	date_today2
1	 08FEB2024	  08FEB2024

【SAS】INTCK関数による2つ日付の差分計算

INTCK関数とは、2つの日付または時間の間の指定されたインターバル(期間)の数を計算するのに役立つ関数です。

【事前準備】サンプルデータセット

後述では次のようなサンプルデータを活用します。SASプログラムの先頭に記述しましょう。

/* 
=================================================================
サンプルデータ作成
=================================================================
*/

DATA test_db;
   INPUT date yymmdd10.;
   FORMAT date yymmdd10.;
   DATALINES;
2023/01/01
2022/02/05
2021/03/06
2020/04/09
2019/05/10
2018/06/11
;
RUN;

【実践】INTCK関数による2つの時期比較

INTCK関数を用いて2つの時期を比較し、差分計算する方法を以下に示します。

コード

DATA test_db4;

	/* 対象データ指定 */
	SET test_db;
	
	/* 項目追加 */
	TODAY       = TODAY();                       /* 本日日付 */
	YEARs_DIFF  = INTCK('YEAR', date, TODAY());  /* 対象日付と本日日付の差(年) */
	MONTHs_DIFF = INTCK('MONTH', date, TODAY()); /* 対象日付と本日日付の差(月) */
 	DAYs_DIFF   = INTCK('DAY', date, TODAY());   /* 対象日付と本日日付の差(月) */  
 	
    /* フォーマット */
    FORMAT TODAY yymmdd10.;
RUN;

/* 出力 */
PROC PRINT DATA=test_db4;
RUN;

出力イメージ

Obs	      date	     TODAY	YEARs_DIFF	MONTHs_DIFF	  DAYs_DIFF
1	2023-01-01	2024-02-08	        1	         13	        403
2	2022-02-05	2024-02-08	        2	         24	        733
3	2021-03-06	2024-02-08	        3	         35	       1069
4	2020-04-09	2024-02-08	        4	         46	       1400
5	2019-05-10	2024-02-08	        5	         57	       1735
6	2018-06-11	2024-02-08	        6	         68	       2068

【SAS】INTNX関数による対象日付前後の日付を取得

INTNX関数とは、指定された日付や時間の後(または前)の特定の日付を出力するのに役立つ関数です。

後述ではINTNX関数をもとに対象日付の同月の開始日と終了日等を取得する方法について解説します。

【事前準備】サンプルデータセット

後述では次のようなサンプルデータを活用します。SASプログラムの先頭に記述しましょう。

/* 
=================================================================
サンプルデータ作成
=================================================================
*/

DATA test_db;
   INPUT date yymmdd10.;
   FORMAT date yymmdd10.;
   DATALINES;
2023/01/01
2022/02/05
2021/03/06
2020/04/09
2019/05/10
2018/06/11
;
RUN;

【実践】INTNX関数による同月開始日・終了日の取得

INTNX関数を用いて対象日付の同月の開始日および終了日等を取得する方法を以下に示します。

コード

DATA test_db5;

	/* 対象データ指定 */
	SET test_db;
	
	/* フォーマット */
	FORMAT date yymmdd10. 
		   FIRST_DAY_OF_MONTH yymmdd10. 
		   LAST_DAY_OF_MONTH yymmdd10.
		   MIDDLE_DAY_OF_MONTH yymmdd10.
		   TWO_MONTHS_AGO yymmdd10. 
		   FIVE_DAYS_AGO yymmdd10.;
	
	/* 項目追加 */                                 
	FIRST_DAY_OF_MONTH  = INTNX('month', date, 0, 'BEGINNING'); /* 対象日付同月の開始日 */
	LAST_DAY_OF_MONTH   = INTNX('month', date, 0, 'END');       /* 対象日付同月の終了日 */
	MIDDLE_DAY_OF_MONTH = INTNX('month', date, 0, 'MIDDLE');	/* 対象日付同月の中央日 */
	TWO_MONTHS_AGO      = INTNX('month', date, -2, 'SAME');     /* 対象日付の2ヶ月前 */
	FIVE_DAYS_AGO       = INTNX('day',   date, -5);             /* 対象日付の5日前 */
RUN;

/* 出力 */
PROC PRINT DATA=test_db5;
RUN;

出力イメージ

Obs	      date	FIRST_DAY_OF_MONTH	LAST_DAY_OF_MONTH	MIDDLE_DAY_OF_MONTH	 TWO_MONTHS_AGO	  FIVE_DAYS_AGO
1	2023-01-01	        2023-01-01	       2023-01-31	         2023-01-16	     2022-11-01	     2022-12-27
2	2022-02-05	        2022-02-01	       2022-02-28	         2022-02-14	     2021-12-05	     2022-01-31
3	2021-03-06	        2021-03-01	       2021-03-31	         2021-03-16	     2021-01-06	     2021-03-01
4	2020-04-09	        2020-04-01 	       2020-04-30	         2020-04-15	     2020-02-09	     2020-04-04
5	2019-05-10	        2019-05-01	       2019-05-31	         2019-05-16	     2019-03-10	     2019-05-05
6	2018-06-11	        2018-06-01	       2018-06-30	         2018-06-15	     2018-04-11	     2018-06-06

【参考】SASプログラミング記事一覧

当サイトではSASを用いたプログラミング解説記事を多数掲載しております。

SASはデータ処理・分析をはじめ、高度な統計解析や機械学習・AIによる予測モデリングなど様々な用途に利用できます。また金融や医療を代表とする様々な業界の分析業務で広く活用されています。

最後に

この記事が気に入ったら
フォローしてね!

本記事をシェア!
目次