はじめに
SAS/AFソフトウェアを使用してさまざまなGUIアプリケーションを作成することができます。ここでは、その際に必要となる、便利なテクニックを紹介します。
・1ではフレーム間で情報を受け渡す方法を4種類紹介します。
・2では一般的なアプリケーションであるマスター／ディテイル ア
プリケーションの作成方法を2通り紹介します。
・3では2の例を応用し、トラフィックライティング（例外強調）する
アプリケーションの作成方法を紹介します。

1. フレーム間での情報の受け渡し
複数のフレームで構成するアプリケーションを作成する時、フレー
ム間で情報の受け渡しが必要となる場合があります。ここでは簡単な例を挙げながら、4通りの方法を紹介します。

1.1 DISPLAYルーチンのパラメータを利用する方法
一番基本的で、簡単な方法です。DISPLAYルーチンで受け渡されたパラメータは、呼び出されたフレーム内で値が変更された場合、呼び出したフレーム内でも値が自動的に変更されます。その仕組みを利用した方法です。
例題）
次ページの図のようなシンプルなアプリケーションを作成します。
一つ目のフレームにはグラフがあります。そのグラフをクリッ
クすると二つ目のフレーム（ダイアログ）が表示され、一つ目のフレームにあるグラフのタイトルを変更できます。

ム上にあるオブジェクトのメソッドを実行できるために可能になったものです。

GRAPH.FRAMEのSCL

init:/* グラフオブジェクトのオブジェクトIDを取得します */call notify(’.’, ’_get_widget_’, ’graph1’, graphid);

GRAPH.FRAMEのSCL

return;init:
graph1:/* 現在のタイトルを取得します *//* グラフのオブジェクトIDを取得します */call send(_self_, ’_get_widget_’, ’graph1’, graphid);

title1=getnitemc(graphid, ’title1’);

return;/* タイトルダイアログを呼び出します */graph1:

call display(’title.frame’, title1);/* ダイアログを呼び出します */call display(’send2.frame’, graphid, _self_);/* 新しいタイトルをセットします */return;call notify(’graph1’, ’_set_title_’, 1, title1);
return;TITLE.FRAMEのSCL

1.2 SENDルーチンを利用する方法

entry graphid 8 frameid 8;●CALL NOTIFYとCALL SENDの違い
SENDルーチンとNOTIFYルーチンはほぼ同じように使用できますが、オブジェクトを指定する方法が異なります。NOTIFYルーチンではオブジェクト名で指定するのに対し、SENDルーチンではオブジェ
クトIDでオブジェクトを指定します。オブジェクトIDは一つのSAS

init:/* 入力フィールドに現在のタイトルを表示します */field1=getnitemc(graphid, ’title1’);
return;セッションで一意のものなので、SENDルーチンはどのフレーム上にあるオブジェクトのメソッドでも実行できます。

apply:/* 新しいタイトルを設定します */●SENDルーチンの使用方法

call send(graphid, ’_set_title_’, 1, field1);

SENDルーチンを使用するためには、まずオブジェクトIDを調べる必要があります。フレームオブジェクトの̲GET̲WIDGET̲メソッ
ドを実行することにより、オブジェクトIDを取得できます。下記の二通りの方法があります。

/* タイトルの変更を反映させます */call send(frameid, ’_refresh_’);return;CALL NOTIFY(’.’, ’_GET_WIDGET_’,widget-name, widget-id);1.3 環境リストを利用する方法●環境リストとは
CALL SEND(_SELF_, ’_GET_WIDGET_’,widget-name, widget-id);

環境リストは複数のフレームから参照できる特別なSCLリストです。
環境リストには、グローバル環境リストとローカル環境リストの2
種類があります。ローカル環境リストは一つのAFタスク（1回の例題）

AFAまたはTESTAFコマンド）につき一つ、自動的に作成されます。

1.1と同様に、シンプルなアプリケーションを作成します。しかし、グローバル環境リストは一つのSASセッションにつき一つ作成され今回は先の例題とは少し動作が異なります。タイトルダイアロ

ます。

グでタイトルを変更してAPPLYボタンを押すたびに変更がグラフに反映されます。これはSENDルーチンによって、違うフレー

●ENVLIST関数

TITLE.FRAMEのSCL

環境リストのリストIDは、ENVLIST関数を使って取得できます。
init:

ENVLIST関数の構文/* local listのリストIDを取得します */localid=envlist(’L’);

list-id=ENVLIST(class);/* 入力フィールドに現在のタイトルを表示します */※ class には'G'（global）または'L'（local）が入ります。

