スクリプトガイド > JMPの拡張 > SASの使用 > SAS Metadata Serverへの接続
公開日: 04/01/2021

SAS Metadata Serverへの接続

JMPからSASサーバーに接続し、SASデータセットを処理できます。なお、これらの一連の操作は、JSLでもプログラミングできますが、メニューでも用意されています。JMPインターフェースでのメタデータサーバーへの接続については、『JMPの使用法』SAS Metadata Serverへの接続を参照してください。

注: 物理ワークスペースサーバーに接続する場合は、メタデータサーバーが関係しないため、メタデータ用のセキュリティが適用されません。SAS Metadata Serverに接続してから論理ワークスペースサーバーに接続する必要があります。そうすれば、アクセス対象であるメタデータ定義のライブラリに対してメタデータ用のセキュリティが実施されます。

接続

まず、Meta Connect()関数でSAS Metadata Serverに接続します。

connected = Meta Connect( "MyMetadataServer", port );

メタデータサーバーのSASのバージョンを指定するには、SASVersion名前付き引数を使用します。

connected = Meta Connect( "MyMetadataServer", port, SASVersion("9.4") );

コンピュータの名前(myserver.mycompany.comなど)とポートだけを指定した場合、認証ドメイン、ユーザ名、およびパスワードの指定を促すプロンプトが表示されます。これは、JSLで指定することもできます。

connected = Meta Connect( "MyMetadataServer", port, "authdomain", "user name", "password" );

SAS Metadata Serverの使用が終わったら、Meta Disconnect()で接続を解除します。引数は必要ではなく、このコマンドで現在のメタサーバー接続が閉じられます。

メタデータサーバー上で使用可能なリポジトリを確認し、使用したいリポジトリを設定できます。

Meta Get Repositories();

{"Foundation"}

Meta Set Repository( "Foundation" );

使用できるリポジトリが1つしかない場合は、自動的にそれが選択されるため、特に設定する必要はありません。

リポジトリを設定すると、使用可能なサーバーを確認することができます。

mylist = Meta Get Servers();

{"SASMain", "Schroedl", "SASMain_ja", "SASMain_zh", "SASMain_ko", "SASMain_fr", "SASMain_de", "SASMain_Unicode"}

次に、SAS接続を設定します。このコマンドを使用すると、メタデータサーバーを使用せずに、ローカルまたはリモートサーバーに直接接続できます。

conn = SAS Connect( "SASMain" );

ここで、connオブジェクトにDisconnectおよびConnectメッセージを送信して、SAS接続を閉じる/開くことができます。

conn << Disconnect();
conn << Connect();

上記のプログラムは、メタデータのオブジェクトにメッセージを送って、SASに接続しています。JSLでは、関数によって、SAS接続をグローバルに確立することもできます。その場合、メタデータのオブジェクトにDisconnectConnectメッセージを送っても、グローバルなSAS接続には影響しません。ただし、グローバルなSAS接続がない場合は、メタデータのオブジェクトから開かれたSAS接続が、グローバルなSAS接続に設定されます。

SASライブラリに自動的に接続する

SASサーバーに接続する際に、メタデータで定義されたSASライブラリに自動的に接続するには、Connect Librariesを使用します。

conn = SAS Connect( "SASMain", Connect Libraries( 1 ) );

メタデータで定義されたすべてのライブラリに接続されるため、接続に時間がかかる場合があります。

特定のライブラリに後で接続するには、SAS Connect Libref()関数を使用するか、またはSASサーバーオブジェクトに対してConnect Librefメッセージを送ります。

SASライブラリの表示

SASサーバーに接続し、サーバー上のライブラリを見るにはGet Lib Ref()関数を使用します。

conn << Get Lib Refs();

{"BOOKS", "EGSAMP", "GENOMICS", "GISMAPS", "JMPSAMP", "JMPTEST",

"MAILLIB", "MAPS", "OR_GEN", "ORION_RE", "ORSTAR", "SASHELP",

"SASUSER", "TEMPDATA", "TSERIES", "V6LIB", "WORK", "WRSTEMP"}

必要なデータセットを含んだライブラリが割り当てられていない場合は、そのライブラリを割り当てます。

conn << Assign Lib Refs( "MyLib", "$DOCUMENTS/data" );

SASデータセットを開く

まず、SASライブラリ参照名を割り当てます。

conn << Assign Lib Refs( "MyLib", "$DOCUMENTS" );

第1引数は、任意のSASライブラリ参照名です。第2引数は、データセットがあるサーバ上のパスです。

次に、選択したライブラリの配下にあるデータセットの名前を、リストで取得します。

datasets << Get Data Sets( "MyLib" );

{"ANDORRA", "ANDORRA2", "ANYVARNAME", "BOOKS", "BOOKSCOPYNOT", "BOOKS_VIEW", "CATEGORIES", "DATETIMETESTS", "MOREUGLY", "NOTTOOUGLY", "PAYPERVIEW", "PUBLISHERS", "PURCHASES", "PURCHASES_FULL",

これで、データセットを開く準備ができました。

conn << Import Data( "MyLib", "PURCHASES" );

または

conn << Import Data( librefs[1], datasets[12] );

または

conn << Import Data( "MyLib.PURCHASES" );

これで、ライブラリ内にあるデータセットについての情報を取得できます。次のプログラムは変数名をリストで取得できます。

conn << Get Var Names( "MyLib.PURCHASES" );

{"purchaseyear", "purchasemonth", "purchaseday", "bookid", "catid",

"pubid", "price", "cost"}

この情報を元に、読み込む変数を指定し、データセットの一部だけを読み込むこともできます。

conn << Import Data( librefs[1], datasets[12], columns( bookvars[1], bookvars[2], bookvars[4] ) );

注: Import Dataで指定する名前は、メタデータライブラリの表示名でも、SASの8文字のライブラリ名でもかまいません。

SASデータセットの保存

JMPデータテーブルを、SASデータセットに保存するには、SAS Export Data()コマンドを使用します。

conn << Export Data( dt, librefs[1], datasets[4], ReplaceExisting );

ストアドプロセスの実行

ストアドプロセスへの参照を取得するには、次の関数を使用します。

stp = Meta Get Stored Process( "Samples/Stored Processes/Sample:Hello World" );

JSLでストアドプロセスのリストを取得する方法はありません。実行したいストアドプロセスへのパスを知っている必要があります。

ストアドプロセスを実行するには、ストアドプロセスにメッセージを送ります。

stp << Run();

JMPからのSASコードのサブミット

SASプログラムを直接サブミットして、その実行結果を取得することもできます。例:

conn << Submit( "proc print data=sashelp.class; run;" );

オプションの2つの引数により、SASのアウトプットやログをJMP上に表示するかどうかを指定します。

conn << Submit( "SAS Code" <,No Output Window(True|False)> <,Get Log(True|False )> );

また、SASのログは、次のコマンドによりいつでも得ることができます。

conn << Get Log();

Get Log()は、SASのログを文字列として戻します。この文字列は、JSLにおける通常の文字列と同じように、JSL変数に代入して使用することができます。

より詳細な情報が必要な場合や、質問があるときは、JMPユーザーコミュニティで答えを見つけましょう (community.jmp.com).