こんにちは、DXCEL WAVEの運営者(@dxcelwave)です!
こんな方におすすめ!
- SASプログラミングによる日付型データの変換方法を詳しく学びたい!
- DATE型とDATETIME型の相互変換方法が知りたい!
- 文字列型とDATE/DATETIME型の相互変換方法が知りたい!
目次
【参考】データ型・フォーマットの変換方法
本記事では日付型のデータに着目し、様々なデータ型変換手法を解説します。
日付だけでなく、数値や文字列等のデータ型変換に際しても本サイトで解説しています。その際よく用いるINPUT関数・PUT関数の使い方について詳しく知りたい方はこちらの記事をご覧ください。
					あわせて読みたい
					
			
						【SAS】データ型・フォーマットの変換方法|INPUT・PUT関数概要
						INPUT関数およびPUT関数を用いて、SAS変数のデータ型・フォーマットを変換する方法について詳しく解説します。					
				【SAS】文字列型を日付型データに変換
文字列型のデータ項目を日付型のデータに変換する方法について解説します。
DATE形式の文字列型変数をDATETIME・DATE型に変換
DATE形式の文字列型変数をDATETIMEおよびDATE型に変換したい場合、次のように記述します。
コード
/* 
=====================================================
サンプルデータの作成
=====================================================
*/
DATA SampleData;
  input date_string$CHAR10.;
  datalines;
	01JAN2022
	02JAN2023
	03JAN2024
;
RUN;
/* 
=====================================================
フォーマット変換
=====================================================
*/
DATA SampleData;
	/* データセットを指定 */
	SET SampleData;
	
	/* anydtdte20.を使用してdatetime型に変換 */
	datetime_value = input(date_string, anydtdte20.);
	
	/* 時間を00:00:00に設定 */
	datetime_value = dhms(datetime_value, 0,0,0);
	
	/* date型のデータ作成 */
	date_value = DATEPART(datetime_value);
	
	/* フォーマット */
	format datetime_value datetime19. 
		   date_value date9.;
RUN;
/* 出力 */
PROC PRINT DATA=SampleData;
RUN;出力イメージ
Obs	date_string	    datetime_value	date_value
1	  01JAN2022	01JAN2022:00:00:00	 01JAN2022
2	  02JAN2023	02JAN2023:00:00:00	 02JAN2023
3	  03JAN2024	03JAN2024:00:00:00	 03JAN2024DATETIME形式の文字列型変数をDATETIME・DATE型に変換
DATETIME形式の文字列型変数をDATETIME、DATEおよびTIME型に変換したい場合、次のように記述します。
コード
/* 
=====================================================
サンプルデータの作成
=====================================================
*/
DATA SampleData;
  input datetime_string $CHAR19.;
  datalines;
	01JAN2022:12:30:00
	02JAN2023:11:40:10
	03JAN2024:10:20:20
;
RUN;
/* 
=====================================================
フォーマット変換
=====================================================
*/
DATA SampleData;
	/* データセットを指定 */
	SET SampleData;
	
	/* anydtdtm19.を使用してdatetime型に変換 */
	datetime_value = input(datetime_string, anydtdtm19.);
	
	/* date型の項目作成 */
	date_value = DATEPART(datetime_value);
	
	/* time型の項目作成 */
	time_value = TIMEPART(datetime_value);
	
	/* フォーマット */
	format datetime_value datetime19. 
		   date_value date9.
		   time_value time8.;
RUN;
/* 出力 */
PROC PRINT DATA=SampleData;
RUN;出力イメージ
Obs	   datetime_string	    datetime_value	date_value	time_value
1	01JAN2022:12:30:00	01JAN2022:12:30:00	 01JAN2022	  12:30:00
2	02JAN2023:11:40:10	02JAN2023:11:40:10	 02JAN2023	  11:40:10
3	03JAN2024:10:20:20	03JAN2024:10:20:20	 03JAN2024	  10:20:20【SAS】日付型を文字列型データに変換
日付型のデータ項目を文字列型のデータに変換する方法について解説します。
DATE型を文字列型に変換
DATE型変数を文字列型に変換したい場合、次のように記述します。
コード
/* 
=====================================================
サンプルデータの作成
=====================================================
*/
DATA SampleData;
  format date date9.;
  informat date anydtdte.;
  input date;
  datalines;
	01JAN2022
	02JAN2022