field1=getnitemc(localid, ’title’);return;例題）
ここで作成するアプリケーションでは、CANCELコマンドでタterm:

イトルダイアログを終了することにより、タイトルの変更のキ

if _status_=’E’ then

ャンセルが可能です。これはタイトルダイアログの終了時に/* local listに変更後のタイトルを保存します */̲STATUS̲自動変数をチェックして、̲STATUS̲='E' 以外の場

rc=setnitemc(localid, field1, ’title’);合は環境リストに変更を加えないためです。

return;1.4 SAVELIST/FILLIST関数を利用する方法●SAVELIST関数とFILLIST関数
SAVELIST関数とFILLIST関数を使用することにより、SCLリストをファイルへ保存したり、ファイルから読み込むことができます。ファイルに保存されたSCLリストを利用して、フレーム間で情報の受け渡しができます。
SAVELIST関数の構文

rc=SAVELIST(type, source, list-id<,attr-list-id<,description>>);・rc

リターンコード。成功ならば0、失敗ならば0以外の値となります。

GRAPH.FRAMEのSCL
・type

保存先ファイルの種類。'CATALOG'又は'FILE'、'FILEREF'。

・source

保存先の名前。

/* ローカル環境リストのIDを取得します */・list-id

保存されるリストのID。

localid=envlist(’L’);

・att-list-id

init:

テキスト属性が入っているSCLリストのID（type が'CATALOG'の場合のみ）。

put ’(envlist1)’ localid=;・description カタログエントリの説明。
/* グラフオブジェクトのIDを取得します */call send(_self_, ’_get_widget_’, ’graph1’, graphid);

FILLIST関数の構文

return;rc=FILLIST(type, source, list-id<, attr-list-id<, description>>);graph1:/* 現在のタイトルを取得します */・rc

リターンコード。成功ならば0、失敗ならば0以外の値となります。

title1=getnitemc(graphid, ’title1’);・type

SCLリストが保存されるファイルの種類。

/* ローカル環境リストに現在のタイトルを保存します */・source

読み込み元の名前。

rc=setnitemc(localid, title1, ’title’);・list-id

値が入るリストのID。

/* タイトルダイアログを呼び出します */call display(’title.frame’);/* ローカル環境リストから変更後のタイトルを読み出します */title1=getnitemc(localid, ’title’);/* 新しいタイトルをグラフにセットします */call notify(’graph1’, ’_set_title_’, 1, title1);
return;例題）

TITLE.FRAMEのSCL

今回のアプリケーションではグラフのタイトルをファイルに保存するため、アプリケーションを終了しても次回起動した時にユーザーが設定したタイトルが復元します。

init:
entry=’sasuser.profile.titles.slist’;/* タイトルを保持するリストを作成します */titles=makelist();if cexist(entry) then do;/* ファイルからリストを読み出します */rc=fillist(’catalog’, entry, titles);/* リストからタイトルを取り出します */field1=getnitemc(titles, ’title1’);end;
return;

GRAPH.FRAMEのSCL

2. マスター／ディテイル アプリケーション

init:/* グラフオブジェクトのIDを取得します */マスター／ディテイル アプリケーションとは、マスターデータセッ

call send(_self_, ’_get_widget_’, ’graph1’, graphid);

トで選択されたオブザベーションに関するデータだけ詳細データセットから抽出し、表示するアプリケーションです。

entry=’sasuser.profile.titles.slist’;

下の画面はマスター／ディテイル アプリケーションの一例です。データフォームには一人分の顧客情報が、データフォーム上のデータ/* タイトルを保持するためのリストを作成します */テーブルには、その顧客の搭乗履歴が表示されています。

titles=makelist();/* ファイルからタイトルを読み込みます */link loadttl;
return;/* 保存されているタイトルを読み込み、表示します */loadttl:
if cexist(entry) then do;/* ファイルからリストを読み込みます */rc=fillist(’catalog’, entry, titles);

このアプリケーションでは、二つのデータセットを使用しています。
/* リストからタイトルを取り出します */マスターデータセット（顧客情報）と、詳細データセット（全顧客title1=getnitemc(titles, ’title1’);の搭乗履歴）です。

/* グラフにタイトルをセットします */マスターデータセット（顧客情報）の一部

call notify(’graph1’, ’_set_title_’, 1, title1);

end;
return;graph1:/* タイトルダイアログを呼び出します */call display(’title.frame’);/* ファイルからタイトルを読み込みます */link loadttl;
return;詳細データセット（搭乗履歴）の一部

