SAS Management ConsoleからCASライブラリを定義したが、詳細設定の中に定義済みライブラリのオプションが無かった。これがないと、EGを起動したときに、ライブラリを右クリックして割り当てしないと、データを参照できない。回避策としては、コードタスクで割り当てを仕込んでおけば回避できる。
なんでPre-Assignの定義がないのか不思議だが、いったん放置します。
SASプログラムとログを解析するユーティリティを開発するための備忘録です。This is a memo to develop utility that analyzes the SAS log.
2019年2月14日木曜日
2019年2月12日火曜日
OSとSASのエンコーディングが違う設定で日本語のディレクトリを作るとどうなるか?
クイズです。
Linux環境において、OSのエンコーディングがUTF-8、SASはSJISの場合、以下のコードを実行すると、作られるディレクトリ名はどのようになるでしょうか?
options dlcreatedir;
libname newdir '/var/tmp/漢字ディレクトリ';
Linux環境において、OSのエンコーディングがUTF-8、SASはSJISの場合、以下のコードを実行すると、作られるディレクトリ名はどのようになるでしょうか?
options dlcreatedir;
libname newdir '/var/tmp/漢字ディレクトリ';
- OS上のディレクトリ名は、SASと同じSJISになる。 .
- OS上のディレクトリ名は、OSのロケールと同じUTF8になる。 .
- OS上のディレクトリ名は、文字化けして正しく表示できない。 .
- エンコーディングの不一致でエラーが発生する。
正解は、3.でOSと同じロケールでディレクトリが作成されます。これは、SASはOSのロケールと異なる場合には、変換してOSに合わせてディレクトリを作成する動きをします。これは実験の結果でわかったことです。
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には入れないという解説がどこかにありまました。
次に、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のメタデータを操作するときの資料の在りかをメモしておきます。
この中にあるサンプル、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);
登録:
投稿
(
Atom
)









