# SAS Tips

# データグリッド関数

# DATAGRID_DUMPTOLOG関数

<https://go.documentation.sas.com/doc/jp/edmcdc/v_056/edmdatagrids/p1da42svmyhzygn1r1f2uq10ntsh.htm>

# DATAGRID_GET関数

<https://go.documentation.sas.com/doc/jp/edmcdc/v_056/edmdatagrids/n04ham6nlknk8ln17nuk76nue4vw.htm>

# DATAGRID_ADDROW関数

<https://go.documentation.sas.com/doc/jp/edmcdc/v_056/edmdatagrids/n109izonc0diazn0z2gy6wqehync.htm>

# Base言語

# proc ds2ステートメント

<https://documentation.sas.com/doc/ja/pgmsascdc/v_061/proc/n0ox2hnyx7twb2n13200g5hqqsmy.htm>

# do untilステートメント

条件が真になるまで、処理をループする。
<https://documentation.sas.com/doc/ja/pgmsascdc/v_061/lestmtsref/p1021qt3a3n8m2n1vh11ggzhu57n.htm>

# E8601DZw.d 入力形式

`yyyy-mm-ddThh:mm:ss+|–hh:mm.<fffff>` または `yyyy-mm-ddThh:mm:ss.<fffff>Z` 形式の日時値を入力する。
<https://documentation.sas.com/doc/ja/pgmsascdc/v_061/leforinforref/p14nbxgmr6gn7tn1ntmuulgawrih.htm>

関連: E8601DZw. 出力形式 <https://documentation.sas.com/doc/ja/pgmsascdc/v_061/leforinforref/n1nvxddoqjof57n1r6j02unvwm8o.htm>

# tzoneu2s関数

UTC日時値をSAS日時値へ変換する。
<https://documentation.sas.com/doc/ja/pgmsascdc/v_061/lefunctionsref/n1ien0skr1u9swn1f00w7hizdg9c.htm>

``` sas
data work.test;
  input create_dt_utc $30.;
datalines;
2025-11-27T05:07:21.474Z
;
run;

data work.test_plus9h;
  attrib create_dt format=NLDATM.;
  set work.test;
  create_dt = tzoneu2s(input(create_dt_utc, e8601dz26.3), 'AZIA/TOKYO');
run;
```