2.2 モデルSCLを利用する方法●モデルSCLとはモデルSCLは、（フレームではなく）データテーブル、またはデータ
フォームに関連付けられた特別なSCLエントリです。
モデルSCLの応用例◆計算列の値の計算◆データテーブル（又はデータフォーム）に入力された値のチェック◆マスター／ディテイル アプリケーション

このアプリケーションを実現するためには、データフォームで表示◆トラフィックライティング（例外強調）

される顧客情報と、データテーブルで表示される搭乗履歴をリンクさせなくてはなりません。リンクをさせる方法には2通りあります。

●モデルSCLのラベル

以下にそれぞれの方法をご説明いたします。

モデルSCLにおいて、特別な意味を持つラベルを紹介します。
・DFINIT

2.1 キー列を利用する方法
キー列の利用は容易ですが、制約があります。以下のいずれかの条
件の時にキー列が使用できます。
・同期をとるための変数が一つだけ存在する・同期をとるための条件が「=（イコール）」である

全ての列が表示される前に、1度だけ実行されます。
・INIT
1行毎に、行が表示される前に実行されます。
・MAIN
フィールドの値が更新される度に実行されます。
・TERM

●作成手順
I. データフォームオブジェクトを作成する
1. テーブルに、マスターデータ（顧客情報）のデータセット名を設定する
2. データフォーム エントリには「FLYERS1.DATAFORM」
（例）と
設定する
3. O K ボタンを押してデータフォームの属性ウィンドウを閉じる
II. データフォームオブジェクトの上に、データテーブルオブジェ

違う行へ移る前に実行されます。
・DFTERM（アプリケーション終了時など）オブジェクトが終了する時に実行されます。
・列名
列の値が更新される度に、更新された列名と同名のセクションが実行されます。
●フレームSCLとモデルSCLの実行順序クトを作成する

データテーブルまたはデータフォームのフィールドが更新された際

1. テーブルに、詳細データ（搭乗履歴）のデータセット名を設定するのSCL実行順序は、下記のようになります。

2. 列のカスタマイズを選択する
3. テーブルのカスタマイズウィンドウで、オプション ボタンを押す
4. キー列に「FFID」（例）と設定する
5. 了 解 ボタンを2回押して、フレームに戻る

1. モデルSCLの更新されたフィールド名（列名）と同名のセクション
2. モデルSCLのMAIN
3. フレームSCLのデータテーブルまたはデータフォームオブジェクト名と同名のセクション
4. フレームSCLのMAIN

III. リンクを完成させる
1. データフォームオブジェクトの上で右クリックをして、ポッ
プアップメニューから、［フォーム ->］を選択する●モデルSCL内のSCL変数
モデルSCL内で使用できるSCL変数は、次の3種類です。

2. ポップアップメニューから、［列ウィンドウ］を選択する
3. FFIDを選択し、ドラッグして、データテーブルオブジェクトの上にドロップする

・列変数
テーブルにある列と同じ名前のSCL変数は、テーブルの列と同じ値を持ちます。テーブルの列の値が更新されると、同じ名前を持IV. 動作確認
1. TESTAFコマンドを使用して、プログラムを実行する

つSCL変数の値も自動的に更新されます。逆に、SCL変数の値を更新すると、テーブルの列の値も自動的に更新されます。

2. データフォームを選択した状態で、「Page Up」、
「Page Down」
キーを使用して、マスターデータと詳細データがリンクされていることを確認する

・列変数ではないSCL変数
テーブルの列名と関連のないSCL変数は普通のSCL変数として使用できます。モデルSCL内のSCL変数はローカルのSCL変数として扱われ、フレームSCL内のSCL変数から独立しています。
・システム変数
システムから情報を受け取ったり、渡したりするための特別な変数です。システム変数の一つである̲VIEWER̲は、値にデータテーブルまたはデータフォームのオブジェクトIDを持っています。

2.3 モデルSCLを利用したマスター／ディテイル アプリ
ケーション

INIT:
/* WHERE条件を初期化します */モデルSCLを利用すると、キー列では実現できないマスター/ディ

rc=clearlist(wherelist);

テイル アプリケーションを作成できます。

/* WHERE条件を作成します */例えば次のような場合でも、モデルSCLを使用するとマスター/ディ

rc=insertc(wherelist, ’ffid=’ || quote(ffid), -1);

テイル アプリケーションを作成できます。

rc=insertc(wherelist, ’and month(date)=’ || month(today()), -1);

・サブセット化のキーとなる変数が複数の場合
・サブセット化の条件がイコール以外の場合/* WHERE条件をセットします */call send(tabid, ’_set_where_’, wherelist);

