2018年11月9日金曜日

Windows PCにPython/SWATを導入して、Titanicのサンプルを実行する

仕事でSAS Viya3.4とPython/SWATの導入を行うことになりました。Viyaのインストールは人任せですが、Python/SWATは勉強がてら自分のノートPCに入れてみました。Anaconda、Python/SWATとDLPyをインストール、サンプルのTitanicを動かすところまで試します。

まずは、Anacondaを検索してインストーラをダウンロードします。


インストーラに従って、Anacondaを入れます。途中でmicrosoft VSCodeを入れるか質問されましたが、スキップします。PATHを書き換えるかどうか質問されますが、これは書き換えません。複数バージョン使うために、PATHには入れないという解説がどこかにありまました。

15-20分ほど掛かってインストールできたら、WindowsのスタートメニューからAnacondaが入っていることを確認します。


次に、Python/SWATとDLpyをインストールします。スタートメニューにある、Anacond Promptを起動し、pipコマンドでインストールします。 具体的なコマンドは画面イメージを参照してください。
DLPyも同じようにpipコマンドで、インストールします。 もしwisted 18.7.0 requires PyHamcrest>=1.9.0, which is not installed. というようなメッセージでたら、pip install -U PyHamcrest でアップグレードしてください。

次に、サンプルのコードをGibHubから引っ張ってきます。URLは画面イメージを参照してください。右側の緑のボタンでダウンロードして、Desktopに展開します。


Windowsのスタートメニューから Jupyter Notebookを選択します。

Jupyter NotebookのFileタブから、 Desktopに展開したsas-viya-programming-master\python\titanic\TitanicExample.ipynb を開きます。

 Viyaのサーバーに接続する箇所を修正します。具体的な箇所は画面イメージを参照してください。
最初のセル(import numpyの部分)を選択して、再生ボタンをポチポチおすと処理が進んでいきます。

2018年10月24日水曜日

メタデータに登録されているDefaultAuthのログインを変更する。

SAS9のメタデータを操作するときの資料の在りかをメモしておきます。

ユーザのADドメインが変更されるときに、DefaultAuthのログインを書き換える必要があります。10人ぐらいだと手でもできますが、数百人を手作業だと時間もかかかるのと、確実性に欠けます。で、SASプログラム書いてメタデータ書き換えるのに参考となる資料が、SAS® 9.4 LanguageInterfaces to Metadata,Third Edition です。

この中にあるサンプル、PROC PRINT of Logins Data Setが役立ちます。メタデータからログインの情報を検索して、データセット化してくれます。この中に書き換えるログインの名前、オブジェクトIDを特定できます。オブジェクトのIDが判れば、metadata_setattrでURI、項目、値を指定してあげれば書き換えできます。

オブジェクトの項目は様々で探すのが面倒です。そんなときには以下の記事が役立ちます。昔ながらのDMS又はSMCのツールから、メタデータオブジェクトの情報を検索できます。

2018年8月28日火曜日

データステップにデータセット名ではなく、パスを直接書く

データステップの書き方で、データセット名ではなくファイルのパスを直接書けます。これは、同僚に教えてもらいました。マニュアルを見ると、以下のようにTIPSとして記述がありました。 Tips:Instead of using a data set name, you can specify the physical pathname to the file, using syntax that your operating system understands. The pathname must be enclosed in single or double quotation marks.

1          data "/var/tmp/mylib/class";
2               set sashelp.class;
3               keep age name;
4          run;

NOTE: There were 19 observations read from the data set SASHELP.CLASS.
NOTE: The data set /var/tmp/mylib/class has 19 observations and 2 variables.
NOTE: DATA statement used (Total process time):
      real time           0.01 seconds
      cpu time            0.01 seconds


NOTE: SAS Institute Inc., SAS Campus Drive, Cary, NC USA 27513-2414
NOTE: The SAS System used:
      real time           0.08 seconds
      cpu time            0.03 seconds

