特集

SASシステムで実現できる
セキュリティ設定
特集 SASシステムで実現できるセキュリティ設定

はじめに
Q&A

昨今、
インターネットを含むネットワーク環境の複雑化・肥大化・大衆化に伴い、ネットワークサーバー等への不正侵入などセキュリティに関する問題

新刊マニュアルのご紹介が重要視されるようになりました。ネットワークを使っての利用が可能な
SASシステムにおいても、セキュリティ対策について無視できない問題とSASトレーニングのお知らせ

なっています。今回の特集では、従来から提供されていた、SASデータセッ
トに対するセキュリティやネットワークに関するセキュリティについてご紹介します。

最新リリース情報

SASプログラマーズ・ワークショップ開催のお知らせ

1. SASデータセット等に対して設定するセキュリティ
SASシステムで生成されるさまざまなファイル（データセット、カタログ等）は、他のユーザーによる参照・改変の危険性があります。これらのファイルを保護するための手法について、いくつかご説明します。

1.1 OSの機能を利用したSASデータセット・カタログに対する権限付与
SASデータセットおよびカタログについて、参照や改変の権限を制御する
最も簡単な方法は、ディレクトリやフォルダごとにオペレーティングシステム（OS）側で適切な権限を付与することです。SASシステムを管理者権限のユーザーでインストールした後、SASシステムを通常利用する範囲では、各ユーザーに以下の権限が最低限必要となります。
権限

権限を制限できるファイル・ライブラリ

参照権限のみSASシステム本体（モジュール群）

参照権限または全権限（参照・更新）SASUSERライブラリ※原則として、SASUSERライブラリには全権限が必要です。
参照権限のみで使用するには「RSASUSER」オプションを指定してください。ただしSASUSERライブラリ内に格納されるプロファイル等の各種設定作業が完了している必要があります。

全権限（参照・更新）

WORKライブラリ（処理時に作成される中間ファイル等が格納されるため、必要です）
その他ユーザーが利用するライブラリ

1.2 SASシステム固有のSASデータセットに対するセキュ
リティ機能
SASデータセットに対するセキュリティ機能として、「パスワードデータセッ
トオプション」「ENCRYPTデータセットオプション（暗号化）」が提供されこのような方法に対して有効な手段が、暗号化です。暗号化は下記のようています。

にENCRYPT=データセットオプションにより行ないます。

●パスワード機能

ENCRYPT = YES | NO

パスワード設定用として用意されている「READ=」「ALTER=」「WRITE=」「PW=」データセットオプションを適切に設定することで、各処理に対する※ デフォルトはNO

セキュリティを実現できます。

このENCRYPT=データセットオプションを設定する場合、同時に「PW=」
あるいは「READ=」データセットオプションを設定する必要があります。

ALTER=

データセット構造の変更・削除に対するパスワード設定

READ=

データセット構造やオブザベーションの参照に対するパスワード設定

WRITE=

オブザベーションの追加・変更・削除に対するパスワード設定

PW=

変更・参照・作成の全処理に対するパスワード設定

設定プログラム例）/* 暗号化と参照用パスワード設定*/
DATA pwdlib.pwdenc (ENCRYPT=yes READ=test) ;※データセット構造の変更とは、変数名変更や、
インデックス作成・削除などの操作を意味します。

LENGTH A $ 20 ;A = '暗号化テスト1' ;設定プログラム例

OUTPUT ;データセットpwdtestに全処理用のパスワードを設定する場合

A = '暗号化テスト2' ;OUTPUT ;LIBNAME pwdlib 'd:¥temp' ;/* 全処理に対するパスワード設定 */DATA pwdlib.pwdtest(PW=pwdtest) ;A = '暗号化テスト3' ;OUTPUT ;RUN ;LENGTH A $ 20 ;A = 'パスワードテスト1' ;OUTPUT ;暗号化されたデータセットをバイナリーエディタ等で表示させると、以下のA = 'パスワードテスト2' ;表示になり、内容を閲覧できなくなります。

OUTPUT ;A = 'パスワードテスト3' ;OUTPUT ;RUN ;なお、暗号化されたデータセットを読み込む場合、暗号データの復元処理/* 参照処理のパスワード設定 */が発 生するため、パフォーマンスが劣 化します。読み込みの 速 度はPROC PRINT DATA=pwdlib.pwdtest(READ=pwdtest) ;COMPRESSデータセットオプションにより圧縮されたデータセットの読み

RUN ;込みとほぼ同等です。

上記プログラムでパスワード設定されたSASデータセットに対しては、一部の例外を除き以下の作業も行なえます。

1.3 アクセスコントロールを使ったデータ・アプリケーショ
ンに対するセキュリティ

・「SAS System Viewer」や「Enterprise Guide」を使っての参照た。この機能はSAS/EISソフトウェアで提供されており、この機能で使用可

パスワード入力用のウィンドウが表示されます。

能なメタベース（テーブル、多次元データベース）、EISアプリケーション、

SASシステム バージョン8以降、アクセスコントロール機能が実装されまし・「SAS ODBC Driver」によるMS-AccessからのSASデータセットのインポート関数に対する使用権限を細かく設定することができます。この機能を利用できるのは、SAS/EISソフトウェアおよびそれと連携できる製品に限られま「オブジェクト'xxxx.xxxx'が見つかりませんでした。オブジェクトがすが、ここで簡単に触れておきます。
（詳細な説明は「SAS OnlineDoc. V8」

存在していること、名前やパス名が正しいことを確認してください。」

をご参照ください。）のメッセージが表示され、SASデータセットの認識がされません。
一度テーブルとして読み込むと変更は可能となりますので、変更および作成用のパスワードについては全く意味がなくなります。

（1）アクセスコントロール機能で実現できること
SAS/EISソフトウェア起動時に表示される「Login」画面で入力するユーザーID（※正確にはそのユーザーIDが所属するグループ）に応じて、
「メタベ

●暗号化

ース」
「EISアプリケーション」「関数」のうちで使用できるものを制限する

参照用のパスワードを設定したSASデータセットであっても、ファイル自体ことができます。具体的に設定できる項目は右記のものです。

をバイナリーエディタ等で表示させれば、データの中身はある程度閲覧できてしまいます。右記は、バイナリーエディタを使用してデータセットを表示させた例です。

メタベースEISアプリケーション

メタベース自体の非表示、特定列のみの保存および削除、列の非表示、階層初期表示の位置指定など

1 グループの追加・編集・削除は「ユーザー/グループ管理」の「グループ管理」より行ないます。
「SAS/EISソフトウェア」のメタデータやアプリケーションに対するアクセスコントロールは「グループ単位」で設定するの特定のアプリケーションのみの表示、
特定アプリケーションの実行不可（表示はされる）で、各ユーザーは必ずいずれかのグループに所属させる必要があります。
2 ユーザーの追加・編集・削除は「ユーザー/グループ管理」の「ユーザー関数

特定機能の実行不可（「メタベースの編集」「アプリケーションの作成」などの機能）管理」より行ないます。なお、ユーザーはいずれかのグループに所属させないと、作業が終了できないようになっています。

（2）アクセスコントロールを利用可能にするには（4）アクセス制御リストの定義を行なうには紙面の都合上、詳細な説明は割愛しますが、アクセスコントロール機能を（3）で「グループ」の設定が終了すると「SAS/EISソフトウェア」に対する使用するためには以下の作業が必要です。

アクセスコントロールが実現可能となります。
「アクセス制御設定ウィンドウ」の「アクセス制御の設定」にある、「アクセス制御リストの定義」を使います。

1 メニューの「ソリューション」→「EIS/OLAPアプリケーションビルダ」にてSAS/EISソフトウェアを起動します。
「EISメインメニュー」にある「設定」

1 メタベースに対するアクセスコントロールの設定は「アクセス制御の設定」の「多次元アプリケーション」→「アクセスコントロール」を選択して、「アの「データアクセスコントロール」より行ないます。データアクセスウィン

クセス制御設定ウィンドウ」を起動します。

ドウの「グループ」にはアクセスコントロールの対象とするグループを、「データ元」にはアクセスコントロールを行ないたいデータセットやMDDBを

2「アクセス制御設定ウィンドウ」の「アクセス制御キー」をクリックし、適

当なキーを設定してください。以後、このキーを知っている者のみが「ア指定してください。

クセス制御設定ウィンドウ」を起動できます。キー設定後、SAS/EISソフ「次元：」には選択したメタベースの持つ列が、「レベル：」には列の持つ階層が表示されます。設定したい列の上で右クリックし、表示されるポトウェアを再起動してください。