2.1で作成したマスター/ディテイル アプリケーションとほとんど同

return;じですが、2月の搭乗履歴のみが表示されています。
/* DFTERM データフォームがなくなる時に、一度だけ実行されます */DFTERM:/* リストを消去します */rc=dellist(wherelist);
return;4. COMPILEコマンドを実行して、モデルSCLをコンパイルする
5. ENDコマンドを実行して、SCLの編集を終了する（同時にモデルSCLが保存されます）
IV. 動作確認
1. TESTAFコマンドを使用して、プログラムを実行する
サブセット化のキーとなる変数が複数（FFIDとDATE）のため、キー列だけではこのようなアプリケーションを作成できません。

2. データフォームを選択した状態で、「Page Up」、
「Page Down」
キーを使用して、次の項目を確認する・マスターデータと詳細データがリンクされていること●作成手順

・ 2月（当月と同じ月）の履歴のみが表示されていること

I. データフォームオブジェクトを作成する
1. テーブルに、マスターデータ（顧客情報）のデータセット名を設定する
2. データフォーム エントリには「FLYERS2.DATAFORM」
（例）
と設定する

3. トラフィック ライティング（例外強調）
データテーブルのモデルSCL内で̲SET̲VIEWER̲ATTRIBUTE̲メソッドを使用すると、下の図のようなトラフィック ライティング（例外強調）が実現できます。

3. SCLエントリには「FLYERS̲M.SCL」（例）と設定する
4. O K ボタンを押してデータフォームの属性ウィンドウを閉じる
II. データフォームオブジェクトの上に、データテーブルオブジェク
トを作成する1. 名前を「TABLE」（例）と設定する
2. テーブルに、詳細データ（搭乗履歴）のデータセット名を設定
する
3. 了解 ボタンを押して、フレームに戻る
III. モデルSCLを編集、コンパイルする
1. データフォームオブジェクトの上で右クリックをして、ポッ
プアップメニューから、[フォーム ->]を選択する

このアプリケーションは、2.1のキー列を使用したマスター/ディテイ

2. ポップアップメニューから、[SCLの編集...]を選択する

ル アプリケーションに変更を加えたものです。DISTANCEが5,000

3. 下記のプログラムを入力する

マイル以上の場合はセルの背景が青色に、1,000マイル未満の場合
はセルの背景が黄色になっています。

/* DFINIT 全ての行が表示される前に、一度だけ実行されます */DFINIT:/* ̲SET̲WHERE̲メソッドで使用するリストを作成します */wherelist=makelist();/* データテーブルのオブジェクトIDを調べます */call send(_viewer_, ’_get_widget_’, ’OBJ2’, tabid);
return;●作成手順
I. 先に作成したマスター/ディテイル アプリケーションのフレー
ム編集画面を開く
II. データテーブルのモデルSCLを編集、コンパイルする
1. データテーブルの上で右クリックをして、ポップアップメ
ニューから[テーブル ->]を選択する
2. [SCLの編集...]を選択する/* INIT ユーザがスクロールして、各行が表示される前に実行されます */3. 下記のようにプログラムを入力する

/* INIT − 各行が表示される前に、1度ずつ実行されます */参考マニュアルinit:
if distance >= 5000 then do;/* 背景を青色に、文字を白に設定します */call send(_viewer_, ’_set_viewer_attribute_’,’distance’, ’bcolor’, ’blue’);●SAS/AFソフトウェア：FRAMEエントリ 使用法およびリファレンス
Version 6, First Edition●SAS/AFソフトウェア：FRAMEエントリ入門ガイド
Version 6, First Edition

call send(_viewer_, ’_set_viewer_attribute_’,’distance’, ’fcolor’, ’white’);●SAS/AFスクリーンコントロール言語：リファレンス
Version 6, Second Editionend;
else if distance < 1000 then do;/* 背景を黄色に設定します */call send(_viewer_, ’_set_viewer_attribute_’,’distance’, ’bcolor’, ’yellow’);●SASスクリーンコントロール言語：使用法ガイド
Version 6, First Edition●SAS/AFソフトウェア：使用法およびリファレンス
Version 6, Second Edition

end;●SAS/AFソフトウェア：FRAME Class Dictionary

return;4. COMPILEコマンドを実行して、モデルSCLをコンパイルする
5. ENDコマンドを実行して、SCLの編集を終了する（同時にモデ ルSCLが保存される）
III. 動作確認
1. TESTAFコマンドを使用して、プログラムを実行する
2. データフォームを選択した状態で、「Page Up」、
「Page
Down」キーを使用して、次の項目を確認する
・ DISTANCEが5,000マイル以上の場合、セルの背景が青色になっていること
・ DISTANCEが1,000マイル未満の場合、セルの背景が黄色になっていること