% ls -l /var/tmp/mylib
-rw-rw-r-- 1 sas sas 131072  8月 28 17:39 2018 class.sas7bdat

2018年5月9日水曜日

カタログにSASプログラムを格納するサンプル

カタログにプログラムを格納するサンプルです。探したら良い例が見つからなかったのでメモしておきます。

/* ディレクトリにあるMM_MISC.sasをカタログに格納する */
filename there '/tmp' ;
libname mylib '/tmp/sashelp' ;

%let trialcode = MM_MISC;
%let catname = modelmgr;

data _null_ ;
    filename mycat catalog "mylib.&catname" lrecl= 256 ;
    file   mycat("&trialcode..source") ;
    infile   there("&trialcode..sas") ;
    input ;
    put _infile_ ;
run;

proc catalog c=mylib.&catname;
    contents;
run;
quit;

/* 格納したプログラムを読み込む */
filename chkinit catalog "mylib.&catname..&trialcode..source";
%include chkinit;


2018年5月2日水曜日

カタログに含まれているソースコードを1ずつ取り出してファイルに保存

カタログの中に含まれているソースコードを、1つずつ取り出してディレクトリに出力するマクロです。Model ManagerのAPIの中身を見るために、書きました。

/* ソースコードをファイルに出力するマクロ */
%macro _myfile(catalog=, memname=, dir=);
 data _null_;
  infile "&catalog..&memname..source" catalog;
  file "&dir./&memname..sas";
  input;
  put _infile_;
 run;
%mend;

/* カタログに含まれているソースコードをディレクトリに出力するマクロ */
%macro extract_source(in=, dir=);
 %local out memname;

 data;
  stop;
 run;

 %let out=&SYSLAST;
 %let memname=%substr(&out, 6); 

 proc catalog catalog=∈
    contents out=&out;
 run;

 data _null_;
  set &out(keep=name type);
  where type eq 'SOURCE';
  attrib catalog length=$32;
  attrib dir length=$128;
  catalog = "&in";
  dir = "&dir";
  call execute('%_myfile(catalog='||catalog||", memname="||name||", dir="||dir||")");
 run;

 proc datasets lib=work nolist;
  delete &memname;
 quit;
%mend;

%extract_source(in=sashelp.modelmgr, dir=/var/tmp);

2018年4月17日火曜日

SAS9.4 TS1M5 - VARCHARのデータ型

同僚から聞いたネタです。
TS1M5の新機能でVARCHARが加わったそうです。資料を探したら、日本語の新機能とWhat's Newに記載ありました。

SAS9.4の新機能

What's New in SAS 9.4 National Language Support

使い方はこれから勉強です。

2018年4月5日木曜日

SAS Environment Manager 2.5 - 使いどころ

製品紹介から引用したSAS Environment Managerの説明 

SAS Environment Managerは、SAS配置の新しいモニタリングと管理システムです。リソースの自動検出、リモートシステムのモニタリング、個人用ダッシュボードと役割ベースダッシュボード、アラート、視覚化などの機能が実装されています。中間層とSAS Server層の両層のサーバーに対する、Webベースの管理、操作、事前予防型のモニタリングを提供します。SAS Environment Managerには、エンタープライズレベルの操作機能を提供するために、VMwareのHypericテクノロジの一部が組み込まれています。

私の説明

もしあなたが以下の条件に当てはまるならば、SAS Environment Managerの利用を推奨します。あまり浸透していないようですが、構築および運用で役立つ機能です。

  • SAS 9.4 Intelligence platform構成でかつ複数サーバ構成 
  • システムの安定稼働で監視が必要
  • 負荷テスト、ロングランテストで設定を調整したい

勧める理由

デフォルトで定義されているアラートでSASのエラー、Web Application Serverのヒープの枯渇など多く情報を収集してくれます。しかも複数サーバ構成でも、SAS Environment Managerのダッシュボードで把握できます。アラートの種類は多くて、経験測に従うよりかは網羅性が高いです。アラートですが、検索で”Service Architecture Alert Definitions"で検索すると一覧が出てきます。