ップアップメニューより項目を選択してください。たとえば、「ISUSERS」

3「キー入力ウィンドウ」で 2 において設定した「アクセス制御キー」を入力し、再び「アクセス制御設定ウィンドウ」を開きます。そして「環境設定」に所属しているユーザーには「売り上げ予測」を非表示、「国」に係わ

の設定を行ないます。

る階層構造において「メキシコ」を初期値として表示させる設定例は以下の通りです。

ACLルートパス

ユーザーID/パスワード/アクセスコントロール情報を格納するパスホスト

他のマシンのSAS/EISソフトウェアに対して設定する場合、変更の必要がある

ログインウィンドウ

ユーザーID入力画面のタイプを変更する

上記 2 〜 3 の設定終了後の『アクセスウィンドウ』の状態例

2

アプリケーションに対するアクセスコントロールの設定は「アクセス制
御の設定」の「アプリケーションアクセスコントロール」より行ないます。
アプリケーションアクセスウィンドウの「グループ」にはアクセスコントロ
ールの対象とするグループを、「ライブラリ」および「アプリケーションデ
ータベース」にはアクセスコントロールを行ないたいSAS/EISアプリケーションが登録されているカタログを指定してください。
「アプリケーション：」には指定したカタログに登録されている全アプリケ
ーションが表示されます。何らかの制限を設定したいアプリケーション上

設定終了後SAS/EISソフトウェアを再起動すると、ログオンウィンドウが開で右クリックし、表示されるポップメニューより項目を選択してください。たきます。初めてのログオンのみ、用意されている「ADMIN（ユーザーID/パ

とえば、「ISUSERS」に所属しているユーザーに「GSMDDB」「SALES」

スワードとも同一）」を使用する必要がありますが、「アクセス制御設定ウの2つのアプリケーションの実行権限を与えない設定例は以下の通りです。

ィンドウ」内の「ユーザー/グループ管理情報」等の入力が可能な状態となっていますので、そちらで任意のユーザーID/パスワードを設定してください（次の（3）で解説します）。
（3）ユーザーやグループの情報を設定するには（2）の作業が終了した段階で、「ユーザーの追加・編集（パスワード変更など）」作業が可能です。
「アクセス制御設定ウィンドウ」の「アクセス制御の設定」にあります「ユーザー/グループ管理」を使って、アクセスコントロ
ールを行ないたいユーザー情報を追加してください。

「関数アクセスコントロール」より行ないます。機能アクセスウィンドウ

2. ネットワーク上での使用に対して設定する
セキュリティ

の「グループ」にはアクセスコントロールの対象とするグループを指定

SASシステムをネットワーク上で利用する方法として、SAS/CONNECTソ

してください。

フトウェア、SAS/SHAREソフトウェアなどの利用が挙げられます。また

3 機能に対するアクセスコントロールの設定は「アクセス制御の設定」の「機能：」には「SAS/EISソフトウェア」にて使用される機能一覧が表示

SAS/IntrNetソフトウェアやEnterprise Minerソフトウェアといったプロダされます。制限をかけたい機能の上で右クリックし、表示されるポップメ

クトでも、ネットワーク形態がとられます。ここでは、これらのネットワーク形

ニューより項目を選択してください。たとえば、「ISUSERS」に所属して態におけるセキュリティ問題とその対応について説明します。

いるユーザーに、「保存」の権限を与えない設定例は以下の通りです。

2.1 ネットワーク間接続情報に関するセキュリティ
クライアント・サーバー形態をとり、ネットワーク環境で相互のマシンと連携して処理を行なう場合、必ずそのマシン間に何らかの情報のやり取りが発生します。1つの例として「SAS/CONNECTソフトウェア」を使ってローカ
ルマシン（Windowsマシン）からリモートマシン（UNIXマシン）への接続を行なったときの通信情報を、SPAWNERプログラムを起動しない場合と起動する場合について検証してみましょう。
■ SPAWNERプログラムを起動していない場合［テスト時の状況］（5）アクセスコントロールが有効になっているSAS/EISプログラムの実行例

ローカルマシン

Windowsマシン（マシン名：jpnkcy）

リモートマシンUNIX（Sun OS）（マシン名：SUN450）

たとえばデータアクセスコントロールが設定されたメタベースを使って「多通信メソッドCOMAMID=TCP

次元レポート」を実行した場合、制限の有無によって以下のような違いが

上記以外はデフォルト設定のまま接続発生します。
接続時に用いたプログラム
アクセスコントロールが設定されていないユーザー/* ブロック 1*/

FILENAME rlink '!sasroot¥connect¥saslink¥tcpunix.scr' ;OPTIONS COMAMID=TCP REMOTE=SUN450 ;SIGNON;/* ブロック 2*/

RSUBMIT ;アクセスコントロールが設定されているユーザー

DATA TEST ;A = 'CONNECT TEST' ;RUN ;PROC PRINT; RUN;ENDRSUBMIT ;/* ブロック 3*/

SIGNOFF ;上記のプログラムを実行した場合、
たとえば「売り上げ予測」がドロップされているユーザーが多次元レポートを実行した場合、各年で「売り上げ予測」の表示・非表示という差が発生・ブロック 1 / 3 に関しては「TELNET（ポート番号23）」を使用して通信を行なうしています（上記）。なお、列を「ドロップ」
・「非表示」のどちらでもアプリ・ブロック 2 に関してはSASシステムが任意のポートを割り当てて通信を行なう

ケーション上で表示されないということは共通ですが、「平均」や「合計」

ための通信状況を確認することができます。LANアナライザを使用してそなどの統計量算出において、その列を計算に含む／含まないの違いが発の状況を取得した結果は次の通りです。

生します。設定を行なう際は十分にご検討ください。
ブロック 1 / 3 についての情報ブロック 2 についての情報※このプログラムは全ブロックとも「SPAWNERプログラム」を介して通信が行なわれ、リモートマシン側との通信は「ポート番号5000」を使用する例です。SPAWNERプログラムをポート
番号5000で起動する方法は後述します。

ブロック 1 についての情報

上記のように、SPAWNERプログラムの利用でTELNET部分における情報漏洩に対して一定の手段を講じることができます。一方、この場で掲載して上記のように、TELNETを利用して接続しているブロック 1 / 3 では、リモー

いない「ブロック 2 」のSAS/CONNECTソフトウェアセッション確立中の情トマシン（UNIXマシン）に対する「ユーザーID/パスワード」が明らかに確報は、SPAWNERプログラムでもその漏洩防止に役立てることが残念ながら認できます。またSAS/CONNECTソフトウェアのセッション確立中のブロッ

できません。この部分に対して手段を講じるためには「SAS/SECUREソフト

ク 2 についても、多少の工夫によりプログラムや実行結果を復元することウェア」を使用して暗号化を行なうことが考えられます（現時点で日本市場へが可能です。これらの情報に対して少しでも防御する手立てはないものでの製品出荷はされていません）。

しょうか。1つの手段としてリモートマシンへの接続の際に「SPAWNERプ
SAS/CONNECTソフトウェアの一機能として提供されており、下記の作業

2.2 リモートマシン（サーバーマシン）接続に対するセキュリ
ティ対応

によって使用環境を調整できます。

通信情報からの漏洩対策としてSPAWNERプログラムを使用することは前

ログラム」を使用することが挙げられます。SPAWNERプログラムは通常で述べた通りですが、もう一点、サーバーマシンの不正利用に関する対策を・リモートマシンにおけるSPAWNERプログラムの起動（UNIXマシンの場合）例）!SASROOT/utilities/bin/sastcpd -service サービス名-background -shell・スクリプトファイルの手直し
UNIXマシンに対する接続の場合、ローカルマシン側の接続スクリプトフ

講じなければなりません。不正利用対策としては「サーバーマシンへのアクセスに制限を加える」といった方法が効果的です。具体的には「サーバーマ
シンに接続してそのリソースを使用するプログラムに対する制限」すなわち「ポート番号」に対する適切な制限です。これらを実現するためには下記の対策が一般的です。

ァイルにおける「unxspawn:」以下と「signoff:」以下を手直しする必要があります。

・サーバーマシンにおける使用可能なポート番号の設定
・ファイアウォールを設置した、想定外のポート番号使用アプリケーションのではSPAWNERプログラムが起動しているマシンにSAS/CONNECTソフ

稼動抑止

トウェアを使って接続を行ない、その違いを見てみましょう。
この節の「（1）ポート番号の制限への対応策」では、それらの対策に対応す■SPAWNERプログラムを起動している場合
テスト時の状況るためにSASシステム側が提供している機能を説明します（なお、今回の記
事はCOMAMID=TCPのTCP/IP通信を使用していることを前提にしています）。