例）
リモートホストのIPアドレス: 111.222.333.444

リモートホストのtelnet ポート番号 : 1234

%let rhost = 111.222.333.444 1234 ;●Windows版SASでのダイアログボックスのフォルダ変更について●SAS/CONNECTのポート番号の切り替えについて●UNIX版SASでのディスク分割について●メインフレーム上のSASデータセットをWindows版SASに取り込む方法について●SAS/INSIGHTにおける棒グラフの出力形式について●DISCRIMプロシジャでの2群判別分析の関数について●MIXEDプロシジャでの反復測定の出力について

filename rlink ’スクリプトファイル名’ ;options comamid=tcp remote=rhost ;UNIX版SASシステムで作成したSASデータセットを分割してディレクトリに保存するには、どのようにすればよいでしょうか。
PARTSIZEシステムオプションで、指定のディレクト
リ内で1回あたりに使用可能なファイルサイズを指定す

プルダウンメニューの［ファイル］から［オープン］を選択し、［ファイルを開く］ダイアログボックスを表示しることにより、SASデータセットを分割して保存するます。SASシステムをインストールしたフォルダ内のことができます。下記に、ユーザ定義領域とWORK領域に対する指ファイルが最初に表示されますが、他のフォルダに変更できますか。
SASシステムの作業フォルダ内のファイルが、最初に定方法を紹介します。

［ユーザ定義領域に対する指定方法］

表示されます。デフォルトでは、SASセッションを起/disk1と/disk2にそれぞれ100GBずつ割り振る場合は、次のように動したディレクトリが作業フォルダになりますので、指定します。

SASプログラムショートカットのプロパティページで［作業フォルダ］フィールドの値を変更します。なお、作業フォルダの変更により、SASUSERライブラリ用とWORKライブラリ用のフォルダが変

libname libref(’/disk1’,’/disk2’) type=partition partsize=100G;※1※2

更されますが、次のように環境設定ファイル（CONFIG.SAS）を設定※1

type=partitionは省略できます。

することで回避できます。

※2

partsize=のデフォルト値は500MBです。変更する場合には、単位にG（ギガバイト）、M（メガバイト）、K（キロバイト）を例）

使用して値を設定します。ただし単位を省略すると、K（キロSASUSERシステムオプションとWORKシステムオプションに、

バイト）と判断します。

SASルートディレクトリを指定します。
また、以下のようにも指定できます。
変更後

変更前-SASUSER

sasuser·-SASUSER

c:·sas·sasuser

libname lib1 ’/disk1’;-WORK

saswork·-WORKc:·sas·saswork

libname lib2 ’/disk2’;
libname libcon (’lib1’,’lib2’) type=partition partsize=100G;※3※3
SAS/CONNECTソフトウェアでTCP/IPを使用してリモ

type=partitionは必須です。

［WORK領域に対する指定方法］

ートホストに接続をする際、リモートホスト側のTELNET

SASシステムの起動時に使用する環境設定ファイル（config.sas612）のポートを'23'以外で定義しているため、下記のように、次のように指定します。

なエラーとなります。使用ポートを変更する方法はありますか。
-work (/disk3,/disk4,/disk5)

ログ-partsize 200M

ERROR: TCP ソケットを接続できません．
システムメッセージ ’10061 - WSAECONNREFUSED’ERROR: RHOST へのリモート接続を取り消しました．

例）
物理的に/disk1〜/disk10まで各1GB、合計10GB の一時作業領域が使えるディスクがあるとします。ここで、PARTSIZEにおいて200MBを指定したとします。

SAS/CONNECTソフトウェアではリモートホストとの接続・切断時に、デフォルトでTELNETのポート'23'を使用します。このポートを変更する場合は、マクロ変数にそのポート番号を明示的に格納します。

・ケース1：1GBのデータセットをWORK領域に作成する場合

例2) パック10進データ

PARTSIZEが200MBであることから、1GB/200MB=5となり、S370FPDw.d（符号あり）あるいはS370FPDUw.d（符号なし）
インフ/disk1から順番にPARTSIZEで指定したサイズまでファイルを作ォーマットを使用する場合

成して、次の領域に作りにいきます。その結果、/disk1〜/disk5まで作成することになります。

符号ありの数値

・ケース2：300MB のデータセットをWORK領域に作成する場合’000012345C’x

input @1 numvar S370FPD5.2;

