CASTableにおける算出カラムの使い方

[SAS Viya](https://www.sas.com/ja_jp/software/viya.html)はAIプラットフォームです。PythonやJava、Rなどの言語を通して利用できます。そのSAS Viyaの中で使われているのがCASTableというテーブルオブジェクトです（CASはCloud Analytic Servicesの略です）。今回はCASTableで動的にカラムを追加する、算出カラムの使い方を解説します。

## データベースからテーブルを取得する

まずはSAS Viyaに接続します。

```py
import swat
conn = swat.CAS('server-name.mycompany.com', 5570, 'username', 'password')
```

次にCASTableを取得します。今回はIRISデータのCSVを利用します。

```py
tbl = conn.loadtable('data/iris.csv', caslib='casuser').casTable
```

## カラムを追加する

例えば sepal_length と sepal_width を足して2倍する、sepal_factorというカラムを追加します。

```py
tbl['sepal_factor'] = ((tbl.sepal_length + tbl.sepal_width) * 2)
tbl.head()
```

この内容は次のようになります。確かに計算され、新しいカラムが追加されています。

|   | sepal_length | sepal_width | petal_length | petal_width | species | sepal_factor |
|---|--------------|-------------|--------------|-------------|---------|--------------|
| 0 | 7.9 | 3.8 | 6.4 | 2.0 | virginica | 23.4 |
| 1 | 7.7 | 2.6 | 6.9 | 2.3 | virginica | 20.6 |
| 2 | 7.7 | 2.8 | 6.7 | 2.0 | virginica | 21.0 |
| 3 | 7.7 | 3.0 | 6.1 | 2.3 | virginica | 21.4 |
| 4 | 7.7 | 3.8 | 6.7 | 2.2 | virginica | 23.0 |

さらにカラムを追加します。

```py
tbl['total_factor'] = tbl.sepal_factor + tbl.petal_width + tbl.petal_length
tbl.head()
```

|   | sepal_length | sepal_width | petal_length | petal_width | species | sepal_factor | total_factor |
|---|--------------|-------------|--------------|-------------|---------|--------------|--------------|
| 0 | 7.9 | 3.8 | 6.4 | 2.0 | virginica | 23.4 | 31.8 |
| 1 | 7.7 | 2.6 | 6.9 | 2.3 | virginica | 20.6 | 29.8 |
| 2 | 7.7 | 2.8 | 6.7 | 2.0 | virginica | 21.0 | 29.7 |
| 3 | 7.7 | 3.0 | 6.1 | 2.3 | virginica | 21.4 | 29.8 |
| 4 | 7.7 | 3.8 | 6.7 | 2.2 | virginica | 23.0 | 31.9 |

単なる文字列のカラムも追加できます。

```py
tbl['names'] = 'sepal / petal'
tbl.head()
```

|   | sepal_length | sepal_width | petal_length | petal_width | species | sepal_factor | total_factor | names |
|---|--------------|-------------|--------------|-------------|---------|--------------|--------------|-------|
| 0 | 7.9 | 3.8 | 6.4 | 2.0 | virginica | 23.4 | 31.8 | sepal / petal |
| 1 | 7.7 | 2.6 | 6.9 | 2.3 | virginica | 20.6 | 29.8 | sepal / petal |
| 2 | 7.7 | 2.8 | 6.7 | 2.0 | virginica | 21.0 | 29.7 | sepal / petal |
| 3 | 7.7 | 3.0 | 6.1 | 2.3 | virginica | 21.4 | 29.8 | sepal / petal |
| 4 | 7.7 | 3.8 | 6.7 | 2.2 | virginica | 23.0 | 31.9 | sepal / petal |

動的に追加したカラムを使って、さらに動的なカラムを追加します。

```py
tbl['cap_names'] = tbl.names.str.title()
tbl.head()
```

|   | sepal_length | sepal_width | petal_length | petal_width | species | sepal_factor | total_factor | names | cap_names |
|---|--------------|-------------|--------------|-------------|---------|--------------|--------------|-------|-----------|
| 0 | 7.9 | 3.8 | 6.4 | 2.0 | virginica | 23.4 | 31.8 | sepal / petal | Sepal / Petal |
| 1 | 7.7 | 2.6 | 6.9 | 2.3 | virginica | 20.6 | 29.8 | sepal / petal | Sepal / Petal |
| 2 | 7.7 | 2.8 | 6.7 | 2.0 | virginica | 21.0 | 29.7 | sepal / petal | Sepal / Petal |
| 3 | 7.7 | 3.0 | 6.1 | 2.3 | virginica | 21.4 | 29.8 | sepal / petal | Sepal / Petal |
| 4 | 7.7 | 3.8 | 6.7 | 2.2 | virginica | 23.0 | 31.9 | sepal / petal | Sepal / Petal |

## まとめ

SQLでも同様に計算したカラムを追加できますが、CASTableでは計算したカラムを使って、さらにカラムを追加できます。複雑な計算処理を行ったカラムも簡単に実現できますので、皆さんの分析に役立ててください。

[SAS for Developers | SAS](https://developer.sas.com/home.html)