# DS2

# if-then/elseステートメント

<https://documentation.sas.com/doc/ja/pgmsascdc/v_061/ds2ref/p1swn0a4ufdvn3n1e67d75roy6ns.htm>

# do untilステートメント

条件が真になるまで、処理をループする。
<https://documentation.sas.com/doc/ja/pgmsascdc/v_061/ds2ref/p0p2sapr15j0z4n14o4b0v1i2xb7.htm#n0y0tj44j79ow1n15beup6finonl>

```
proc ds2;
  data _null_;
    method run();
      k = 1;
      do until(k > 6);
         k = k + 1;
      end;
    end; /* method end*/
  enddata;
end;
```

# methodステートメント

<https://documentation.sas.com/doc/ja/pgmsascdc/v_061/ds2ref/p0vkktkd156jhqn11izdgfpg0hou.htm>

# dataステートメント

<https://documentation.sas.com/doc/ja/pgmsascdc/v_061/ds2ref/n1ew9uzutoyamjn1kzz8f194xhes.htm>

# selectステートメント

CASE文を記述する。
<https://go.documentation.sas.com/doc/ja/pgmsascdc/v_061/ds2ref/n01kskkbawu6isn1vee8uw50jzvu.htm>

- 基本の書き方
  - `select(variable); when(1) 処理1; when(2) 処理2; end;`
- 個別の処理行が1行に収まらないときは、do; 〜 end;で括る。
  - `select(variable); when(1); do; 処理1; end; when(2); do; 処理2; end; end;`
- どれにも該当しないときの処理行は、whenの代わりにotherwiseで記述する。

**▼基本の書き方**
``` sas
  select(variable);
    when(1) 処理1;
    when(2) 処理2;
  end;`
```

**▼個別の処理行が1行に収まらないとき**
``` sas
  select(variable);
    when(1); do;
      処理1-1;
      処理1-2;
      処理1-3;
    end;
    when(2) 処理2;
  end;`
```


**▼より細かい条件式で分岐したいとき**

``` sas
  mon = 'JUN';
  temp = 30
  select;
    when (mon in ('JUN', 'JUL', 'AUG') and temp > 28);
      put 'SUMMER ' mon=;
    when (mon in ('MAR', 'APR', 'MAY'));
      put 'SPRING ' mon=;
    otherwise;
      put 'FALL OR WINTER ' mon=;
  end;
```

# jsonパッケージ > getNextTokenメソッド

<https://documentation.sas.com/doc/ja/pgmsascdc/v_061/ds2ref/n1qnsau40tm51pn169k767jyw7is.htm>

# httpパッケージ > executeMethodメソッド

<https://documentation.sas.com/doc/ja/pgmsascdc/v_061/ds2ref/n1we0n5bkmxyj3n1oglx8is6ogqo.htm>

# httpパッケージ > setResponseBodyCharacterSetメソッド

UTF-8を指定したいときは、 `http_pkg.setResponseBodyCharacterSet('UTF-8')`とする。

[https://documentation.sas.com/doc/ja/pgmsascdc/v_061/ds2ref/n057ts3z5uqaemn1vtd7vayor79q.htm](https://documentation.sas.com/doc/ja/pgmsascdc/v_061/ds2ref/n057ts3z5uqaemn1vtd7vayor79q.htm)

# httpパッケージ > addSASOAuthTokenメソッド

<https://documentation.sas.com/doc/ja/pgmsascdc/v_061/ds2ref/p0wc0obw28cy6wn1q8kvblfjf6vc.htm>

# YYMMDDxw. 出力形式

`yyyy-mm-dd`や`yyyy/mm/dd`といった形式でSAS日付値を出力する。
<https://documentation.sas.com/doc/ja/pgmsascdc/v_061/ds2ref/n02pxkowzaiavfn1lwe6v95ps5pg.htm>

# BESTw. 出力形式

<https://documentation.sas.com/doc/ja/pgmsascdc/v_061/ds2ref/p06s6plgjq7rugn1fdf0sckkz0hx.htm>

# 式の演算子

<https://documentation.sas.com/doc/ja/pgmsascdc/v_061/ds2pg/p0vinswrxk1819n1qizkibfin0cy.htm>

### 算術演算子

|演算子|機能|
|-|-|
|+|加算|
|-|減算|
|*|乗算|
|/|除算|
|**|累乗|
|><|左辺右辺の最小値を取得|
|<>|左辺右辺の最大値を取得|

### 関係演算子
関係を満たすとき(True)は1、そうでないとき(False)は0を返す。  
（データグリッド関数等で指定する際は、単一引用符`'`で括る）

|演算子|機能|
|-|-|
|=, eq|等しい(Equal)|
|^=, ~=, ne|等しくない(Not Equal)|
|>, gt|より大きい(Greater Than)|
|>=, ge|以上(Greater Equal)|
|<, lt|より小さい(Lesser Than)|
|<=, le|以下(Lesser Equal)|

### 論理演算子

|演算子|機能|備考|
|-|-|-|
|not, ^, ~|論理否定|`not ～`のように前置する。|
|or, \|, !|論理和|
|and, &|論理積|

### IN演算子
リスト内に存在しているかどうかを判定する

|式|入力値|判定値|
|-|-|-|
|`a in (1, 2, 3)`|a = 1| 1(True)|
|`a not in (1, 2, 3)`|a = 1| 0(False)|

### その他の演算子


|内容|演算子|
|-|-|
|文字列を結合する|\|\|, !!|

# DS2言語の予約語

<https://documentation.sas.com/doc/ja/pgmsascdc/v_061/ds2pg/p1rnsddd78roken1tlwnfk4poavl.htm>

# leaveステートメント

ループ処理を中断し、ループの外の処理を継続する。

<https://documentation.sas.com/doc/ja/pgmsascdc/v_061/ds2ref/p1irdset32xggmn1c7dwqmthxvnd.htm>