123.45/disk1に200MB、/disk2に100MBのファイルを作成します。

’000012345D’x

input @1 numvar S370FPD5.2;

123.45・ケース3：3GBのデータセットをWORK領域に作成する場合
3GB/200MB=15 となり、格納域が10を超えているため作成でき

符号なしの数値ません。全体として10GBの容量があるわけですから、
PARTSIZEを調整して300MB以上にする必要があります。作成す’000012345F’x

input @1 numvar S370FPDU5.2;

123.45

るデータセットの大きさが毎回同じ場合は、次のように計算して設定することが望ましくなります。
例3) バイナリ整数データ
作成するデータセットの大きさ / 指定する物理パス数 = PARTSIZE

S370FIBw.d（符号あり）あるいはS370FIBUw.d（符号なし）
インフォーマットを使用する場合
符号ありの数値

メインフレーム上のシーケンシャルデータを、Windows’0000003039’x

input @1 numvar S370FIB5.2;

123.45’FFFFFFCFC7’x

input @1 numvar S370FIB5.2;

123.45上のSASシステムで利用する方法を教えてください。
メインフレーム上のデータをWindows版SASシステム

符号なしの数値で利用するには、SASインフォーマットを使用してデータを変換します。メインフレーム上のデータをPCに’0000003039’x

input @1 numvar S370FIBU5.2 ;123.45

転送する際、EBCDICコードからASCIIコードへの変換はせずにバ
イナリ転送してください。代表的なSASインフォーマットと変換方［漢字（IBM漢字）、半角カタカナ］

法を下記に紹介します。

漢字データおよび半角カタカナについては、DBCS機能として提供［英数字データ］

されているKCVT関数を使用して目的のコード体系の漢字/カタカナメインフレーム上のEBCDICコード体系のデータ（英数字）に関してに変換します。

は、基本的に$EBCDICw.インフォーマットにてASCIIコードに変換が行われます。

構文

例）

ABCDE

KCVT(text,intype,outtype<options,...>)

input @1 name $EBCDIC5.;text: 変換処理を行いたい文字変数の指定

intype: 変換したい文字の漢字コード体系

outtype : 変換後の漢字コード体系［数値データ］

options : 必要に応じて指定

例1）ゾーン10進データ
S370FZDw.d（符号あり）あるいはS370FZDUw.d（符号なし）
インフ例1）漢字データにシフト文字が含まれている場合ォーマットを使用する場合

下記の内容で、1桁目から6バイトの長さで'漢字'というデータが含まれているファイル(IBM漢字)をシフトJIS漢字コードに変換します。

符号ありの数値

シフトコードが削除されるため、変換後の漢字を出力する変数は2バイト短くなり、4バイト長となります。

’F1F2F3F4C5’x

input @1 numvar S370FZD5.2;

123.45’F1F2F3F4D5’x

input @1 numvar S370FZD5.2;

123.45

ファイルの漢字部分 (プログラムのkanji1.bin)’0E4F5848F20F’ (IBM漢字コード、0E・0Fがシフトコード)

符号なしの数値’F1F2F3F4F5’x

input @1 numvar S370FZDU5.2;

123.45

プログラムプログラム

data _null_ ;data _null_ ;infileinput’c:·work·kanji1.bin’

@1

knj

length knj2
knj2=

infile;input$char6. ;’c:·work·kana.bin’ ;

@1

kana

length kana2

$4 ;

kana2

kcvt(knj,’ibm’,’sjis’) ;=$char4. ;$4 ;kcvt(kana,’ibm’,’sjis’,’kana’) ;put kana2 ;put knj2 ;put kana2 hex10. ;put knj2 hex10. ;

run ;

run ;

ログ

ログ
漢字

(put knj2)

カタカナ(put kana2)

8ABF8E9A(put knj2 hex10.)

B6C0B6C5(put kana2 hex10.)例2) 漢字データにシフト文字が含まれていない場合
下記の内容で、1桁目より4バイトの長さで'漢字'というデータが含まれているファイル(IBM漢字)を'シフトJIS漢字コード'に変換します。

SAS/INSIGHTソフトウェアで分類ごとに棒グラフやモ

NOSHIFTオプションを追加すれば、シフトコードなしの漢字も変ザイク図を出力すると、'その他'として扱われてしまうグループがあります。'その他'ではなく、全グループを換できます。

対象に出力するにはどのようにすればよいのでしょうか。
ファイルの漢字部分 (プログラムのkanji2.bin)

SAS/INSIGHTで棒グラフやモザイク図を作成すると、’4F5848F2’ (IBM漢字コード)