- 関連
  - [E8601DZw.d 入力形式](https://bookstack.nonoha.me/books/sas-tips/page/e8601dzwd)
  - [NLDATMw. 出力形式](https://bookstack.nonoha.me/books/sas-tips/page/nldatmw)

# DATETIMEw.d 出力形式

`ddmmmyy:hh:mm:ss.ss` 形式でSAS日時値を出力する。

<https://documentation.sas.com/doc/ja/pgmsascdc/v_061/leforinforref/n0av4h8lmnktm4n1i33et4wyz5yy.htm>

# NLDATMw. 出力形式

現在のSASロケールに適した形式(ja環境では `yyyy/mm/dd hh:mm:ss`)で、形式でSAS日時値を出力する。

<https://documentation.sas.com/doc/ja/pgmsascdc/v_061/leforinforref/n0sf71zwqc9ioln1er0qqrlmku7r.htm>

# where= データセットオプション

<https://documentation.sas.com/doc/ja/pgmsascdc/v_061/ledsoptsref/p0ny9o8t8hc5zen1qn3ft9dhtsxx.htm>

# set句で読み込む行の条件を指定する

[where=データセットオプション](https://bookstack.nonoha.me/books/sas-base/page/where) を使用する。

# 列名を変更してデータセットを読み込む

[rename=データセットオブション](https://bookstack.nonoha.me/books/sas-base/page/rename) を使用する。

# 文字列を置換する

- [tranwrd関数](https://bookstack.nonoha.me/books/sas-base/page/tranwrd) を使用する。

# 外部ファイルの存在を確認する

- dataステップ内で [fileexist関数](https://bookstack.nonoha.me/books/sas-base/page/fileexist) を使用する。

# dataステップ内でマクロ変数に値を代入する

`call symputx("マクロ変数名", 格納したい値)`で代入する。

# ソートせずにbyステートメントを使用する

byステートメントに`notsorted`オプションを付与する。

```
data A1;
  set Q1;
  retain GROUP 0;
  by val notsorted;
  if first.val then GROUP + 1;
run;

```

# データセットの概要やメタ情報を確認する

```
proc contents data=sashelp.class;
run;

```

# DS2コードでCASにテーブルを読み込む

[table.loadTableアクション](https://bookstack.nonoha.me/books/sas-base/page/tableloadtable)を用いる。

```sas
proc cas;
  session casauto;
  table.loadTable / 
    sourceCaslib = "mylib" /* 左辺は caslib でも可 */
  , path = "inputdata.sas7bdat"
  , casout = {
      caslib = "public"
    , name = "target_table_name"
    , replace = true
    };
  run;
quit;

```

# CASテーブルをセッションスコープからグローバルスコープへ昇格する

[table.promoteアクション](https://bookstack.nonoha.me/books/sas-base/page/tablepromote)を用いる。

```

```

# SAS Studioでproc ds2内のログを出力

```
dcl package logger logr( 'App.TableServices.d2pkg.HTTP' );
logr.log( 3, '--- Beginning of response headers ---' );

```

- 例: HTTPからJSONテキストを読み取り、SASデータセットを作成する 
    - [https://documentation.sas.com/doc/ja/pgmsascdc/v\_061/ds2ref/n02kfrlpntte7qn1fpoe7krc5pdu.htm](https://documentation.sas.com/doc/ja/pgmsascdc/v_061/ds2ref/n02kfrlpntte7qn1fpoe7krc5pdu.htm)
- ロガーパッケージの使用 
    - [https://documentation.sas.com/doc/ja/pgmsascdc/v\_061/ds2pg/n1vcyhfhq2l0p4n1x3ggi7i6g0aa.htm#p0s5zz2h1heltcn1lbr3780zq5kx](https://documentation.sas.com/doc/ja/pgmsascdc/v_061/ds2pg/n1vcyhfhq2l0p4n1x3ggi7i6g0aa.htm#p0s5zz2h1heltcn1lbr3780zq5kx)

# CASE文を記述したい

⇒ [selectステートメント](https://bookstack.nonoha.me/books/sas/page/select)

# 日付値の取り扱い

```sas
proc ds2;
  data _null_;
    method run();
      dcl varchar(50) timestamp_str;
      dcl double sas_dt_value;
      dcl varchar(50) sas_dt_value_NLDATM;
      dcl varchar(50) sas_dt_value_yymmddn8;
      dcl varchar(50) sas_dt_value_yymmdds10;

      timestamp_str = '2025-11-12T13:19:33.482Z';
      sas_dt_value = inputn(timestamp_str, 'E8601DT.');

      sas_dt_value_NLDATM = putn(sas_dt_value, 'NLDATM.');
      sas_dt_value_yymmddn8. = putn(datepart(sas_dt_value), 'yymmddn8.');
      sas_dt_value_yymmdds10. = putn(datepart(sas_dt_value), 'yymmdds10.');

      put sas_dt_value=;
      put sas_dt_value_NLDATM=;
      put sas_dt_value_yymmddn8=;
      put sas_dt_value_yymmdds10=;
    end;
  enddata;
run;
quit;
      

```

# CAS

# IFN 関数

- <https://documentation.sas.com/doc/ja/pgmsascdc/v_061/proccas/n1v6aoomm10yxnn1mf4407trgk90.htm>
- <https://documentation.sas.com/doc/ja/pgmsascdc/v_061/lefunctionsref/n0l3n5z2h31h7wn1fmnqd33ibhap.htm>

# 新規ページ

### データグリッド内の値を取得する

<details id="bkmrk-datagrid_get%E9%96%A2%E6%95%B0-datag"><summary>DATAGRID\_GET関数</summary>

```sas
DATAGRID_GET(データグリッド変数, '取得対象の列名', 取得対象の行番号)

```

[https://go.documentation.sas.com/doc/jp/edmcdc/v\_056/edmdatagrids/n04ham6nlknk8ln17nuk76nue4vw.htm](https://go.documentation.sas.com/doc/jp/edmcdc/v_056/edmdatagrids/n04ham6nlknk8ln17nuk76nue4vw.htm)

</details>### データグリッドに行を追加する

<details id="bkmrk-datagrid_addrow%E9%96%A2%E6%95%B0-da"><summary>DATAGRID\_ADDROW関数</summary>

```sas
DATAGRID_ADDROW(データグリッド変数, <任意>追加する行数)

```

下記のように記述すると「追加した行は今何行目にあるか」を取得することができる。  
（関数の返り値として整数が返ってくる為）

```sas
datagrid_rownum = DATAGRID_ADDROW(dataGrid);

```

[https://go.documentation.sas.com/doc/jp/edmcdc/v\_056/edmdatagrids/n109izonc0diazn0z2gy6wqehync.htm](https://go.documentation.sas.com/doc/jp/edmcdc/v_056/edmdatagrids/n109izonc0diazn0z2gy6wqehync.htm)

</details>### データグリッドの内容をログに出力する

<details id="bkmrk-datagrid_dumptolog%E9%96%A2%E6%95%B0"><summary>DATAGRID\_DUMPTOLOG関数</summary>

```sas
DATAGRID_DUMPTOLOG(データグリッド変数)

```

[https://go.documentation.sas.com/doc/jp/edmcdc/v\_056/edmdatagrids/p1da42svmyhzygn1r1f2uq10ntsh.htm](https://go.documentation.sas.com/doc/jp/edmcdc/v_056/edmdatagrids/p1da42svmyhzygn1r1f2uq10ntsh.htm)

</details>