ローカルマシン

Windowsマシン（マシン名：jpnkcy）

また、サーバーマシン利用時の「サーバーマシンへのログオン」制限によるセリモートマシンUNIX（Sun OS）（マシン名：jpnsun）

キュリティ強化についてもこの節の「（2）ユーザー認証の設定」で説明します。

通信メソッドCOMAMID=TCP

これについてはWindowsマシンを例に若干触れたいと思います。

接続時のポート番号を5000に固定（1）ポート番号の制限への対応策
接続時に用いたプログラム「2.1ネットワーク間接続情報に関するセキュリティ」での「SPAWNERプ
ログラムを起動していない場合」での通信情報におけるポート番号変移を、/* ブロック 1*/

以下の図に示します（接続開始時にTELNETを利用している場合）。

%LET host=172.26.20.86 5000;
FILENAME rlink '!sasroot¥connect¥saslink¥tcpunix.scr' ;OPTIONS COMAMID=TCP REMOTE=host ;SIGNON;/* ブロック 2 */RSUBMIT ;DATA TEST ;A = 'CONNECT TEST' ;RUN ;PROC PRINT; RUN;ENDRSUBMIT ;/* ブロック 3
SIGNOFF ;*/ブロック 1 SAS/CONNECTソフトウェアセッション確立時

ブロック 2 SAS/CONNECTソフトウェアセッション確立後（処理中）

では、このSPAWNERプログラムを上記の例の設定を使って起動し、SAS/CONNECTソフトウェアを使用した場合、ポート情報は通信情報上どのようになっているでしょう。

上記の図の中の数字は、それぞれ下記のSASシステムの利用を表します。

ポート番号1098はローカルマシンのSASシステム、ポート番号5000はリモ
ートマ シ ン の S A S シ ス テ ム を 表 しま す 。接 続 開 始 時 お よ び

ポート番号ブロック 1

ポート機能を使用しているSASシステム

SAS/CONNECTソフトウェアセッション確立時を問わず、ポート番号の利2554

ローカルマシン

用状況は変わりません。リモートマシン側のポート番号が固定されるので、telnet（23）リモートマシン

ポート番号の制限が容易になります。

ブロック 22595

ローカルマシン

53948

リモートマシン■SAS/CONNECTソフトウェアセッション確立中のポート番号のブロック 1 ではTELNETポートを使って通信を行なうのは既に説明した通指定りです。ブロック 2 ではローカル・リモートの双方でウェルノーンポート以降

リモートマシンのSASシステムの起動時オプションに「PORTFIRST」(1024番以降)の任意の空きポート番号を使用します。この状況では、
リモ「PORTLAST」システムオプションを使用します。

ートマシンもしくはファイアウォールマシンにおける使用ポート制限が適切に設定できません。この使用ポート番号を固定化するために必要なポイン'sas -set PORTFIRST 5000 -set PORTLAST 5100 .......' LF;

トは以下の通りになります。
SAS/CONNECTソフトウェアの接続開始時・終了時に「TELNET」を使用
・SAS/CONNECTソフトウェア接続開始時・接続終了時の使用ポート番

している場合、上記のオプション利用は非常に意味があります。一方、号の指定

SPAWNERプログラムは利用するポート番号が一定になるので無意味です。

・SAS/CONNECTソフトウェアセッション確立中のポート番号の指定※SPAWNERプログラム起動時に「INHERITANCEオプション」が設定されている場合（バージョン8でのデフォルト)。バージョン6では「NOINHERITANCEオプション」がデフォルト■SAS/CONNECTソフトウェア接続開始時・接続終了時の使用ポなので、上記のオプションを使用し、ポート番号を指定することが有効なケースがあります。

ート番号の指定
接続時のプログラムを以下のように記述します。

SAS/CONNECTソフトウェアで使用するスクリプトファイルにて、「PORTFIRST
ポ ート番 号 」「 P O R T L A S T ポ ート番 号 」を 追 加 することで 、%LET host=172.26.20.86 5000;

SAS/CONNECTソフトウェアの通信をこの範囲内に納めることが可能と

FILENAME rlink '!sasroot¥connect¥saslink¥tcpunix.

なります。上記の例では「5000〜5100」の任意の番号で通信が行なわれscr' ;ることを意味しており、もし「5000」のみを使用したい場合は、「PORTFIRST」

OPTIONS COMAMID=TCP REMOTE=host ;「PORTLAST」にて同一の番号を指定します。ただし、SAS/CONNECT

SIGNON;

ソフトウェアは1セッションで1ポートを占有するため、「5000」のみに限定
した場合、同時接続できるユーザーは1ユーザーのみとなります。必ず想定

このケースはリモートマシン側のTELNETポートを一般的なポート番号23

される「同時接続ユーザー数」分のポート数を範囲として指定してください。

以外に変更する場合です。上記のように「%LET」を用いて、「IPアドレス
ポート番号」を指定しておくことで、接続開始時・接続時に使用するポート（2）ユーザー認証の設定

番号を変更できます。なお、当然リモートマシン側では、TELNETサービス

サーバーマシンがWindows（NT、2000）の場合、SAS/CONNECTソフトを指定されたポート番号（上記の場合は5000）で起動しておく必要がありウェアを利用する際に「ドメイン認証を行なう」設定でSPAWNERプログ

ます。SPAWNERプログラムを使用した場合も、上記と同様の記述が必

ラムを起動すれば、サーバーマシンへの接続時にユーザーID/パスワード要な場合があります。SPAWNERプログラムを「-SERVICE ポート番号」

による認証が可能です。

オプションを使って起動した場合、「-SERVICE」オプションで指定された
ポート番号を使って接続開始・終了およびSAS/CONNECTソフトウェアの例）

通信が行なわれるためです。今回はSPAWNERプログラム起動時に※事前に「SPAWNER」サービスの停止およびサービスからの登録削除が必要です。

「-SERVICE 5000（あるいはサービス名）」が指定されている場合です。

a）接続するユーザーに対して、サーバー側にて「バッチジョブとしてログオン」の権限を設定します。

例）【Windows NTの場合】!SASROOT/utilities/bin/sastcpd -service spawner-background -shelli） スタートメニュー→「管理ツール」→「ユーザーマネージャ」を選択してください
ii）「原則（P）」→「ユーザーの権利（U）」を選択後、「高度なユーザー※上記はUNIXマシンにおけるSPAWNERプログラム起動方法です。サービスとして「spawner」には5000番ポートがservicesファイルで割り当てられていると仮定します。

権利の表示（S）」をチェックしてください
iii）「権利（T）」の項目で、「バッチジョブとしてログオン」を選択し、「追加（A）」をクリックして接続するユーザー（グループ）
を選択してくださいiv）「この権利を与えられたアカウント（G）」に追加したユーザーが登録されていれば、正しく設定されています【Windows2000の場合】
i） スタートメニュー→「設定」→「コントロールパネル」→「管理ツール」→「ローカルセキュリティポリシー」を選択してください
ii）「セキュリティの設定」→「ローカルポリシー」→「ユーザーの権利の

属性

長さ

解説

Rule

列名

文字

7Byte

「INCLUDE」（許可）か「EXCLUDE」（禁止）

Libname

文字

8Byte

SASデータライブラリ名

Memname文字

32ByteSASデータセット名やSASカタログ名など

Memtype

文字

8Byte「DATA」「CATALOG」「VIEW」など

Objname文字

32Byte

主にSASカタログ内のエントリ名

Objtype

文字

8Byte

エントリタイプ（SCL、PROGRAMなど）

Comment

文字

128Byte

注記すべき項目など任意

割り当て」を選択後、「バッチジョブとしてログオン」をクリックしてく

たとえば「SASHELP.AUTHLIB」データセットを以下の通り設定したと仮

ださい

定します。

iii）
「追加（A）」をクリックして接続するユーザー（グループ）を選択してください
iv）「バッチジョブとしてログオン」のポリシーに追加したユーザーが登録されていれば、正しく設定されていますb）SPAWNERプログラムをサービスに登録します。
「コマンドプロンプト」
を開き、以下のコマンドを入力してください。

Rule

LibnameMemtypeObjnameObjtype

INCLUDESASHELP

*

DATA

*

*

INCLUDESASHELP

*

VIEW

*

*

INCLUDESASHELP

*

MDDB

*

*

INCLUDE

SASDAT****INCLUDE

SASDAT

MYCATCATALOG**

Memname