デフォルトで全体の割合から4%未満のグループが'その他'として扱われます。グラフ作成の閾値を小さくす
るには、下記の方法で変更します。

プログラム［変更方法］

data _null_ ;infileinput’c:·work·kanji2.bin’

@1

knj

length knj2
knj2

=

;

$char4. ;$4 ;kcvt(knj,’ibm’,’sjis’,’noshift’) ;put knj2 ;put knj2 hex10. ;棒グラフの場合
1. プルダウンメニューの［解析］から［ヒストグラム/棒グラフ］を選択します。
2.［ヒストグラム/棒グラフ］のダイアログボックスが開きます。
棒グラフを作成したい変数を［Y］に選択し、［手法］ボタンをクリックします。
3.［手法］のダイアログウィンドウが開きます。
［その他,閾値］の値をrun ;0%として下さい。
［了解］を選択し、手法のダイアログウィンド
ウを閉じます。
4.［ヒストグラム/棒グラフ］のダイアログボックスの［了解］を選択し

ログ

ます。
漢字

(put knj2)

8ABF8E9A(put knj2 hex10.)

DISCRIMプロシジャで2群の判別分析を実行すると、
例3）半角カタカナの場合

判別関数が2つ出力されます。一般的に知られる判別関下記の内容で、1桁目より4バイトの長さで'カタカナ'というデータ

数はどのように求められますか。

が含まれているファイル(EBCDIK)をシフトJISコードに変換します。
半角カタカナには、KANAオプションを追加します。
DISCRIMプロシジャで2群の判別分析を実行した場合、ファイルの半角カタカナ部分 (プログラムのkana.bin)’86918696’ (EBCDIK)

判別関数は下記のように2つ出力されます。

DISCRIMプロシジャ実行時のアウトプット

Discriminant Analysis Linear Discriminant Function

サンプルプログラム1

proc mixed data=data1;

Y1

Y2

CONSTANT

-13.9

-10.1

model resp=group time group*time;

X1

0.12

0.14

repeated time /subject=id(group) type=cs;

X2

0.03

0.06

X3

0.05

0.02

class id group time;run;

サンプルプログラム1の結果
判別関数
Tests of Fixed Effects
Y1=-13.9+0.12*x1+0.03*x2+0.05*x3 （Y1に対する判別関数）

Source

NDF

DDF

Type III F

Pr > F

Y2=-10.1+0.14*x1+0.06*x2+0.02*x3 （Y2に対する判別関数）

GROUP

1

6

0.42

0.5408

TIME

3

18

3.50

0.0370

GROUP*TIME

3

18

0.43

0.7362

2つの判別関数にデータを当てはめ、Y1＞Y2ならY1に、Y2＞Y1 ならY2に判別します。例えば、x1=100 x2=22 x3=44 の場合、上記の判別関数ではY1=0.96 Y2=6.1となり、Y2＞Y1よりY2に判別します。また、一般的な判別関数（Y>0のときは1群、Y<0のときは2群に判別される

サンプルプログラム2判別関数）を求めるには、2つの判別関数を引き算します。下記の判別式を利用すると、Y>0のときはY1，Y<0のときはY2に判別されます。

proc mixed data=data1;class id group time;Y1=-13.9+0.12*x1+0.03*x2+0.05*x3
Y2=-10.1+0.14*x1+0.06*x2+0.02*x3-）

Y= -3.9-0.02*x1-0.03*x2+0.03*x3

model resp=group time group*time;
random id(group);run;

サンプルプログラム2の結果
MIXEDプロシジャによって反復測定データを解析した
時に、REPEATEDステートメントで誤差にTYPE=CS

Tests of Fixed Effects（Coumpound Symmetry）を指定した時の結果と、

Source

NDF

DDF

Type III F

Pr > FRANDOMステートメントで被験者の変量効果を指定した時の結果が

GROUP

1

6

0.22

0.6521

異なる時があります。2モデルの分散共分散構造は同じになると予想

TIME

3

18

4.04

0.0232

されますが、どうして異なった結果になるのでしょうか。

GROUP*TIME

3

18

0.49

0.6917

サンプルデータ
REPEATEDステートメントにおいてTYPE=CSを指定した時、誤差の共分散は負になることが許されています。

data data1;

一方、RANDOMステートメントを用いた時、デフォルト

do group=1 to 2;
do id=1 to 4;

では変量効果の分散推定値は0以上の値をとる制約が課せられていdo time=1 to 4;

ます。そのため、変量効果の分散が負に推定されるようなデータのinput resp@@;