;
RUN;
/* 
=====================================================
フォーマット変換
=====================================================
*/
DATA SampleData;
	/* データセットを指定 */
	SET SampleData;
	
	/* date型を文字列型に変換 */
	date_str = PUT(date, date9.);
	
	/* データ型確認 */
   	date_str_type  = VTYPE(date_str);
    putlog "date_str_type: " date_str_type;
RUN;
/* 出力 */
PROC PRINT DATA=SampleData;
RUN;出力イメージ
Obs	     date	 date_str	date_str_type
1	01JAN2022	01JAN2022	           C
2	02JAN2022	02JAN2022	           CDATETIME型を文字列型に変換
DATETIME型変数を文字列型に変換したい場合、次のように記述します。
コード
/* 
=====================================================
サンプルデータの作成
=====================================================
*/
DATA SampleData;
  format datetime datetime19.;
  informat datetime anydtdte19.;
  input datetime;
  datalines;
	01JAN2022:12:30:00
	02JAN2022:11:40:10
;
RUN;
/* 
=====================================================
フォーマット変換
=====================================================
*/
DATA SampleData;
	/* データセットを指定 */
	SET SampleData;
	
	/* date型を文字列型に変換 */
	datetime_str = PUT(datetime, datetime19.);
	
	/* データ型確認 */
   	datetime_str_type  = VTYPE(datetime_str);
    putlog "date_str_type: " datetime_str_type;
RUN;
/* 出力 */
PROC PRINT DATA=SampleData;
RUN;出力イメージ
Obs	          datetime	      datetime_str	datetime_str_type
1	01JAN1960:06:17:26	01JAN1960:06:17:26	               C
2	01JAN1960:06:17:27	01JAN1960:06:17:27	               C【SAS】DATE型とDATETIME型の相互変換
DATE型とDATETIME型の変数を相互変換する方法について解説します。
DATE型をDATETIME型に変換
DATE型変数をDATETIME列型に変換したい場合、次のように記述します。
コード
/* 
=====================================================
サンプルデータの作成
=====================================================
*/
DATA SampleData;
  format date date9.;
  informat date anydtdte.;
  input date;
  datalines;
	01JAN2022
	02JAN2022
;
RUN;
/* 
=====================================================
フォーマット変換
=====================================================
*/
DATA SampleData;
	/* データセットを指定 */
	SET SampleData;
	
    /* date型 → datetimeに変換 */
    datetime = dhms(date, 0, 0, 0);
    format datetime datetime20.;
RUN;
/* 出力 */
PROC PRINT DATA=SampleData;
RUN;出力イメージ
Obs	     date	          datetime
1	01JAN2022	01JAN2022:00:00:00
2	02JAN2022	02JAN2022:00:00:00DATETIME型をDATE型およびTIME型にそれぞれ変換
DATETIME型変数をDATE列型に変換したい場合、次のように記述します。
コード
/* 
=====================================================
サンプルデータの作成
=====================================================
*/
DATA SampleData;
  format datetime_value datetime19.;
  input datetime_value  datetime19.;
  datalines;
	01JAN2022:12:30:00
	02JAN2022:13:40:10
;
RUN;
/* 
=====================================================
フォーマット変換
=====================================================
*/
DATA SampleData;
	/* データセットを指定 */
	SET SampleData;
	
	/* DATE型部分のみ抽出 */
	date_value = DATEPART(datetime_value);
	
	/* TIME型部分のみ抽出 */
	time_value = TIMEPART(datetime_value);
	
	/* フォーマット */
	format date_value date9. time_value time8.;
RUN;
/* 出力 */
PROC PRINT DATA=SampleData;
RUN;出力イメージ
Obs	    datetime_value	date_value	time_value
1	01JAN2022:12:30:00	 01JAN2022	  12:30:00
2	02JAN2022:13:40:10	 02JAN2022	  13:40:10【参考】SASプログラミング記事一覧
当サイトではSASを用いたプログラミング解説記事を多数掲載しております。
SASはデータ処理・分析をはじめ、高度な統計解析や機械学習・AIによる予測モデリングなど様々な用途に利用できます。また金融や医療を代表とする様々な業界の分析業務で広く活用されています。
最後に

お問い合わせフォーム
上記課題に向けてご気軽にご相談下さい。
お問い合わせはこちら