この場合、INCLUDE指定のある下記のリソースについてはアクセス権限が与えられます。

!SASROOT¥spawner -i -c tcp -security -authserver
DOMAIN名（サーバー名）

・SASHELPライブラリ内の「データセット」「ビュー」「MDDB」・SAMPDATライブラリ内の「MYCATカタログ」を除く全リソース※V6では「-authserver」以降に「サーバー名」を指定できません。

EXCLUDE指定のあるリソース、およびINCLUDE指定以外のライブラリc）WindowsNT/2000のサービスとしてSPAWNERが登録されるので「サ内リソース（下記に示します）はアクセス権限が与えられません。

ービスの開始」を行なってください。
設定終了後、SAS/CONNECTソフトウェアの接続ではドメインを使ったユ・SASHELPライブラリ内の「データセット」「ビュー」「MDDB」以外の全

ーザー認証が行なわれるようになります。つまり「ドメインサーバー」に対しリソースての問い合わせが「SAS/CONNECTソフトウェアの接続開始時」および「接・SAMPDATライブラリ内の「MYCATカタログ」

続終了時」に発生するようになりますので、注意が必要です（たとえば「ドメイン名：D O M A I N . C O M ／ ユーザーI D：U S E R 1 」の ユーザーがSAS/CONNECTソフトウェアを使って「サーバーマシン名：SERVER̲SAS（spawner -i -c tcp -security -authserver DOMAIN.COMでSPAWNER起動）」へ接続しても、ドメイン(DOMAIN.COM)への参加の有無にかかわらず、SAS/CONNECTソフトウェアによる接続を行なった時点で、ドメインサーバーへの認証作業が発生します）。

3. SAS/IntrNetソフトウェアにおけるセキュリティ
SAS/IntrNetソフトウェアに関しては、今まで説明したデータセット、
SAS/EISソフトウェアに対するセキュリティ、SAS/CONNECTソフトウェア
に対するセキュリティと若干要求されるものが異なり、不特定多数のユーザーに対してのセキュリティを考慮する必要があります。最後にこのソフト
ウェアのセキュリティに関する設定事項について簡単にご説明します。

3.1 AUTHLIB機能を使ったアクセス制限
リリース8.2のSAS/IntrNetソフトウェアには、ライブラリ、
メンバ、エントリタ
イプごとにアクセスの制限を設定する「AUTHLIB」機能が追加されました。
これによりユーザーごとにアクセス可能なリソースを制御できます。ただし、「AUTHLIB」機能はSAS/EISソフトウェアの「アクセスコントロール」と異なり、あくまでも「プログラム」にて対応する必要があります。
（1）事前に準備しておくべきこと
AUTHLIB機能を使用するにあたって、アクセス権限を設定するための「AUTHLIBデータセット」を用意しておく必要があります。サンプルのデー
タセットは「SASHELP.AUTHLIB」として提供されています。データセットのレイアウトは以下の通りです。

（2）AUTHLIB機能を使ったプログラムの作成例

3.2 使用するポート番号の制御について「AUTHLIB」機能はあくまでも「権限の有無についての情報を返す」だ

SAS/IntrNetソフトウェアにおいてもTCP/IP通信方式を使うソフトウェアでけであり、実際に権限のないライブラリを参照することは可能です。よってある以上、ポート番号の使用に対するセキュリティは必ず考慮すべきものと

以下のマクロプログラムを作成し、アクセス権限の有無によって処理を分なります。SAS/IntrNetソフトウェア リリース8.2において、指定できるポートと岐させることで利用できます。

各ソフトウェアの構成は以下の通りとなります。

DATA _null_ ;イメージ図/* アクセス権限の判定 */IF (APPSRV_AUTHLIB('sashelp','*','data'))
THEN DO ;WebブラウザによるSASプログラム実行端HTTP（PORT=80）/* 権限のある場合 */CALL SYMPUT('authok','1');
END ;任意のポート番号
任意のポート番号（wwwサーバー結果出力）

WWWサーバー／Broker.cfg
LOAD Manager
Broker.cfg内SocketServiceへの指定ポート番号

ELSE DO;/* 権限のない場合 */Broker.cfg内LoadManagerへの指定ポート番号

CALL SYMPUT('authok','0');

アプリケーションサーバー
Socket Service

END ;任意のポート番号（Socket Service制御）

RUN ;上記は「ロードマネージャー」+「ソケットサービス」を用いたSAS/IntrNetソ%MACRO authchk;%IF "&authok" = "1" %THEN %DO;

フトウェア環境の場合で、「ロードマネージャー」と「ソケットサービス」がそれぞれ異なるマシンで稼動している例です。なお、プールサービスに関しては、/* アクセス権限がある場合の処理 */下記の点を考慮すれば、ポート番号の設定が可能です。今回は紙面の都合

proc print data=sashelp.class;

上紹介いたしませんが、ソケットサービスの設定をご参考ください。

run;%END ;%ELSE %DO;

%MEND

・アプリケーションサーバー（プールサービス稼動）とロードマネージャーの起動マシンが違う場合、アプリケーションサーバー側に「Spawnerプログラム」/* アクセス権限がない場合の処理 */を起動が必要な点%PUT "参照権限がありません";

・プールサービス起動時のポート番号は動的に割り当てることが必要であり%END;（SAS/IntrNetソフトウェアの不具合）、ポート番号を静的に指定して運用す

authchk;

ることが困難%authchk;

これらのポート番号を指定するのは、wwwサーバー内の実行スクリプト（CGI
プログラム）が格納されているフォルダ（ディレクトリ：「scriptsやcgi-bin」な

上記の「APPSRV̲AUTHLIB」関数は、下記のステートメントにて指定されどの名称）に存在する「broker.cfg」です。

