日付の列からN日後の列を作成する(SPSS Modeler データ加工逆引き1-5)

# 日付の列からN日後の列を作成（日付の加算）

![スクリーンショット 2022-06-15 9.21.04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286322/2c768599-911b-d916-0a58-c0d77d622afe.png)

2023年12月にリリースしたModeler Ver18.5で直接利用可能な関数が追加されました。該当バージョン以降を利用する方は手順eから確認ください。

この記事は以下のブログをもとに作成されています。詳しく解説されていますのでご覧ください。

https://www.ibm.com/blogs/solutions/jp-ja/modeler-tips-08/

## 1.想定される利用目的
・入会日からN日後を特定し特徴量作成の材料にする
・部品が設備に取り付けられてからN日後のチェックポイントを求め特徴量の材料にする

## 2.サンプルストリームのダウンロード

https://github.com/yoichiro0903n/blue/blob/main/after_some_days.str?raw=true

## 3.サンプルストリームの説明

![スクリーンショット 2024-01-12 13.25.32.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286322/1fb7ac23-8fc1-8333-88b1-a4ae804413de.png)

a.入力するデータは以下の通りです。
![スクリーンショット 2022-06-15 9.37.58.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286322/4ccc7eed-5320-91ca-06e4-d443946e5d1d.png)

#### Ver18.4以前の方法

b.[フィールド作成]ノードを編集します。「Modelerデータ加工Tips#08」で説明されている通り、まず1900年1月1日を基準日（設定変更可能）として、そこから起算日が何秒経過しているのか[datetime_in_seconds（フィールド）]で求めます。次に7日分の秒数を加えて、最後に[datetime_day(フィールド)]で日付に戻します。
![スクリーンショット 2022-06-15 9.38.58.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286322/aa0a9e1d-3925-4493-6e66-3adc29c2945d.png)

式ビルダーの日付関数を利用すると簡単に入力できます。
![スクリーンショット 2022-06-15 9.49.49.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286322/127dd169-c086-f0de-be22-7a7cfc55e84f.png)

c.月をまたぐ場合にはうるう月の配慮が必要です。

![スクリーンショット 2022-06-15 9.58.22.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286322/3c09d464-151d-b21e-a455-19649dedc4eb.png)

コード（CLEM式）は以下の通り。

https://qiita.com/416nishimaki/items/8445c56337ef296368d8#modeler%E3%83%87%E3%83%BC%E3%82%BF%E5%8A%A0%E5%B7%A5tips08-%E3%82%B5%E3%83%B3%E3%83%97%E3%83%AB%E3%82%B3%E3%83%BC%E3%83%89

d.月をまたぐ場合をスーパーノードでパラメータから利用できるようにします。

![スクリーンショット 2022-06-15 10.02.25.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286322/cb64338e-a1db-23f6-67b7-2ac509b06323.png)

![スクリーンショット 2022-06-15 10.04.32.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286322/cef6e559-f7e2-20d3-d47c-1deee5adac3a.png)

コード（CLEM式）は以下の通り。

https://qiita.com/416nishimaki/items/8445c56337ef296368d8#modeler%E3%83%87%E3%83%BC%E3%82%BF%E5%8A%A0%E5%B7%A5tips08-%E3%82%B5%E3%83%B3%E3%83%97%E3%83%AB%E3%82%B3%E3%83%BC%E3%83%89

[テーブル]を確認します。Nヶ月後は7ヶ月後で表示しています。
![スクリーンショット 2022-06-15 10.08.14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286322/1c3e936f-2393-d3b8-f282-7c78fc828464.png)

#### Ver18.5以降の方法

e.[フィールド作成]ノードを編集します。関数date_add_daysを利用します。

![スクリーンショット 2024-01-12 13.35.24.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286322/6fecedc0-4003-05d6-289f-1d3dded3e6b4.png)

f.[フィールド作成]ノードを編集します。関数date_add_monthsを利用します。

![スクリーンショット 2024-01-12 13.36.56.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286322/29cebd46-2864-eae7-6434-153e440cb5a6.png)

g.[フィールド作成]ノードを編集します。関数date_add_yearsを利用します。

![スクリーンショット 2024-01-12 13.37.42.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286322/b3a0daf7-2e13-ca3e-cdef-67c1c7d0c4a1.png)


#### 注意事項

うるう年かどうかは、西暦が４で割り切れる（ただし100では割り切れず、400では割り切れる）の条件を使うため割り算した余り（剰余）を求める関数remを利用しています。（「Modelerデータ加工Tips#08」より引用）


## 4.参考情報

#### スーパーノードとパラメーターを詳しく説明した記事

https://www.ibm.com/blogs/solutions/jp-ja/spssmodeler-push-node-20/

#### 日付の加算減算

https://qiita.com/kawada2017/items/c41f443e5246d331bea1#9m-%E6%97%A5%E4%BB%98%E3%81%AE%E5%8A%A0%E7%AE%97%E6%B8%9B%E7%AE%97modeler%E7%89%88

#### よく使う「日付と時間」関数

https://qiita.com/Makimaki2020/items/72e3b774039327fa4ac4

#### SPSS Modeler ノードリファレンス目次

https://qiita.com/416nishimaki/private/503037195081d3323eee

#### SPSS Modeler 逆引きストリーム集（データ加工）

https://qiita.com/416nishimaki/private/4bf813e6cba84b2a1008