時には、両者の結果には違いが生じます。なお、PARMSステート

output;メントにNOBOUNDオプションを指定すると、分散推定値に対する負の推定値を許すことになりますが、0以上の制約はなくなります。

end;
end;

例）

end;
cards;

proc mixed data=data1;

11.1 12.5 14.1

18.5

10.4 12.4 10.2

19.0

parms /nobound;11.2 14.1 10.9

12.5

class id group time;

10.4 10.7 21.2

14.5

model resp=group time group*time;

11.2 15.1 14.4

18.1

random id(group);

10.4 12.3 11.1

14.8

11.2 14.2 17.9

12.0

12.4 10.3 22.1

14.2

;
run;

run;

SASインスティチュートジャパンおよび米国SAS Instituteより発売

臨時トレーニング開催！

された新刊マニュアルをご紹介します。なお、こちらに記載する価

回帰分析2コース

格はすべて税抜きです。ご購入については、弊社「マニュアル販売〜SASによる回帰分析7.8.9章の解説〜係」までお問い合わせください。

3月30日（木）10 : 30〜17 : 00

TEL

：03-3533-3835¥40,000（テキスト持参の方は¥36,000）

FAX：03-3533-3781

E-mail：booksale@jpn.sas.com

回帰分析コース受講済、単回帰分析・重回帰分析の知識がある方を対象に、回帰分析2コースを開催します。

はじめようSASシステム - 実習データFD付き -・説明変数に質的変数を含む回帰分析●注文番号 : 10081（日本語版）

・非線型回帰分析●価格・重みつき回帰分析を中心に東大出版会発行、「SASによる回帰分析」: 5,000円

本書は、SASシステムをはじめてお使いになるユーザを対象として書かれています。SASシステムのDMS (Display Manager System)の7〜9章を解説します。
開催会場は追ってご連絡します。

を利用して、対話的に処理を進める方法を中心に解説しています。
本書ではプラットフォームとして、Windows版およびUNIX版SAS
システムリリース6.12を使用して書かれていますが、SASシステムの基本的な操作方法やプログラムは、すべてのプラットフォームで共通です。したがって、本書に掲載されているウィンドウの形状を、お使いのプラットフォームに置き換えていただければ、どのプラッ
トフォームをお使いの方でも本書の内容を実行できます。本書で使用するデータもあわせてFDにて提供しております（マニュアルに添付）ので、簡単に自習できます。

Applied Multivariate Statistics withSAS Software, Second Edition●注文番号 : 56903（英語版）●価格: 8,800円

本書は統計手法、データ解析やアプリケーションをまとめる独特なアプローチで記載されています。今回大幅に改定され、有効な
MIXED効果モデルの新情報、MIXEDプロシジャのアプリケーション、
IMLプロシジャに対応する回帰診断、共分散構造についても記載されています。多数のSASプログラムとそれに対応する出力結果には例題が掲載されており、いろいろなSASプロシジャの説明が含まれています。理論・実務の両面から実験データや反復測定データの多変量解析に関するトピックやバイプロットを含むデータのグラフィックの表現や多変量回帰が含まれています。さらに付録に多変量データの特別なリファレンスとして、IMLプロシジャの簡単な概要が記載されています。

PROC TABULATE by Example●注文番号 : 56514（英語版）●価格: 7,700円

本書は主として初級〜中級のSASユーザー向けに、TABULATEプロ
シジャで表を作成する方法について、ステップ・バイ・ステップ形
式で説明しています。また、上級ユーザーにも役立つ多くのヒント
やテクニックが記載されています。本書には300以上のサンプルプ
ログラムと出力結果が紹介されており、表作成の基礎からカスタマ
イズされた複雑な出力の構築まで学ぶことができます。このマニュアルを通して、マクロを用いて表を作成する方法、SAS/ASSISTソ
フトウェアを用いて表を作成する方法、さらにTABULATEプロシジ
ャの出力を他のアプリケーションに書き出す方法も学ぶことができます。

発行
株式会社SASインスティチュート ジャパン
本社
〒104-0054 東京都中央区勝どき1-13-1 イヌイビル・カチドキ 8F
TEL: 03-3533-6921 FAX: 03-3533-6927
大阪支店〒530-0004 大阪市北区堂島浜1-4-16 アクア堂島西館 12F
TEL: 06-6345-5700 FAX: 06-6345-5655
九州営業所〒802-0001 北九州市小倉北区浅野2-14-1 小倉興産 KM Mビル3 F
TEL: 093 -512 -5014 FAX: 093 -512 -5016
URL http://www.sas.com/japan/