たリソースのアクセス権限取得が可能です。rcの値が「0」の場合はアクセス権限なし、「1」の場合はありとなります。
rc = APPSRV_AUTHLIB('ライブラリ名','メンバ名','メンバタイプ','

Broker.cfgの設定例
SocketService default "Reuse existing session"

オブジェクト名','オブジェクトタイプ') ;ServiceDescription "Pages reference this genericserver when they +don't care which service is used."（3）ユーザーごとにアクセス権限を変更する場合

ServiceAdmin "[your-name]"A U T H L I B 機 能 を 使う場 合 、各リソースに 対 するアクセス 権 限 はServiceAdminMail "[your-email]@[your-site]"「SASHELP.AUTHLIBデータセット」より情報を取得するのがデフォルト設

Server APsrv

定ですが、「APPSRV̲AUTHDS」関数によってそのデータセットを変更する

Port 5011 5012 5013

ことが可能です。

ServiceTimeout 30/* ソケットサービス起動ポート番号 *//* ロードマネージャー起動ポート番号 */rc = APPSRV_AUTHDS('データセット名') ;ServiceLoadManager WWWsrv:5555#

Remove the following line for any servers before

V8.1

各ユーザーが利用を開始するに当たり上記のプログラムを実行し、各ユーザ

FullDuplex

True/* 設定は「True」 */ー用に設定したAUTHLIBデータセットを有効にすれば、ユーザーごとにアクセス権を変更できます。

最後の「FullDuplex True」の指定は重要です。この設定がない場合、「ロードマネージャー」「ソケットサービス（アプリケーションサーバー）」の通信使用ポートにおいて、指定のポート番号で戻ってこない場合があります。

ポート番号（任意）←ポート番号（任意）ロードマネージャー

ソケットサービス
ポート番号（5555）←ポート番号（任意）上記が「FullDuplex False」を指定している場合です。ロードマネージャー
からソケットサービスへの通信はポート番号「5555」を使用しているものの、
ソケットサービスからの戻りが「5555」以外の場合があります。もし、この「ロードマネージャー」「ソケットサービス」の間に「ファイアウォール」を設置している場合、「ポート番号5555」で設定を行なうことができなくなるため注意が必要です。上記の「Broker.cfg」で稼動している場合の例は、以下の通りになります。

クライアント端末（ブラウザ使用）
80（HTTP）

2060（任意のポート番号）1366／1368／1369（任意のポート番号）

WWWsrv（WWWサーバー／Broker.cfg）
LOAD Manager
5011／5012／5013（Broker.cfg）

5555（Broker.cfg）

Apsrv（アプリケーションサーバー）
Socket Service1364（任意のポート番号）

また「ロードマネージャー」「アプリケーションサーバー」が同一マシンに存在している場合、
このような状況になります。
※前述の「Broker.cfg」において「ServiceLoadManager APsrv:5555」となっている例です。

クライアント端末（ブラウザ使用）
80（HTTP）

2060（任意のポート番号）1366／1368／1369（任意のポート番号）

WWWsrv（WWWサーバー／Broker.cfg）
LOAD Manager

5011／5012／5013（Broker.cfg）
1364（任意のポート番号）

LOAD Manager
5555（Broker.cfg）

Apsrv（アプリケーションサーバー）
Socket Service※「任意のポート番号」と記載してある部分は、ポート番号が実行ごとに異なることを示します。

おわりに今回の特集では「リソースに関するセキュリティ機能の利用」と「ネットワー
ク上の通信情報に関する対策」をメインにご説明しましたが、最初にご説明したOS自体が持つセキュリティ機能をまず活用することが重要です。SASシ
ステムの各プロダクトを使う上で、利用している他の製品が持つセキュリティ
機能の設定なども併せて利用するケースもあります。利用環境に最適なセキュリティ環境を構築する上で、是非記事をご参考ください。

|---------------------------|

|

|S01

3|

|

|---------------------------+----------|
|S03

|

2|

----------------------------------------●TABULATEプロシジャで、存在しないCLASS変数の値を表に含める（V8）●文字列が8バイト以上ある変数でTRANSPOSEプロシジャを利用する
表2●起動時の環境設定の内容を確認する●2つのSASデータセットのうち、片方に存在するデータをshop 東京2

もう片方から削除する方法●SAS起動時にエクスプローラを表示しない設定---------------------------------------------------●HTMLファイルを直接Webサーバにアップロードする方法||●SAS/IntrNetソフトウェアで、ユーザの入力情報を||---------------------|

SASデータセットに保存する方法

date

|

|

| 01-01-01 | 01-01-02 |●HTMLファイルにグラフを段組で出力する方法||----------+----------|●SASのバージョンを検知する方法||●MP CONNECTでの多重処理時のプロセス|---------------------------+----------+----------|●JMPソフトウェア Version 4とLOGISTICプロシジャの

|code

数量

|

数量

|

|

|

|

|---------------------------|||●n が大きいときの順列・組み合わせの計算方法

|S01

3|

.|

●リソースをなるべく使用しないIMLの計算方法|---------------------------+----------+----------|

パラメータの信頼区間について

|

|S02

|

.|

.|

|---------------------------+----------+----------||S03

TABULATEプロシジャで多次元の表を作成するとき、存

|

2|

.|

---------------------------------------------------

在しないクラス変数の値を表に含めることはできますか？
下の例で、表1の「SHOP=東京2」の表に「CODE=S02」の行と「DATE=2001-01-02」の列を追加して、表2のような出力にしSASシステム バージョン8から追加されたCLASSDATAオ

たいと思います。

プションを使って、出力するクラス変数の値を制御できます。
表に含めるクラス変数の値の組み合わせをデータセットに

表1

しておき、TABULATEプロシジャで「CLASSDATA=データセット名」を指定します。ご質問の例の場合、クラス変数SHOP、CODE、DATEの全組み合わせを含めた次のようなCLASSDATAデータセットを作ります。

shop 東京１--------------------------------------------------|

|

date

|

|---------------------||| 01-01-01 | 01-01-02 |||----------+----------|

|

|

数量

|

数量

CLASSDATAデータセット
OBS

shop

code

date

|

1

東京1

S01

01-01-01|---------------------------+----------+----------|

2

東京1

S02

01-01-01

|code

|

|

|

|

3

東京1

S03

01-01-01|---------------------------|

|

|

4

東京2

S01

01-01-01

|S01

3|

1|

5

東京2

S02

01-01-01|---------------------------+----------+----------|

6

東京2

S03

01-01-01

|S02

1|

7

東京1

S01

01-01-02|---------------------------+----------+----------|

8

東京1

S02

01-01-02

|S03

1|

9

東京1

S03

01-01-02---------------------------------------------------

10

東京2

S01

01-01-02

shop 東京2

11

東京2

S02

01-01-02----------------------------------------

12

東京2

S03

01-01-02

|

|

1|

|

2|

|

|

date

|

|----------||| 01-01-01 |||----------|

|

|

数量

|

|

プログラム例
options pageno=1;/* サンプルデータセットの作成 */|---------------------------+----------|
|code

|

|

data sales;input shop $ code $ date yymmdd10. +1 suryo;

SASシステム バージョン6では、変数名の長さは8バイト

format date yymmdd8.;までの制約があります。そのため、ご指摘のようにバージ
ョン6のTRANSPOSEプロシジャにおいても、IDおよび

cards;
東京１ S01 2001/01/01 3

IDLABELに指定可能な変数は8文字までとなっています。ただし、設東京１ S02 2001/01/01 1

定したい変数をいったんユニークな8文字以内の別の変数に保管し、東京１ S03 2001/01/01 2

その変数をIDとして使用することにより同等の結果を実現できます。

東京２

S01 2001/01/01 3

なお、新バージョンとなるSASシステム バージョン8eからは、変数名が東京２

S03 2001/01/01 2

32バイトまで、変数ラベルは256バイトまでに拡張されており、制約が大幅に緩和されています。下記例をご覧ください。

東京１ S01 2001/01/02 1
東京１ S02 2001/01/02 1
東京１ S03 2001/01/02 1/* TESTデータ作成 */;data testtr;

run;label a =/* CLASSDATAデータセットの作成 */'input_data_grp'

b = 'input_data_date'c = 'input_data_koumoku'
d = 'input_data_count' ;proc sql;
create table _class asformat a $9. b yymmdd8. c $9. d $12. ;select * from

input @1 a $9. @11 b yymmdd8. @20 c $9. @30 d 12. ;(select distinct(shop) from sales) ,(select distinct(code) from sales) ,datalines;(select distinct(date) from sales) ;aaaaaaaaa 02/02/27 koumoku909123456789

aaaaaaaaa 02/02/27 koumoku10 10123456789

quit;

aaaaaaaaa 02/02/27 koumoku11 11123456789
proc tabulate data=sales

classdata=_class ;bbbbbbbbb 02/02/27 koumoku9class shop code date;;var suryo;run;

09234567890

tables shop,code,date*suryo='数量'*f=10. ;keylabel sum=' ';/* ユニークな8バイト以内の別変数を作成 */run;data testtr1;
set testtr;
e = compress(substr(c,1,3)||substr(c,6,4)) ;run;

1 レ コ ード が 複 数 行 に ま た が る デ ー タを 入 力 し 、/* IDへユニークな別変数を指定 */TRANSPOSEプロシジャを利用して1行ずつのレコード

proc transpose data=testtr1 out=trans1(drop=_name_)にまとめる事を考えています。
しかし、転置のキーとなる変;数が8バイトより長く、8バイト以下の長さでは値が重複してしまい、
うまby a b ;く転置がされません。また、該当する変数をLABELとして設定したいの

id e ;ですが、8文字で切られているために思うような結果になりません。何か

idlabel c ;回避方法はあるでしょうか。

var d ;
run;

データの例
aaaaaaaaa 02/02/27 koumoku909123456789

aaaaaaaaa 02/02/27 koumoku10 10123456789

環境設定ファイル（SASシステム バージョン8の場合はaaaaaaaaa 02/02/27 koumoku11 11123456789

sasv8.cfg）をカスタマイズしたのですが、この設定が反bbbbbbbbb 02/02/27 koumoku9

映されているか分かりません。SASシステム起動時に、設09234567890

定についての情報を一括して把握する方法はありますか。
TRANSPOSE後のイメージ

SASシステムを起動する際のコマンドに、SASシステム
オプションVERBOSEを指定すれば可能です。この情報は、

INPUT_DATA_GRP DATE

koumoku9

koumoku10

ログウィンドウまたは標準出力に出力されます。

koumoku11

aaaaaaaaa

02/02/27 09123456789 10123456789 11123456789

bbbbbbbbb

02/02/27 09234567890

起動コマンドの例
UNIXの場合
Windowsの場合$ sas -verbose> c:¥progra~1¥sasins~1¥sas¥v8¥nls¥ja¥
sas.exe -verbose

2つのSASデータセットがあります。片方のデータセットに出力の例［Solaris版SASシステム リリース8.2日本語版の場合］含まれるレコード（オブザベーション）を、もう1つのSAS
データセットから削除したいと思います。何かよい方法はOptionValue===========

CONFIG/home/sas82/sasv8.cfg

DBCSLANG

JAPANESE

DBCSTYPE

EUC

下記の例は、TRANSデータセットに存在するオブザベー

EMAILSYS!SASROOT/utilities/bin/sasmailer

ションをMASTERデータセットより削除するプログラムです。

FILELOCKS

FAIL

FSIMM

"x11=pipe"

FSIMMOPT

pipe:motif

MAXMEMQUERY

6291456

PATH!SASROOT/../../dbcs/sasexe

ありますか？
SQLプロシジャのをEXCEPT演算子を使用すると可能です。

プログラム例
data master;
input ID NAME $;!SASROOT/../../sasexe

cards;[SASROOT = /usr/local/sas82/nls/ja]

1 A[GFONT0 = !SASROOT/kanji]

2 B[GFONT1 = !SASROOT/mincho]

3 C[sasroot = /usr/local/sas82/nls/ja]

4 D

WORK

/tmp

5 E

DBCS

ON

6 F

ENCODING

EUC-JP

7 G

LOCALE

JAPANESE;MEMSIZE

64M

run;

MSG

'!SASROOT/sasmsg'

MSGCASEOFF

SET'!SASROOT/../../sasmsg'

data trans;
input ID NAME $;SETJMPON

cards;STIMERON

2 B

VERBOSE

ON

3 C

XCMD

ON

5 E

WORK

/tmp

MAPS

!SASROOT/../../maps

SASHELP'!SASROOT/sascfg';'!SASROOT/sashelp'

run;proc sql;'!SASROOT/../../sascfg'

create table master as'!SASROOT/../../sashelp'

select * from master

SASAUTOS!SASROOT/../../sasautos

HELPLOC'!sasuser/classdoc''!SASROOT/../../X11/native_help'

exceptselect * from trans
;
quit;

NODMS
SASUSER/home/sas82/sasuser

NEWS!SASROOT/../../misc/base/news

APPLETLOC!SASROOT/../../misc/applets

DOCLOC!SASROOT/../../install/docloc.htm

SAS起動時にエクスプローラが自動的に表示されますが、SORTSIZE

48Mとはできますか？

MSYMTABMAX

4M

MVARSIZE

32K

普段は使用しません。これを表示しないように設定するこNOASYNCHIO

Windows版同様、UNIX版SASシステム リリース8.2においても、初期設定では、SASシステム起動と同時にエクスDMSEXPSASSCRIPT

プローラが起動されるように設定されています。SASシステ'!SASROOT/../../misc/connect'

UNIVERSALPRINT

ム起動時にエクスプローラを起動させないためには、現在の環境設定フ

SYNCHIO

ァイル（通常、!sasroot/nls/ja/sasv8.cfg 等）を以下のように変更します。

NODMSBATCH

変更前

NOBOOTSTRAPTERMINAL-dmsexp

変更前-nodmsexp-dms

2. STATISTICSステートメントを追加
ODS （Output Delivery System）によるHTMLの出

アプリケーションサーバー起動時に使用する「appsrv.sas」（設

力を、直接Webサーバにアップロードできますか？

定によって名前は異なる）内のAPPSRVプロシジャに「STATISTICS
ステートメント」を追加します。

FILENAMEステートメントでFTPデバイスタイプを指定すると、FTP経由でWebサーバにアップロードできます。
下記に例を示します。

proc appsrv port=0 unsafe='&";%'''..... 省略 .....
allocate library statlib "PATH";

プログラム例

datalibs statlib;
statistics data=statlib.stat addportfilename temp ftp '~sasdemo/public_html/class.html'
user='user_id' host='www.sas.com'

template=statlib.template;..... 省略 .....

pass='password'※ソケットサービスが1つの場合は、ADDPORTオプションは不要ですが、ソケットサー
ビスが複数起動あるいはプールサービスを使用して複数のセッションを起動する場
合は、ADDPORTを使用してください。

recfm=sprompt debug;

ods html body=temp;

SASシステム リリース8.2でODSを使用し、HTMLファイ
ルにグラフを貼り付けて公開しています。都合上以下のよproc print data=sashelp.class;

うな「段組」の表を作成し、それぞれにグラフを貼り付けよrun;

うと思っていますが、良い方法はありませんか。
ods html close;段組のイメージgraph1graph2graph3graph4

SAS/IntrNetソフトウェア リリース8.2を使用して、アプリ
ケーションを作成しています。フォームを利用してユーザの入力情報を収集し、アプリケーションサーバに渡しているのですが、
その情報をSASデータセットに保存することはできますか？
SAS/GRAPHソフトウェアの「DEVICE=WEBFRAME」
SAS/IntrNetソフトウェア リリース8.2の新機能であるのようなグラフィックデバイスを使って簡単に上記の表

STATISTICSオプションを利用すれば、ユーザの入力情を作成する方法、ODSステートメントを使って簡単に作報をSASデータセットに保存できます。具体的な手順は成する方法は残念ながらありません。下のようなプログラムを使って下記の通りです。

の出力を検討してください。

1. STATISTICSデータセットの作成

マクロプログラム

SASシステムにて、下記のプログラムを実行します。
/* グラフを出力するに当たって、初期化を行うマクロ(gtableinit) *//* STATISTICSデータセットの保存先を指定 */%MACRO gtableinit(catlibname statlib "path";/* STATISTICSデータセットを作成*/

proc appsrv port=0;
statistics create=statlib.stat;run;= work.gseg,

across= 2,

pagewidth= 640,

pad= 10,

dirpath= D:¥web¥,body= gtable.html,

title= 段組グラフ出力の例,

webfont= ＭＳ ゴシック,

tableborder = 2);/* STATISTICSデータセットの修正*/

data statlib.template statlib.stat;
set statlib.stat;
attrib dest length=$8 label='destination';
stop;
run;

※ アプリケーションにて使用している"DEST"の値を保存することを前提にしています。

%GLOBAL xpixels ypixels gifdir gcat cells cellpad
tabletitle htmlbody
face border;%LET gifdir= &dirpath;%LET gcat= &cat;%LET cells= &across;%LET cellpad= &pad;%LET tabletitle = &title;

%LET face

= &webfont;

PUT "<TD height=&ypixels width=&xpixels nowrap%LET border= &tableborder;

ALIGN=center>";%LET xpixels=

name=TRIM(name)||".gif";
PUT '<IMG SRC="' name%eval(%eval(&pagewidth(%eval(&pad*(%eval(&across-1)))))/&across);

IF i=&cells or eof THEN DO;= %eval(%eval(&xpixels/4)*3);%LET ypixels'"> </TD>';

i=0;
PUT "</TR>";"&dirpath&body";

FILENAME _gtable

END;
IF eof then put "</TABLE> </BODY> </HTML>";FILENAME _gsfname "&dirpath";

RUN;
GOPTIONSRESET%MEND;= all

DEVICE= gif

XPIXELS= &xpixels

YPIXELS= &ypixels

GSFMODE= replace

GSFNAME= _gsfname;

実際の実行プログラム例/* グラフ初期化 */%gtableinit(dirpath=D:¥web¥,across=2,
pagewidth=640,body=2columns.htm);

PROC GREPLAY IGOUT=&cat NOFS;
DELETE _all_;/* 出力用グラフ作成 */RUN;

DATA test;

QUIT;

DO hbar=1 TO 3;%MEND;

DO subgroup='A','B','C';/* TABLEタグを使って、HTMLに表を作成するマクロ(gtable) */sumvar=uniform(12345);
OUTPUT;%MACRO gtable;

END;

PROC CATALOG CAT=&gcat ENTRYTYPE=grseg;

END;

CONTENTS OUT=_templist;
RUN;

RUN;

PROC SORT DATA=_templist;

PROC GCHART;
HBAR hbar / subgroup=subgroup sumvar=sumvar

BY moddate;nostats;

RUN;
DATA _null_;

VBAR hbar / subgroup=subgroup sumvar=sumvar;

LENGTH name $256;
FILE _gtable;

RUN;

SET _templist END=eof;

PROC GCHART;
HBAR hbar / subgroup=subgroup sumvar=sumvar

IF _N_=1 THEN DO;
PUT "<HTML>"/nostats;"<!-- Generated by GTABLE Macro -->"/

VBAR hbar / subgroup=subgroup sumvar=sumvar;"<HEAD>"/

RUN;"<TITLE>&tabletitle</TITLE>"/QUIT;'<META http-equiv="Content-type"content="text/html">'//* HTMLファイル出力 */"</HEAD>"/%gtable;"<BODY>"/"<TABLE

cellspacing=&cellpad

border=&border>"//* title */SASシステム リリース6.12とリリース8.2を併行して使用'<TR> <TD COLSPAN="'

しています。双方でプログラムを共通化していますが、一部処理だけリリース番号によって使い分けたいと考えて"&cells"'" ALIGN=center ><FONT

face="'

います。リリース番号を取得する方法はないでしょうか。

"&face"'" size="5" color="#002288">'/

自動マクロ変数「&SYSVER」を使用することで、バージ"<B>&tabletitle</B></FONT></TD></TR>";

ョンごとに異なる処理を実現できます。
「&SYSVER」に

END;

はバージョン情報が格納されており、
リリース6.12および

i+1;

リリース8.2では次の値がセットされています。下記のプログラムを実IF i=1 then PUT"<TR>";

行し、LOGウィンドウに表示されるリリース番号をご確認ください。

&SYSVERの使用例

SASシステムのLOGISTICプロシジャで計算したパラメ
ータ推定値に対する信頼区間の値と、JMPソフトウェアで計算したロジスティック回帰の信頼区間の値が、同じデー

DATA _null_ ;タを利用して分析しているのに異なります。なぜでしょうか。

%PUT &SYSVER ;RUN ;JMPソフトウェアでは、［分析］メニューから［モデルの当てはまり］を選択してロジスティック回帰を実行し、オプシ
実行結果

ョンとして［信頼区間］を選択すると「プロファイル尤度に基づく信頼区間」を出力します。一方、SAS/STATソフトウェアの

1

LOGISTICプロシジャでは、バージョン8の場合、デフォルトでWald流

DATA _null_ ;2の信頼区間を出力します（リリース6.12では、MODELステートメント%PUT &SYSVER ;← この行にリリース番号が出力されます

X.XX
3

RUN ;

にCLオプションを指定します）。このように、信頼区間の計算方法が異なるため、信頼区間の値が異なってきます。LOGISTICプロシジャ
で は 、以 下 の プ ログラム 例 の ように 、M O D E L ステートメントで「CLPARM=BOTH」を指定すると、Wald流の信頼区間とプロファイ

なお、同じリリースで「TSレベル」を考慮する場合は、自動マクロ変数

ル尤度に基づく信頼区間の両方を出力できます。

「&SYSVLONG」を利用してください。
/**2つの信頼区間を求めるプログラム例**/&SYSVLONGの使用例

proc logistic data=data1 descending ;model resp = x1- x5 / clparm=both;

DATA _null_ ;%PUT &SYSVLONG ;/**CLPARM=BOTHオプションの指定**/
run;

RUN ;
※CLPARM=WALD でWald流のみ、CLPARM=PLでプロファイル尤度に基づく信頼区間のみを出力できます。

実行結果

2つの信頼区間の計算方法については、下記のドキュメントを参照してく
ださい。

7
8

DATA _null_ ;%PUT &SYSVLONG ;X.XX. nnnnPmmddyy ← この行にリリース番号・TSレベルが出力されます
9

RUN ;

■リリース6.12「SAS/STAT Software: Changes and Enhancements
through Release 6.12 」（注文番号：55779）p.456
または※sysvlongで取得される情報は「リリース番号情報 + TSレベル情報 + P + そのモジュールの作成年月日（mmddyy）」で構成されます。
「6.12.0060P042699」は「R6.12 TS060、モジュール構成日は1999/4/26」であることを表します。

「SAS/STAT Software: Changes and Enhancements for
Release 6.12」（注文番号：55657）p.416■バージョン8以降

MP CONNECTを利用して、複数のSASプロセスを同時「SAS System Version 8 OnlineDoc」に起動して使用していますが、処理後もプロセスが残って→ SAS/STAT → The LOGISTIC Procedure → Details

しまいます。プロセスを消すことはできないのでしょうか？

→ Confidence Intervals for Parameters

Autosignonオプションを使用してリモートとの接続を行ない、かつ「wait = no」を設定しているときには、処理「SAS Technical News / 2002 Winter」 には、SAS後もそのステータスをLISTTASKステートメントで確認でシステム リリース6.12では順列や組み合わせを計算した

きるようにSASのプロセスは残ります。ENDSUBMITステートメントにい場合、GAMMA関数を利用するとの記事がありましたが、よるリモートの処理後に、すぐにSASのプロセスを終わらせたい場合は、その通りにプログラムを書いてみたところ、順列や組み合わせの値がRSUBMITステートメントのオプションとして「persist = no」を設定

欠損値となってしまいました。これはなぜでしょうか？

してください。このようにすると、signoffが自動的に行なわれます。また、
persistを指定しなくても、signoffを行なえばSASのプロセスは消去

data test;

されます。

n=200;
r=3;

perm=gamma(n+1)/gamma(n-r+1); /*PERM(200,3)を計算*/
comb=gamma(n+1)/gamma(r+1)/gamma(n-r+1);/*COMB(200,3)を計算*/
run;

GAMMA関数の引数として大きな数字（Windowsでは、

この方法は、行列Xの一部分のみを順次IMLで読み込んで計算するため、170前後より大きな値）を与えると、GAMMA関数の真メモリの使用量が少なくてすみ、ハードディスクの容量が十分ある場合の値が極めて大きくなり計算することができません。このには有効な方法です。なお、行列Zはデータセットとして保存されます。

ような場合には、GAMMA関数の自然対数を計算するLGAMMA関数
をご利用ください。

/* IMLの起動 */proc iml;

data test;
n=200;/* 行列yは全て読み込む */r=3;

use y;
read all into y;/* Permutationの計算例 */close y;perm=exp(lgamma(n+1)-lgamma(n-r+1));/* perm=7880400 *//* 行列zをデータセットに書き出すために、*//* 出力先のデータセットzを作成 *//* Combinationの計算例 */create z from y;

comb=exp(lgamma(n+1)-lgamma(r+1)-lgamma(n-r+1));

close z;/* comb=1313400 *//* pは、一度に読み込む行列xの行数。大きすぎても小さすぎても *//* 結果の比較。以下はV8以降で有効 *//* メモリを消費してしまいます。 */perm2=perm(n,r);p=150;

comb2=comb(n,r);/* 行列xxは行列xを区分けしたもの */run;

do i=1 to ceil(ncol(y)/p);/* 行列xの一部を読み込む */SAS/IMLソフトウェアを利用して、データセットから数値を読み込んで行列演算を行なっていますが、たとえば7000
×7000の行列X,Yを読み込んで「Z=X *Y」を計算をしよ

use x;
read point (p*(i-1)+1: min(p*i,ncol(y)) ) into x;
close x;うとすると、次のエラーメッセージがログウィンドウに出力されてしまい、
計算できません。
どのような対処方法がありますか？

/*z（の一部）を計算*/
z=x*y;ERROR: (execution) Unable to allocate sufficient

free x;/* 行列xを開放 */memory.
At least 392000032 more bytes required.

/* 計算したzをデータセットzにAPPEND */edit z;append from z;

SAS/IMLソフトウェアでは、行列の成分をすべてメモリ

close z;上で保 持しています。7 0 0 0×7 0 0 0 の 行 列は、概 算で400Mバイトほどのメモリを占有するので、ご質問のようfree z; /* zを開放 */な計算をすると1Gバイト以上のメモリを使用することになり、エラーが発生します。対処法としては、Windowsであれば仮想メモリのサイズ

end;を上げる、UNIXではMEMSIZEの値を大きなものにするといった方法

quit;が考えられます。ただし、いずれにしても、大きな行列演算を直接行なうためにはメモリを大量に必要とするので、計算が正しく行なわれない
場合があります。ここでは、「Z=X *Y」を計算する際に行列Xを「区分け」してから演算を行なう方法をご紹介します。具体的には、次のような行列演算の手法を用いています。

SASプロシジャ リファレンス バージョン8：
SAS/STATソフトウェア
注文番号： 10088
価

格： 2,500円

本書で取り上げているプロシジャは下記の通りです（今後改訂版において、新刊マニュアルのご紹介

その他のプロシジャも取り上げていく予定です）。
・GENMODプロシジャ

・TTESTプロシジャ

・NLMIXEDプロシジャ

・FREQプロシジャ

このたび、SASシステム バージョン8の持つ多くのプロシジャの中から、使用頻度の高いプロシジャを抜粋して、プロダクトごとに以下の4つの分冊

これらのマニュアルは、各プロシジャの構文、および簡単なサンプルプロに編成した日本語版リファレンスマニュアルを出版します。販売は2002年

グラムのみを掲載しております。上記マニュアルの詳細については、弊社

5月上旬を予定しております。

ホームページ（http://www.sas.com/japan/manual/）をご覧ください。
また、
これらのマニュアルのPDF版は「インストレーションドキュメントメディ

SASプロシジャ リファレンス バージョン8：
SAS/CONNECT, SAS/ACCESS, SAS/SHARE,
SAS/MDDB Serverソフトウェア

ア」に含め、SASシステムリリース 8.2をご契約されている全サイトに無償でお送りします（1契約につき1枚）。ご送付は5月末を予定しています。

注文番号： 10085
価マニュアル販売係

格： 3,000円

本書で取り上げているプロシジャは下記の通りです（プロダクトの関係上、一部Base SASソフトウェアのプロシジャも解説しています）。

■SAS/CONNECTソフトウェア■SAS/SHAREソフトウェア●●●

・UPLOADプロシジャ

・SERVERプロシジャ

なお、マニュアル申込用紙および最新のPublication Catalog

・DOWNLOADプロシジャ・OPERATEプロシジャ（マニュアル案内パンフレット）は弊社ホームページ（http://www.

■SAS/ACCESSソフトウェア
・ACCESSプロシジャ■SAS/MDDB Serverソフトウェア
・MDDBプロシジャ

sas.com/japan/manual/）にて公開しておりますので、併せてご利用ください。

・DBLOADプロシジャ
・IMPORTプロシジャ

2002年4月より、バージョン6関連マニュアル（英語版のみ）の大幅な値下・EXPORTプロシジャ

げ、および「Books by Users」の一部値上げを実施いたしました。詳細は弊社ホームページをご覧ください。

SASプロシジャ リファレンス バージョン8：
SAS/ETSソフトウェア
注文番号： 10086
価

格： 2,000円

本書で取り上げているプロシジャは下記の通りです（今後改訂版において、その他のプロシジャも取り上げていく予定です）。
・ARIMAプロシジャ

・FORCASTプロシジャ

・X11プロシジャ

・X12プロシジャ・AUTOREGプロシジャ

SASプロシジャ リファレンス バージョン8：
SAS/GRAPHソフトウェア
注文番号： 10087
価

格： 4,000円

本書で取り上げているプロシジャは下記の通りです（今後改訂版において、その他のプロシジャも取り上げていく予定です）。
・GCHARTプロシジャ

・G3Dプロシジャ

・GPLOTプロシジャ

・GMAPプロシジャ5月より、お得なセットプラン開始
複数のコースをセットでお申し込みいただくと、格安となるセットプランができました。SASを基礎から学びたい方、GUIを順序だてて学びたい方には最適なセットプランとなっています。

SASトレーニングのお知らせ「Basic Plan」
3コースセット: ¥100,000（税別）・「SASプログラミング: Basic I」コース
・「SASプログラミング: Basic II」コース

SASインスティチュートジャパンでは、現在SASシステム リリース8.2を使・ 以下の5コースよりいずれか1コース選択

用したトレーニングを行なっています。SASシステムのデータアクセス、管→「マクロ言語入門」コース

理、解析、そしてプレゼンテーションの機能をフルにご活用いただくために、→「マクロ言語上級」コース

トレーニングを随時開催中です。なお、
日程・金額等のコース情報の詳細→「ODS入門」コース

については、弊社ホームベージ（http://www.sas.com/japan/training/）→「実践データハンドリング」コース

をご参照いただくか、弊社トレーニング担当までお問い合わせください。

→「Version 8 拡張点入門」コース

個別トレーニングのご案内「Statistic GUI Plan 」

現在、お客さまの人材育成に関するニーズが多様化しています。より幅広

3コースセット: ¥90,000（税別）

くSASシステムをご利用いただくために、弊社では現場に密着したトレー

・「統計概論」コース

ニングを提供していきたいと考えております。お客さまのスケジュールに・「SASによるデータ解析入門」コース

合わせた日程での個別トレーニングのご案内です。

・ 以下の3コースよりいずれか1コース選択→「時系列データ解析入門」コース［次のような場合、より効果的です］→「アンケートデータ解析入門」コース

・ 同じトレーニングを何人も受講する必要がある。

→「ビジュアルデータ解析」コース→人数によっては格安となります。
・ 定期トレーニングに出席するには出張経費がかかりすぎる。
→ご予算の枠内で最適コースを実施できるようお手伝いします。

※ 請求書は、1コース受講終了後に発行いたします。
※ 日程・コースの変更は可能ですが、キャンセルはできませんのでご了承ください。

・ 忙しくてスケジュールが合わない。
→ご希望の内容、場所、期間、時間帯で実施できるよう調整します。

［セットプランのお申し込み方法］

お客さま先へのご訪問、
または弊社トレーニングルームにお越しいた

弊社指定のトレーニング受講申込書にありますセットプラン名の欄をチェッだき実施します。

クした上で、受講希望コースと日程を明記し、ファクシミリでお送りください。

［基本価格（10名様まで）］

トレーニング担当（1日：180,000円〜）＋（コースチャージ：１コースにつき30,000円〜）
追加１名につき 18,000円〜／1日（消費税別途）●●●※ 講師がお客さまの所へ訪問してトレーニングを行なう場合は、
上記に諸経費（移動日・設定作業・宿泊費・交通費）を加算させていただきます。
※ 20名様以上の場合は、別途ご相談させていただきます。

［お申し込み方法］
まず、お電話またはE-Mailにてお問い合わせください。日程、内容等を調整後、個別トレーニング申込用紙・参加者リスト用紙をお送りします。ご記
入後、ファクシミリにてご返送ください。お見積書・トレーニング案内をご担
当者さまにお送りします。
［お支払い方法］
個別トレーニング終了後、ご請求書をお送りします。
１ヶ月以内に弊社指定の銀行口座にお振り込みください。

SASプログラマーズ・
ワークショップ開催のお知らせ

最新リリース情報

SASシステムは、
スタンドアローン環境およびクライアント・サーバ環境に■PCプラットフォーム

おいて、情報系から基幹系までさまざまな利用形態を実現しています。特
TS2M0

Windows版

SASシステム リリース8.2

OS/2版

SASシステム リリース6.12 TS020

Macintosh版

SASシステム リリース6.12 TS040にオープン系によるクライアント・サーバ環境におけるデータセキュリティ
については、どの企業においてもシステムを構築する上で必須条件となっています。
6月のSASプログラマーズ・ワークショップでは、SASシステムを利用する
上で、バージョン8eで提供されているセキュリティ機能をどのようにシステ■ミニコンピュータプラットフォーム

ムへ反映させるかについて、ご紹介します。

OpenVMS AXP版

SASシステム リリース6.12 TS020

OpenVMS VAX版

SASシステム リリース6.08 TS407■東京開催
日程 ： 6月12日（水）
会場 ： 株式会社SASインスティチュートジャパン 東京本社

■UNIXプラットフォーム

住所 ： 東京都中央区勝どき1-13-1 イヌイビル・カチドキ8F

MIPS ABI版

SASシステム リリース6.11 TS040

Tru64版

SASシステム リリース8.2

ABI+版

SASシステム リリース6.11 TS040

TS2M0

SunOS/Solaris版

SASシステム リリース8.2

TS2M0

HP-UX版

SASシステム リリース8.2

TS2M0

AIX版

SASシステム リリース8.2

TS2M0

Linux版

SASシステム リリース8.2

TS2M0

プレゼンテーションルーム
時間 ： 15:00 〜 17:00
定員 ： 50名■大阪開催
日程 ： 6月21日（金）
会場 ： 株式会社SASインスティチュートジャパン 大阪支店
住所 ： 大阪市北区堂島浜1-4-16 アクア堂島西館12F
プレゼンテーションルーム

■メインフレームプラットフォーム

時間 ： 15:00 〜 17:00

MVS版

SASシステム リリース6.09E TS470

MSP版

SASシステム リリース6.09E TS470

VOS3版

SASシステム リリース6.09E TS470

CMS版

SASシステム リリース6.08

TS410

定員 ： 50名
両日とも参加は無料となりますので、ぜひご参加ください。なお、定員に限りがございますので、お早めにお申し込みください。お申し込み方法は、「SAS
プログラマーズ・ワークショップ参加申込用紙」へご記入の上、FAX、Emailにてご送付ください。SASプログラマーズ・ワークショップのお申し込
み用紙は下記のURLより入手できます。
http://www.sas.com/japan/service/technical/pws.html
その他、ご不明点、ご質問がございましたら、以下までご連絡ください。

SASプログラマーズ・ワークショップ担当
●
●
●

発行
株式会社SASインスティチュートジャパン
テクニカルニュースに関するお問い合わせ先
テクニカルサポートグループ

TEL:03-3533-3877
FAX:03-3533-3781
E-mail:technews@jpn.sas.com