負荷テスト、ロングランテストでWeb Application Serverの処理時間やTime Outの件数、クライアント数など豊富な指標(Hyperic HQ用語でメトリックス)が取得できます。SAS固有のメトリックス以外にも、CPU, Free Memoryなども取れます。メトリックスの値はチャートからCSVファイルに保存できますが、 Hyperic HQのコマンドを使って、テキストファイルに抽出することもできます。

負荷テストが求められる規模のシステムであれば、インスト、構成、初期設定の後にSAS Environment Managerを設定して、負荷テストで発生するアラートやメトリックスを点検することをお勧めします。

よくチェックするアラート

アラートの定義は多数ありますが、私がよくチェックしている項目を挙げます。アラートの一覧を知りたければ、検索で"SAS Environment Manager Service Architecture Alert Definitions"で検索すると資料が見つかります。

  • Webapp CPU Time in Garbage Collection > 30%
  • Excessive Time Spent in Garbage Collection
  • Webapp Heap Free Memory < 5% of Max
  • Workspace Server ERROR message in log
  • Logical Workspace Server Timed Out Clients
  • Object Spawner ERROR message in log
  • Metadata Server ERROR message in log
  • SASWork Disk Use % > 95
  • SASHome Disk Use % > 95
  • SAS License Termination

その他

SASのサービスを起動、停止もできるのですが、他の運用ルールとの兼ね合いがあるので喧伝していません。下手にユーザがサービス上げ下げすると困るから。もちろん、役割を定義してサービスのコントロールを実行できないようにすることも可能です。


2018年3月3日土曜日

EGで作ったSASプログラムを、バッチジョブ化する方法

割とよくある話ですが、調べるのに時間が掛かったのでメモしておきます。
EGで作った.SASのプログラムをJP1のようなジョブスケジューラから実行したいということは良くあります。このとき、Metaデータに登録されているライブラリをどうやって定義するのか?

元ネタは以下の記事です。
how to write a .sh file to run a sas program

$ /opt/sas/config/Lev1/SASApp/sas.sh -nodms -sysin ~/foo.sas -log ~/foo.log
$ grep '論理' ~/foo.log
NOTE: ライブラリ参照名SASDATAは論理サーバーから正常に割り当てられました。
NOTE: ライブラリ参照名STPSAMPは論理サーバーから正常に割り当てられました。
NOTE: ライブラリ参照名ACMは論理サーバーから正常に割り当てられました。
NOTE: ライブラリ参照名ARTIFACTは論理サーバーから正常に割り当てられました。
NOTE: ライブラリ参照名EVDMは論理サーバーから正常に割り当てられました。
NOTE: ライブラリ参照名KITSは論理サーバーから正常に割り当てられました。
NOTE: ライブラリ参照名EVDBは論理サーバーから正常に割り当てられました。
$
当然ながらPre-Assignされていないライブラリは明示的にSASプログラム内部でLIBNAMEステートメントを書いてください。

2018年2月6日火曜日

SAS基盤構築のサービス色々

SASの基盤構築に噛んでますが、色々やることあります。


2018年1月17日水曜日

SAS Visual Analyticsの負荷テストでNeoLoad

SAS Visual Analyticsの負荷テストで、NeoLoadのFree Editionを使いました。
Classic ModeだとAMFがエラーになりますあ、VAのプラグインのJARファイルをNeoLoadのプロジェクトに登録することですエラーを回避できます。
設定箇所はEdit > Preference > Project Settings > Modules Managerです。
JARファイルは、SAS_HOME/SASVersionedJarRepository/eclipse/plubinsの下にある1200程度のファイルです。

4年ほど前にJMeterを少しだけ触りましたが、それと比べてNeoLoadは分かりやすく操作性が良いツールです。