2022年9月21日水曜日

SAS/ACCESSでIn-Database処理になるか?確認する方法

 SAS/ACCESSのデータベースを乗り換えたときに、WHERE句の関数がプッシュダウンされているか知りたいという問合せがあった。DBの種類にもよるかもしれないが、OBS=1 を指定すると SQLにLMIT=1が効く場合がある。これでSASログを確認してプッシュダウンされない部分を特定していく。

options sastrace=',,t,d' sastraceloc=saslog stsuffix obs=1;
proc sql;
  create table x as select * from hoge.xyz;
quit;
options sastrace=off obs=max;

2022年5月9日月曜日

SAS マクロ変数 /READONLY

2015年の新機能ですが、見落としていました。
マクロ変数の値を READONLY にして定数化できるのね。

https://support.sas.com/resources/papers/proceedings15/SAS1575-2015.pdf

2022年5月4日水曜日

SAS Viya CLI 入門 / SAS Viya REST API 入門

SAS Viya CLIの入門として資料を書き起こしました。CLIを使ってViyaのシステムを管理したい人向けです。内容を以下に示します。

  • SAS Viya CLIのインストール
  • プロファイル設定
  • プラグインを使った操作
  • OAuthプラグインでクライアントの登録
  • SAS Viya CLI + jq
  • curl + SAS Viya REST APIs
  • SAS Viya REST API 最初に見るポイント
時間があるときに以下の項目を足そうかと考えています。
  • SASコンテンツのフォルダ作成と権限の設定

いやいや、動いているのを見たいんだよと言う方は下の動画をご覧ください。




2022年4月19日火曜日

PROC COMPAREでライブラリ参照名を定義しなくてもOK

バージョンアップ案件において、データセットの比較をするときにライブラリ参照名を定義しなくても比較はできます。 あと、比較するときはスクリプトでPROC COMPAREを生成してそれをSASから実行するのが良いです。後から特定の変数を外す、ソート順を変える、数値の比較の精度を変更するといった個別の修正がやりやすいから。 
title "!SASROOT/sashelp/class.sas7bdat";

proc compare
  base="!SASROOT/sashelp/class.sas7bdat"(drop=age) 
  compare="!SASROOT/sashelp/class.sas7bdat";
run;

title;

2022年4月8日金曜日

REST APIでViya4でジョブのステータス一覧を取得する

sas-viya CLIでジョブのステータス一覧を取るのは面倒です。なのでREST APIを使って一覧を作ります。サンプルのコードでは日付のフィルタ、ジョブの終了条件のフィルタ、日時で降順ソートして最大1000件のデータを取得しています。
前提としては sas-viya のCLIでprofile init, auth loginを実行済みであることです。
 
$ export ACCESS_TOKEN=$(cat ~/.sas/credentials.json | jq -r '.Default."access-token"')
$ export URL=https://viya4.example.com/jobExecution/jobs
$ curl -k "${URL}?limit=1000&filter=and(ge(creationTimeStamp,2022-04-07),ne(state,"completed"))&orderby=endTimeStamp" -H "Authorization: Bearer $ACCESS_TOKEN"   | jq -r '.items[] | [.state, .id, .jobRequest.name, .endTimeStamp, .creationTimeStamp, .modifiedTimeStamp, .elapsedTime, .createdBy, .modifiedBy, .error.message, .error.errorCode ]'
下が実行したときの画面イメージです。sas-viyaのCLIは困ったときに助かることも多いのですが、まとめてデータを取得するには不利です。curlとjqが使えればも応用の幅が広がります。

 

2022年3月14日月曜日

マクロ変数にURLのパラメータを設定する例

 SASでREST APIを使うときにアンパサンドのエスケープでしばし悩んだのメモしておきます。URLの後ろにクエリパラメータを書くときに必要になります。&はマクロ変数を展開するときの目印であるので、これが展開されないように工夫します。で、いろいろ試したのですが1回で代入ではなく、2回の代入と関数の組み合わせで動きました。1回の代入でとも思いますが、通常URLはベースの部分とパラメータの部分に分かれるので、変数を分けた方が可読性が良いです。

%nrstrで変数Yに割り当ててから、%strでもう一度変数Zに代入しています。


追記: クエリのパラメータは PROC HTTPのオプションの機能を使う方がスマートだと判りました。以下の記事を参照してください。
http://sasutility.blogspot.com/2022/10/proc-http.html

2021年12月10日金曜日

Windows SAS9.4のサービス起動/停止のスクリプト using PowerShell

 UNIXだとsas.serversありますがWindowsにはありません。なかなか使い勝手の良いスクリプトが無かったのですが、PowerShellで書かれているサービス起動/停止のスクリプトがありました。このスクリプト、特に設定は無しでGet-ServiceでSASのサービスを探して、起動順序に従って処理してくれます。

Start/Stop all SAS Services in Windows using PowreShell