特集

Base SASにおける分析機能の拡張点
Base SASにおける分析機能の拡張点

はじめに
Q&A

SAS9では、データ解析に関する機能も大幅に強化されました。今号の特集では、Base SASに新たに追加された機能についてご紹介します。

新刊マニュアルのお知らせ

1. Base SASにおける統計関連の関数、およびサブルーチンの新機能

最新リリース情報

1.1. 関数
1.1.1. 擬似乱数列生成の関数

SASトレーニングのお知らせ

SAS8.2において評価版の機能として提供されていたRAND関数が、SAS9から正規版の扱いとなりました。RAND関数を使用すると、松本眞、
西村拓士の両氏によって1997年前後に開発されたMersenne Twister（メルセンヌ・ツイスター）と呼ばれるアルゴリズムに基づいて擬似乱数列を生成することができます。このアルゴリズムは、RANUNI関数などでサポートされている乗算合同法による乱数生成法と比較すると、以下の点で優れていると言われています。
● 周期が長い旧来のRANUNI関数などが生成する乱数列の周期は231-1であるのに対して、RAND関数による乱数列は219937-1と極めて長い周期をとることが数学的に証明されています。
● 生成された乱数列の性質が良い生成された乱数列は、623次元超立方体の中に均等に分布する（equidistributed）
ことが知られています。これは、乱数列を組み合わせてベクトル形式で使用したとしても、その乱数列に偏りがほとんど見られないことを意味しています。
● 乱数生成のスピードが速い
環境にも依存しますが、旧来から存在する乱数生成の関数と比べて、生成速度は同程度、もしくは速くなることが期待されます。

このことから、特に大規模なシミュレーションを行なう際には、従来の擬似乱1.1.2. 記述統計・数学・確率分布にまつわる関数

数生成の関数を利用するより好ましい場面があります。現在では、他のソフト

SAS9では、データ分析に関連する関数が多数追加されています。中にはウェアにおいてもこのアルゴリズムが標準で実装されるようになってきました。

MEANSプロシジャやUNIVARIATEプロシジャなど、統計系のプロシジャで計算できないものもあります。

RAND関数を使用する場合は、分布を表すキーワードを第1引数として指定する必要があります。また、分布によってはそれぞれの分布に対応したパ● MEDIAN、PCTL、およびIQR

ラメータ指定が必須となり、それらを第2引数以降で列挙します。一方、
シー

与えた引数から中央値（メディアン）を算出するMEDIAN関数が追加さ

ド値の設定には専用のCALLルーチン CALL STREAMINITを使用します。

れました。以下に使用例を示します。

関数RANDとCALLルーチン CALL STREAMINITの使用例

m_x=MEDIAN(x1,x2,x3);
m_x_all=MEDIAN(of x1-x100);DATA sample;/* シード値を指定する */CALL STREAMINIT(123);
DO I=1 TO 100;/* 100個の擬似乱数を生成する */PCTL関数は、第1引数として指定したパーセントを表す数値と、引数と/* 一様乱数 */して2 番目以 降に列 挙した変 数から、パーセント点を求めます。

x=RAND('UNIFORM');

y=RAND('BINOMIAL',0.5,20); /* 2項分布に従う乱数。N=20,p=0.5 */UNIVARIATEプロシジャ等では、パーセント点の計算方法が5つ存在し/* 平均が5、標準偏差が3の正規乱数 */ますが、関数PCTLでは「L」の直後に計算方法を表す数値1〜5を設

z=RAND('NORMAL',5,3);

定することができます。計算手法の詳細については、Base SASソフト

OUTPUT;

ウェアのプロシジャに関するドキュメント「Base SAS 9.1 Procedures

END;

Guide」の「SAS Elementary Statistics Procedures」の項をご参

RUN;照ください。以下に使用例を示します。
RAND関数で生成できる乱数列は、以下のとおりです。

A=PCTL3(75, of x1-x100);
B=PCTL(33.3, of _numeric_); /* 計算方法は初期設定の5が使用される */分布の名前

RAND関数の第1引数対応する既存の乱数生成の関数

Bernoulli 分布'BERNOULLI'

ベータ分布'BETA'

2項分布'BINOMIAL'RANBIN (*)

Cauchy 分布'CAUCHY'RANCAU

カイ2乗分布'CHISQUARE'

Erlang 分布'ERLANG'

指数分布'EXPONENTIAL'

F分布

'F'

ガンマ分布

'GAMMA'

IQR関数は四分位範囲（75%点から25％点を引いて得られる数値）を算出します。以下に使用例を示します。
D=IQR(of x: );/* 名前がxで始まる変数を全て使用して計算する */RANEXP● 確率分布に関する関数、
とくにQUANTILE、LOGCDFRANGAMQUANTILE関数はCDF関数と逆の操作、すなわち、与えられた確率か
ら分位点を計算します。また、LOGCDF関数はCDF関数が返す確率に

幾何分布'GEOMETRIC'

超幾何分布'HYPERGEOMETRIC'

対して、対数を直接計算するものです。なお、CDF関数など確率分布

対数正規分布'LOGNORMAL'に関係するいくつかの関数で、混合正規分布がサポートされました。

負の2項分布'NEGBINOMIAL'

正規分布'NORMAL'¦'GAUSSIAN'

RANNOR, NORMAL

Poisson分布'POISSON'RANPOI

t分布'T'「テーブル」分布'TABLE'● GEOMEAN、およびHARMEAN
GEOMEAN関数は幾何平均を、HARMEAN関数は調和平均を、それぞれ計算します。MEANSプロシジャやUNIVARIATEプロシジャでは、

RANTBL

現状ではこれらの統計量を計算することができません。使用方法は、前記の統計関数と同様です。

三角分布'TRIANGLE'RANTRI

一様分布'UNIFORM'RANUNI, UNIFORM

Weibull 分布'WEIBULL'● その他の関数
その他にも、数多くの関数が追加されています。

(*) Nとpを指定する順番は、RANBIN関数やSAS8.2におけるRAND関数とは異なります。

・ BETA関数およびLOGBETA関数は、指定した引数に対してそれぞれ

なお、RAND関数の内部仕様がSAS8.2とSAS9の間では変更されている

・ ATAN2関数は、ATAN関数と同様に逆正接（arc tangent）
を計算しため、CALLルーチン CALL STREAMINITで同じシード値を与えた場合でます。ただし、2つの引数を与えることと、-πからπまでの値が戻る点で、も、異なった乱数列が生成されます。

ATAN関数とは異なります。

ベータ関数、およびベータ関数の対数を値として返します。

・COALESCE関数は、指定した引数から最初の非欠損値を返します。
・RMS関数は、引数の2乗の平均を計算し、その正の平方根を返します。
・LARGEST関数は引数の中の最大値を、SMALLEST関数は最小値を返します。
・MAD関数は、いわゆるMAD（中央絶対偏差、median absolutedeviation from the median）
を計算します。

1.2. CALLルーチン● CALL RANPERK、CALL RANPERM、CALL ALLPERM
これらのCALLルーチンは、変数値の並び替えを行ないます。CALL

1.3. ODS GRAPHICSステートメントを使用した
統計プロシジャによるグラフ表示機能
SAS/STATのいくつかのプロシジャでは、SAS/GRAPHの機能を利用して

RANPERKは、引数として与えたn個の変数値からランダムにk個を選高精度なグラフを作成する機能がすでに存在します。たとえば、LIFETEST

んで順列を作成し、変数値を更新します。一方、CALL RANPERMは

プロシジャにおいて、PROC LIFETESTステートメントでPLOTS=オプション

全ての変数値を用いてランダムに順列を作成します。

を利用すると、生存関数のプロットがグラフィカルに表示されます。

次の2つの例は、1から5までの5つの整数から、順列をランダムに10個作

SAS9以降では、評価版の機能として提供されているODS GRAPHICSス

成するものです。シード値は、CALL RANPERKやCALL RANPERMのテートメントを使用して、これまでにない形態のグラフをHTML、PDFおよび第1引数として指定します。なお、第2引数以降は数値変数として与えるRTF形式などのファイルとして出力できるようになりました。正規版の機能必要があり、定数を指定することはできません。

となった際にはSAS/GRAPHのライセンスが必要となる予定ですが、SAS

DATA test;ています。なお、
この機能は次期のメジャーバージョンで正規版としてリリー

9.1.3ではライセンスは不要であり、多くの皆様にお試しいただけるようになっ
ARRAY var{5} (1 2 3 4 5);スされる計画です。

seed =123;
DO n=1 TO 10;/*5つの整数のうち3つを選んで順列を生成する*/
CALL RANPERK(seed,3 , of var1-var5);

ODS GRAPHICSステートメントを使用したグラフの作成は、Base SASや
SAS/STAT、SAS/ETSのプロシジャの一部で利用可能であり、今後より多くのプロシジャでのサポートも予定されています。

OUTPUT;
KEEP var1-var3;
END;

Base SASのプロシジャ
SAS/STATのプロシジャ

RUN;

DATA test2;
ARRAY var{5} (1 2 3 4 5);

CORR
CORRESP、GENMOD、GLM、KDE、LIFETEST、LOGISTIC、MI、MIXED、PHREG、REG など

SAS/ETSのプロシジャ

ARIMA、AUTOREG、MODEL、VARMAX、X12 など

SAS High-Performance
Forecastingのプロシジャ

HPF

seed =123;
DO n=1 TO 10;/*5つの整数全てを使用して順列を生成する*/
CALL RANPERM(seed, of var1-var5);

この機能を利用するには、「ODS GRAPHICS ON;」と「ODS GRAPHICS
OFF;」を、プロシジャの前後に挿入します。多くのプロシジャでは、
この指定だけでグラフが自動的に描画されます。

OUTPUT;
END;
RUN;

また、各プロシジャで出力されるグラフはテンプレートとして保持されていて、その内容に従ってグラフが描画されます。このテンプレートはTEMPLATE
プロシジャを用いて書き換えることが可能であり、より高度にカスタマイズ
したグラフを出力することができます。

CALL ALLPERMを使用すると、与えた引数に対して全ての順列を作成できます。次の例のように、順列の総数だけDO-ENDステートメントでループを作成する必要があります（順列はランダムには作成されません）。

たとえば、GLMプロシジャでは、1元配置分散分析を実行した場合には箱ひげ図が、共分散分析を実行した場合にはモデルに即したプロットが描画されます。

DATA test3;
ARRAY var{5} (1 2 3 4 5);1元配置分散分析の例

DO i=1 TO FACT(5); /*FACT関数で5の階乗を計算する*/
CALL ALLPERM(i, of var1-var5);

ODS HTML;OUTPUT;ODS GRAPHICS ON;

END;
RUN;

PROC GLM DATA=test4;
CLASS group;
MODEL y=group;
RUN;● CALL SOFTMAX, CALL LOGISTIC, およびCALL TANH

QUIT;

これらのCALLルーチンは、それぞれ引数に対してソフトマックス（Softmax）、

ODS GRAPHICS OFF;

ロジスティック変換を施した値、および双曲線正接（hyperbolic tangent）

ODS HTML CLOSE;

を計算します。与えた変数の値は、計算された数値で更新されます。
● CALL STDIZECALL STDIZEは、与えた引数をもとに対してさまざまな「標準化」を行ないます。このCALLルーチンを使用して実行可能な標準化手法は、
SAS/STATのSTDIZEプロシジャでサポートされているものと同等です。

ODS GRAPHICSステートメント による箱ひげ図の出力

REGプロシジャによる出力例

共分散分析の例
ODS HTML;ODS GRAPHICS ON;
PROC REGステートメントにPLOTS（UNPACK）オプションを指定すると、PROC GLM DATA=test5;

これらの8つのグラフが1つずつ出力されます。

CLASS group;
MODEL y=group x;/*変数xは共変量*/

RUN;
QUIT;
ODS GRAPHICS OFF;ODS HTML CLOSE;ODS GRAPHICSステートメント によるANCOVAプロットの例

プロシジャによっては、特定のオプションやステートメントを併用して初めてこの機能を利用できる場合があります。また、オプションの指定でグラフをカスタマイズして出力するプロシジャも存在します。たとえば、SAS/STATのGENMODプロシジャでは、評価版のASSESSステートメントを利用した
時にのみ、グラフが描画されます。またMIプロシジャではMCステートメントと同時にTIMEPLOTオプション等を併用した際にのみ、グラフが描画されます。一方、REGプロシジャを使用すると、デフォルトでは8つのグラフが以下のように1つのパネルで表示されます。

PLOTS（UNPACK）を指定したときのグラフの一部

ODS GRAPHICSステートメントの利用に関する詳細は、各プロシジャの

一方、PLOTS=SCATTERと指定すると、散布図は1つずつ順に作成さ

ヘルプドキュメントで、Details＞ODS Graphics - Experimentalの項をれ、また信頼楕円も描かれます。

ご参照ください。また、この機能の概要は2004年に米国SASユーザー会（SUGI29）で発表された下記の文献に記載されており、さまざまなグラフ

PLOTS=SCATTERによる出力例

出力イメージが紹介されています。
「 Rodriguez , An Introduction to ODS for
Statistical Graphics in SAS 9.1」
http://www2.sas.com/proceedings/sugi29/204-29.pdf

2. Base SASの統計系プロシジャの新機能
2.1. CORRプロシジャ● FISHERオプション
PROC CORRステートメントでFISHERオプションやそのサブオプションを指定すると、いわゆる「Fisherのz変換」をもとにして、母相関係数=ρ（≠0）を帰無仮説とした検定や、信頼区間の算出を行なうことができます。ここで、Fisherのz変換とは、標本相関係数rに対してzr :zr=tanh-1( r )=

( )

1
1+r
log
2
1- r

を計算することであり、この統計量はρを母相関係数、nを標本数とすると、
ρ
1
平均が tanh-1(ρ)+
、分散がの正規分布に漸近的に従う性質
2(n-1)
n-3があります。
母相関係数が0.5であることを帰無仮説とした検定の例
PROC CORR DATA=test6 FISHER(RHO0=0.5);
VAR x y;RUN;

このFisherのz変換をもとに、2母相関係数間の同等性を検証すること

上記の他にも、グラフ出力をカスタマイズするサブオプションが用意さも可能であり、CORRプロシジャのドキュメントにはその具体例が記載れています。

されています。

2.2. FREQプロシジャ● ODS GRAPHICSステートメントを利用したグラフ表示● ZEROSオプション

CORRプロシジャは、ODS GRAPHICSステートメントを利用したグラフ

従来のFREQプロシジャでは、度数が0であるセルは分析から除外され作成にも対応しています。このプロシジャでは、PROC CORRステート

たため、1元表における2項検定や、2×2表におけるMcNemar検定でメントでPLOTSオプションを指定してはじめてグラフが出力されます。

は意図したとおりの結果が得られないことがありました。SAS9では

PLOTS=MATRIXと指定すると、変数の組み合わせごとに散布図が「行WEIGHTステートメントでZEROSオプションを指定すると、度数が0で列形式」で出力されます。

あるセルも分析に含めることができます。

PLOTS=MATRIXの指定による出力例

2.3. UNIVARIATEプロシジャ

1元表におけるカイ2乗検定の例

HISTOGRAMステートメントを利用した際に、有界カーネル密度曲線（boundedkernel density curve）を描くことが可能になりました。これは、変数の取DATA test;

りうる値が明らかに下、または上に有界な場合に有用なことがあります。使DO x=1 TO 4;

用方法は、HISTOGRAMステートメントのKERNELオプションに対する

INPUT freq @@;サブオプションとしてUPPER=、
またはLOWER=をかっこの中で指定します。

CARDS;
4 0 9 8;

また、HISTOGRAMステートメントを使用した場合に、参照線をヒストグラ

RUN;

ムの前に表示するFRONTREFオプションも追加されました。

2.4. MEANSプロシジャ

PROC FREQ DATA=test;

SAS9では、いくつかのプロシジャがマルチスレッドに対応しており、TABLES x / CHISQ;MEANSプロシジャもその一つです。処理のマルチスレッド化はSASシス

WEIGHT freq / ZEROS;

テムオプションのCPUCOUNT=やTHREADSに依存しますが、PROC

RUN;

MEANSステートメントにTHREADS NOTHREADSオプションを指定すると、SASシステムオプションより優先してスレッド処理を行ないます。
/*Kappa統計量の計算例*/

2.5. FCMPプロシジャ

DATA test2;

SAS9.1では、ユーザー定義の関数を作成するFCMPプロシジャが新たに

INPUT x y freq @@;追加されました。最新リリースのSAS9.1.3では、正規版の扱いとなってい

CARDS;
1 1 12

1 2

0

1 3

1

ます。このプロシジャで作成した関数は、
プログラミングステートメントがサポー

2 1

3

2 2 102 3

1

トされている以下のプロシジャなどで使用できます。

3 1

0

3 2

3 3

0

0

;

Base SASSYLKプロシジャ
（評価版）

RUN;

SAS/STATCALIS、GENMOD、NLIN、NLMIXED、PHREGプロシジャ

SAS/ETS

MODELプロシジャ

SAS/OR

NLP、およびGAプロシジャ（評価版）

PROC FREQ DATA=test2;
TABLES x*y / AGREE;WEIGHT freq / ZEROS;RUN;FCMPプロシジャでは、サブルーチンについてはSUBROUTINEステートメ
ントを、関数はFUNCTIONステートメントを利用して作成します。PROCFCMPステートメントでOUTLIB=オプションを指定して関数やサブルーチ
ンの保存先を指定し、これらを呼び出すときにはOPTIONSステートメント● BDTオプション

でCMPLIB=オプションを利用します。

CMHオプションを指定して層別解析を行なった際には、オッズ比の等質性に関するBreslow-Day検定の結果が出力されますが、BDTオプショ

次の例は、NLINプロシジャのドキュメントに記載の例と同じ内容を、ンを併用するとTaroneの調整が行なわれた検定統計量が計算されま

FCMPプロシジャを用いてある分数関数を作成し、その関数をNLINプロ

す（Breslow-Day-Tarone検定）。この検定では、調整を行なわない通

シジャで利用したものです。
a・x
具体的には、y=という形状の関数を作成して、この関数をもとに
b+x
NLINプロシジャで非線形回帰を行なっています。

常のBreslow-Day検定と比べると、より保守的な結果が得られます。
● NOWARNオプション
PROC FREQステートメントにNOPRINTオプションを指定していると、

FCMPプロシジャでの関数作成例とNLINプロシジャ

各セルにおける度数が少ない場合にログに「期待度数が5より小さくなっています。」という警告が現れるときがあります。TABLESステートメント
で指定可能なNOWARNオプションは、
この警告をログに表示しません。
これは、BYステートメントを利用して分析を繰り返し行なうときに有用なオプションです。

PROC FCMP OUTLIB=work.math.fraction;
FUNCTION vel(a,b,x);y=a*x / (b + x);
RETURN(y);ENDSUB;● 共通オッズ比に対する正確な信頼区間

RUN;

EXACTステートメントにCOMORオプションを指定すると、MantelHaenszel流の共通オッズ比の推定値に対して、「正確な分布」に基づ

OPTIONS CMPLIB=work.math;く信頼区間を算出するようになりました。

PROC NLIN DATA=Enzyme METHOD=marquardt;
PARMS theta1=155 theta2=0 to 0.07 by 0.01;
MODELl Velocity = vel(theta1,theta2,Concentration);
RUN;

なお、SAS 9.1.3ではFCMPプロシジャで作成した関数をDATAステップで使用することはできません。また、いくつかのプロシジャでサポートされている自動微分の機能には対応していない面があります（関数の形によっては、
finite difference approximationが使用されたというNOTEがログに現れます）。

3. 最後に今回の特集では、Base SASにおける分析に関する新機能の概要をご紹介しました。より詳細な内容に関しては、SAS9.1.3対応の各種ドキュメント
をご参照ください。なお、米国SAS Institute Inc.のWebサイトでは、
ドキュ
メントが無料で公開されており、SAS9を導入していなくても内容をご確認いただけます。ぜひご参照ください。
http://support.sas.com/documentation/onlinedoc/sas9doc.html

/* ライブラリの割り当て */LIBNAME ex EXCEL 'c:¥data¥book1.xls'

SCANTEXT=NO ;/* APPENDプロシジャ */PROC APPEND BASE=ex.exclass2 DATA=llibref.data FORCE;
RUN;● Excelファイルへのシートの追加とシートへのデータの追加/* ライブラリ参照名のクリア */● Enterprise Minerのマルチ・スレッド対応について● ターゲットの割合が極端に少ない場合にモデルを構築する方法

LIBNAME ex CLEAR;● エディタの自動保存について● プログラム内に記述するパスワードの秘匿化● 重複データをユニークなものとそうでないものに分割する方法

上記のサンプルプログラムを実行すると、「変数の長さが一致しない」と● SQLプロシジャ UPDATE句によるデータセットの条件付き更新

いう下記のWARNINGメッセージがログに出力されますが、データは追加● SASからディレクトリ名を検索し、変数として使用する方法されます。

● 特殊文字を含む変数名を指定する● プロシジャ出力をアウトプットではなくデータセットに出力する

WARNING: 変数 Name は BASE と DATA ファイル上で長さが● Windows XP SP2のサポートについて一致しません。 (BASE 255 DATA 8).

● NLINプロシジャにおける収束ステータス● 標準偏差や平均から一定以上離れた数値、
またはあるパーセント点の
Windows版SAS8.2をご利用の場合は、弊社ホームページの下記FAQを外側にある数値をまとめる

ご参照ください。

● 一般化線形混合モデルの利用について「Microsoft Excelへのデータの複数シート出力について」SASデータセットの内容を、既存のExcelファイルに新しい

http://www.sas.com/japan/service/technical/faq/list/body/pc054.html

シートとして出力できますか。
また、既存のシートにデータを追加できますか。
SAS9.1のSAS/ACCESS Interface to PC Filesは、Excel

SAS9はマルチスレッドに対応しているそうですが、SAS

エンジンをサポートしています。このエンジンを使用して、既Enterprise Minerもマルチスレッドに対応しているのでしょうか。

存のExcelファイルにシートを追加できます。出力方法は、
Excelファイルを新規に出力する場合と同様です。次のサンプルプログラ
ムでは、既存のExcelファイル「c:¥DATA¥book1.xls」ファイルに対して、はい。変数選択、回帰分析モデル、ソート処理において、「excalss2」というシートを追加出力しています。

マルチスレッド対応しています。

/* ライブラリ参照名の割り当て */LIBNAME ex EXCEL 'c:¥DATA¥book1.xls';

SAS Enterprise Miner 4.xで、ターゲット変数の水準の比率が極端に小さいデータを利用してモデルを構築しようとし/* データの出力 */ていますが、
なかなか精度の高いモデルを構築することができません。何か良い方法はないでしょうか（クレジット・スコアリング等を行な

DATA ex.exclass2 ;うケースで、全体に占める破産者の比率が少ない場合などが該当します）。

SET sashelp.class;
RUN;

ターゲット変数の水準で、予測の対象となる水準の比率が/* ライブラリ参照名のクリア */LIBNAME ex CLEAR;

極端に小さい場合には、いろいろな対処策が考えられます。
ここではその一例として、SAS Enterprise Minerのリファレ
ンス等にも記載されているオーバー・サンプリングと事前確率の調整を行なってモデルを構築する方法をご紹介します。この方法は、ターゲットがカ

また、APPENDプロシジャを使用して、既存のExcelシートにデータを追加

テゴリカルなデータの場合のみ利用可能です。

することも可能です。既存のExcelシートにデータを追加する際には、
LIBNAMEステートメントで｢SCANTEXT=NO｣を指定する必要があります。

ステップ1：事前確率の設定
オーバー・サンプリングにより、ターゲット水準の構成比が元のデータと次のサンプルプログラムでは、「c:¥data¥book1.xls」ファイルに含まれる

異なってくるため、各ターゲット水準の確率値を元のデータの確率に適シート「exclass2」にデータを追加しています。

合するように調節する必要があります。そのため、ユーザー定義の事前ベクトルを作成します。具体的には、［入力データソース］ノードのター
ゲット・プロファイラで設定を行ないます。
1.［入力データソース］をダイアグラムに配置する。
2.［入力データソース］ノードをダブルクリックし、設定画面を表示させる。

8

3.［変数］タブにて設定を行なう。

SAS9.1の場合

役割が"Target"に設定されている変数の上でマウスを右クリックし、%UserProfile%¥Application Data¥SAS¥［ターゲットプロファイルの編集］を選択する。

EnhancedEditorフォルダに「自動保存」という名前で4. "（変数名）のターゲットプロファイル"ウィンドウが表示されるので、［事前確率］
タブを選択して元データのターゲットの比率を入力する。

保存されます。

拡張エディタ※「%UserProfile%」は、各Windows OSごとのユーザー
プロファイル フォルダです（Windows2000/XPの標準では「C:¥Documents and Settings¥ユーザー名¥」になります）

5. 定義済みのプロファイルは編集できないため、左側のパン上でマウスを右クリックし、［追加］を選択する。

SAS8.2のプログラムエディタと同様、SASの作業フォルダ

6. 右側のパンに事前確率を入力する。事前確率は0-1の範囲を取り、に保存されます。なお、SAS9.1から追加された合計が1となるように指定する。
プログラムエディタ

AUTOSAVELOC=システムオプションにより、任意のフォルダに「pgm.asv」という名前で自動保存できます。

オリジナルデータセットがターゲット1（0.02）／ターゲット0（0.98）の場合の入力例

システムオプションの指定例：
OPTIONS AUTOSAVELOC= "C:¥temp" ;ターゲット値 事前確率
1

.02

0

.98

RDBMSやSAS Server（SAS Metadata Serverなど）にアクセスするSASプログラムを作成する際、パスワードをそのまま目で確認できる状態（平文：プレーンテキスト形式）で記

7. 上記で設定した事前確率を有効にするには、作成したプロファイル

述しない方法はありますか？

を選択してマウスを右クリックし、［使用する］を選択する。
［使用する］に設定されたプロファイルには、「*（アスタリスク）」が表示される。

SAS9.1から新たに提供されたPWENCODEプロシジャを使

この操作により、後述のモデル化ノードでは、設定した事前確率が調きます。また、OUT=オプションにファイル参照名を指定する

用すると、パスワードをSASだけが解釈できる形式に変換で整されて算出されます。モデル構築時には、後述の［サンプリング］

ことで、変換されたパスワードが保存されたテキストファイルを作成するこ

ノードで行なうオーバーサンプリングされたデータセットが使用されます。

ともできます。

ステップ2：オーバーサンプリング/* パスワードの変換 */1.［入力データソース］ノード続いて、［サンプリング］ノードを接続する。

PROC PWENCODE IN="mypass";

2.［サンプリング］ノードをダブルクリックし、設定画面を表示させる。

RUN;

3.［一般］
タブにて、［サンプリングの方法］で［層別抽出法］
を選択する。
4.［層別］タブに移り、［入力データソース］ノードで役割を"Target"に指定した変数を選択し、状態を"use"に変更する。
5. ［層別］タブの［オプション］サブタブに移動する。ここで、［基準］の上記のサンプルプログラムを実行すると、ログウィンドウに下記のログが出力されます。

中から［等しいオブザベーション］を選択する。
※ 上記設定にて、
ターゲット変数の水準1/0 の比率が1:1のオーバー・
サンプリングの設定が行なわれます。比率を変更したい場合には、［ユーザーの定義］を選択し、任意の比率を指定します。

ステップ3：モデルの構築

1

PROC PWENCODE IN="mypass";

2

RUN;

{sas001}bXlwYXNz

続いて、［データ分割］ノードやモデル化ノードを接続してモデルを構築する。
NOTE: PROCEDURE PWENCODE 処理 (合計処理時間):
処理時間

0.00 秒CPU 時間0.01 秒

SASのエディタの内容が自動保存される場所を教えてください。
以下は、上記サンプルプログラムで変換されたパスワードを使って、ORACLEデータベースに接続する例です。
Windows版 SAS8.2とSAS9.1においては、それぞれ次のような場所に保存されます。
SAS 8.2の場合

拡張エディタプログラムエディタ/** ORACLEデータベースへの接続 **/LIBNAME oralib oracle user=demo password="{sas001}bXlwYXNz";
Windows OSのテンポラリフォルダに「Autosave of
filename.$AS」という名前で自動保存されます。

ログウィンドウでは、パスワードが「XXXX・・・・」と表示されます。

SASの作業フォルダに「pgm.asv」という名前で自動保存されます。

3 LIBNAME oralib oracle user=demo password=XXXXXXXXXXXXXXXXXX;NOTE: ライブラリ参照名 ORALIB を次のように割り当てました。
エンジン : ORACLE
物理名 :

9

重複データの最初のオブザベーション（ユニーク）とそれ以外

UPDATE句の構文

を2つのデータセットに分割したいのですが、どのような処理を行なえばよいでしょうか。

UPDATE 変数名 = CASE
WHEN 条件_1 THEN 値_1

SORTプロシジャでオブザベーションの並べ替えを行なった...

後、FIRST.BY変数をご利用ください。下記のサンプルをごWHEN 条件_n THEN 値_n

参照ください。

ELSE

値_m

END
WHERE 抽出条件 ;DATA DATA1;INPUT char $ num;
CARDS;
プログラム例

A 1
A 2
A 3

DATA sample;

B 1

INPUT a b;

C 1

DATALINES;

C 2

1 0

;

2 0

RUN;

3 0
4 0

PROC SORT DATA=data1 OUT=sdata1;/* 並べ替え */BY char;

5 0
;

RUN;

RUN;

DATA uni8 dup8;

PROC SQL ;SET sdata1;

UPDATE sample

BY char;SET B = CASE

IF FIRST.char THEN OUTPUT uni8;/* FIRST.BY変数を利用 */WHEN a = 1

ELSE OUTPUT dup8;

THEN 1

WHEN a in (2, 3) THEN a * 2

RUN;

ELSE

1

END
WHERE a <= 4 ;SAS9を使用している場合は、SORTプロシジャに追加されたDUPOUT=

QUIT;

オプションを利用することで、SORTプロシジャのみで、同様の処理を行なうことが可能です。
PROC SORT DATA=data1 OUT=uni9
DUPOUT=dup9 NODUPKEY;

SASから特定のディレクトリ内に含まれるディレクトリ名を検/* SAS9のDUPOUTオプションを利用 */

索し、変数に格納することは可能でしょうか。

BY char;RUN;

FILENAMEステートメントのPIPEエンジンを使用することで、OSのコマンドの実行結果を受け渡すことが可能です。下記の例では、Windows環境でDIRコマンドを実行した結果
SQLプロシジャのUPDATE句を利用して、値の更新を行な

を、DATAステップを使用して変数に入力しています。

っています。条件によって代入する値を変更したいのですが、このような場合に簡潔に記述する方法はないでしょうか。やは

FILENAME sample PIPE "dir /a:d /b c:¥";り、UPDATEステートメントを複数行記述するしかないのでしょうか。
DATA _null_;指定される選択条件が比較的単純であれば、次のサンプルプロ

INFILE sample;

グラムのような記述で、代入する値を変更できます。より複雑な

INPUT x $;条件の場合は、数回に分けてUPDATE句を実行してください。

PUT x;
RUN;

ExcelデータをSASデータセットとして取り込む際、Excel/* アウトプット出力の抑制 */シートの1行目の項目名をそのままSAS変数名にしようと考え、

ODS EXCLUDE ALL;SASシステムオプション「VALIDVARNAME=ANY」を指PROC CORRESP DATA=color OBSERVED DIM=1;

定してインポートしました。Excel上の項目名にはスペースやカンマが含まれTABLE eyes,hair;ており、作成されたSAS変数名からスペースやカンマを取り除こうと変数の
RENAMEを試みましたが、エラーが発生してしまいます。スペースやカンマ

ODS OUTPUT OBSERVED=tableout;
RUN;

等の特殊文字を含むSAS変数名からスペースやカンマを取り除くには、どうすればよいでしょうか。

/* アウトプット出力の選択 */ODS SELECT ALL;

評価版機能のVALIDVARNAME=ANYオプションを利用しPROC PRINT DATA=tableout;て、SAS命名規約以外の名称で作成された変数名を取りRUN;扱うには、SAS8からの追加機能であるNリテラル（' 'n）を使用することで回避することが可能です。
このFAQは、米国SAS Institute社のWebサイトに記載されているFAQの特殊文字を含む変数名をシングルクォーテーションで囲み、閉じるほうの日本語訳です。

シングルクォーテーションに続けて（スペースを入れずに）、nを記述します。

http://support.sas.com/faq/038/FAQ03897.html

OPTIONS VALIDVARNAME=ANY ;DATA normalds;
SET excelds(RENAME=('特殊 変数名'n = normvar1));

Windows版SAS8.2、およびSAS9.1.3（Foundation）は、Windows XP SP2をサポートしていますか？

RUN ;Windows XP SP2は、SAS8.2およびSAS9.1.3（Foundation）
において、正式サポートOSとなります。
プロシジャの出力をデータセットに出力して、アウトプットウィ

注：SAS9.1.3のFoundation以外については、弊社テクニカルサポートまでお問い合わせください。

ンドウへの表示をしないようにできますか？
ODSステートメントを使用して、データセットへの出力とアウト

NLINプロシジャを実行した際、推定の過程において収束しプットウィンドウへの表示を別々に制御できます。また、ODSているかの情報を以下のようなプログラムにてデータセットに

EXCLUDE ALLステートメントを使用すれば、アウトプット

出力しています。

ウィンドウへの表示を抑制できます。元に戻すには、ODS SELECT ALL
ステートメントを指定します。

ODS OUTPUT ConvergenceStatus=out1;

プロシジャによっては、アウトプットウィンドウへ の 表 示を抑 制する

PROC NLIN DATA=one;/* ODS機能でデータセットOUT1を作成 */NOPRINTオプションがサポートされていて、これを指定した場合、出力PARMS b0=5 b1=3 b2=2;

データセットは作 成されます。しかし、N O P R I N TオプションはO D S
OUTPUTステートメントと同時には使用できませんのでご注意ください。

MODEL y=b0+b1*exp(b2*x);
RUN;

下 記 の 例では、C O R R E S Pプロシジャの 通 常 の 出 力が抑 制され、
OBSERVEDテーブルがデータセットに出力されます。

この場合、作成されたデータセットに含まれる変数Statusはどのような値になるのでしょうか。

/* サンプルデータ */変数Statusは、NLINプロシジャの推定過程において、収束

DATA COLOR;

しているかの情報を、0、1、もしくは3の値にて表しています。

INPUT region eyes $ hair $ count @@;各値における解釈に関しては、以下の通りです。

DATALINES;
1 bluefair

23

1 bluered

7

1 bluemedium 24

1 bluedark

11

1 green fair19

1 green red

7

1 green medium 18

1 green dark

14

1 brown fair34

1 brown red

5

1 brown medium 41

1 brown dark

40

1 brown black

3

2 bluefair

46

2 bluered

21

medium 44

2 bluedark

40

2 blueblack

6

2 blue2 green fair50

2 green red

31

2 green medium 37

2 green dark

23

2 brown fair56

2 brown red

42

2 brown medium 53

2 brown dark

54

2 brown black

13

;
RUN;

0

収束基準を満たしています

1

収束基準を満たしていますが、ログ画面にNOTEメッセージが表示されています

3

収束基準が満たされていません（この場合、反復過程における最後の数値がパラメータ推定値として表示されます）

たとえば、平均から±2.5s（sは標準偏差）以上離れた数値を、
平均±2.5sの点で置き換えるような処理はできるでしょうか？
また、95パーセント点や5パーセント点の外側にある数値を、

ELSE if y<pctl_5 THEN y2=pctl_5;
ELSE y2=y;RUN;

それぞれのパーセント点で置き換えることは可能でしょうか？
/* 結果の確認 */これらの処理に直接対応したプロシジャはありません。この場合、UNIVARIATEプロシジャなどで標準偏差や平均、
またはパーセント点を計算し、それらの統計量を使用してPROC PRINT DATA=pct_cut;
VAR y y2;RUN;

DATAステップで処理を行なうことが可能です。
/* サンプルデータ */SAS9.1では一般化線形混合モデル（generalized linear

DATA test;

mixed models, GLMMs）
を扱うGLIMMIXプロシジャがあDO i=1 TO 100;

ると聞きましたが、どのように使用するのでしょうか。

y=RANUNI(123)*10;
OUTPUT;

このプロシジャを使用するためには、米国SAS Institute Inc.

END;/* 大きく外れている点を作成 */のWebページからexeファイルをダウンロードしてインストー
ルする必要があります。現在のところ、32bit版Windowsに

DO i=101 TO 102;

対応するSAS9.1（またはそれ以降のリリース）でのみ利用できます。

y=(i-101.5)*100;
OUTPUT;

ダウンロード：http://support.sas.com/rnd/app/da/glimmix.html

END;
RUN;

このWebページでは、ドキュメントも併せて提供されています。なお、
GLIMMIXプロシジャは、SAS9.1.xでは評価版の扱いです。
/* サンプルプログラム1。±2.5sについて。 *//* UNIVARIATEプロシジャで平均と標準偏差を計算する */PROC UNIVARIATE DATA=test NOPRINT;
VAR y;OUTPUT OUT=stat_ds MEAN=mean STD=std;
RUN;/* DATAステップによる処理 */DATA mean_cut;
SET test;
IF _N_=1 THEN SET stat_ds;
IF y>mean+2.5*std THEN y2=mean+2.5*std;
ELSE IF y<mean-2.5*std THEN y2=mean-2.5*std;
ELSE y2=y;
RUN;/* 結果の確認 */PROC PRINT DATA=mean_cut;
VAR y y2;
RUN;/* サンプルプログラム2。パーセント点について *//* UNIVARIATEプロシジャで5パーセント点と95パーセント点を計算する */PROC UNIVARIATE DATA=test NOPRINT;
VAR y;OUTPUT OUT=stat_ds2 PCTLPRE=pctl_ PCTLPTS=5 95;
RUN;/* DATAステップによる処理 */DATA pct_cut;
SET test;
IF _N_=1 THEN SET stat_ds2;
IF y>pctl_95 THEN y2=pctl_95;

新刊マニュアルのお知らせ「SAS Certification Prep Guide: Base Programming」

最新リリース情報■PCプラットフォーム
SAS 9.1.3

9.1 TS1M3

Windows版

SAS 9.1.3

9.1 TS1M3

Windows（64-bit）版

SAS 9.1.3

9.1 TS1M3

注文番号：59332
価

格：22,785円（税込）

本書は、SAS認定プロフェッショナルプログラムの「SAS Base Programming」
受験準備のためのガイドブックとして、SAS認定プロフェッショナルプログラ
ムが承認した書籍です。米国をはじめ、海外各国でも導入されている「SAS■ミニコンピュータプラットフォーム
SAS 6.12

TS020

SASソフトウェアに関する知識をさらに深めることができます。また、今後のキOpenVMS AXP版

SAS 6.12

TS020

ャリアの選択肢が広がり、ユーザーご自身の付加価値向上も期待できます。

OpenVMS VAX版

SAS 6.08

TS407

認定プロフェッショナル」になることにより、技術者としての信頼性が高まり、新規ユーザー／熟練ユーザーを問わず、「SAS Base Programming」のあらゆる問題をカバーしています。主な内容は下記のとおりです。各章には、そ■UNIXプラットフォームの章の内容に関する小テストが解答付きで記載されています。

SAS 9.1.3

9.1 TS1M3

Tru64版

SAS 9.1.3

9.1 TS1M3

・基礎概念

SunOS/Solaris版

SAS 9.1.3

9.1 TS1M3

・レポートの作成

HP-UX版

SAS 9.1.3

9.1 TS1M3・SASデータセットの作成や加工、修正

HP-UX（Itanium）版

SAS 9.1.3

9.1 TS1M3

・さまざまなタイプの外部データの読み込み

AIX版

SAS 9.1.3

9.1 TS1M3

Linux（Intel）版

SAS 9.1.3

9.1 TS1M3

ABI+版

SAS 6.11

TS040

また本書には、SASのスキルを自己テストするために、チュートリアル／サン
プルデータ／サンプルプログラムを収録したCD-ROMが添付されています。

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

TS2M0

IBM版（OS/390, z/OS）

SAS 8.2

TS2M0

上記以外にもSAS9に関するマニュアルを多数ご用意しております。詳しくは、下記のURLよりPDF形式のパンフレットをご参照ください。
http://www.sas.com/japan/manual/
SASマニュアル注文用紙、および最新のPublication Catalog（マニュアル案内パンフレット）は弊社ホームページ（http://www.sas.com/japan/manual/）にて公開していますので、併せてご利用ください。

マニュアル販売係●T

E L 03-3533-3835● F A X 03-3533-3781● E-mail JPNBooksale@sas.com

富士通版（F4, MSP）

SAS 6.09E

TS470

日立版（VOS3）

SAS 6.09E

TS470

CMS版

SAS 6.08

TS410

セッション5：総合的検討とモデルの評価
これまで取り上げた理論や手法を確認し、総合的な検討を行なう。グループで取り組んだデータマイニングの結果を発表し、講師のフィードバックと議論を行なうことで、プロセス全体を設計し評価する。

SASトレーニングのお知らせ● 「医薬向けSASによる経時データ解析」コース
日程：東京会場 2005年3月3日(木）〜3月4日(金）10:00 〜 17:00● SAS・慶應MCC共催「顧客プロファイリングのためのデータマイニング」コース

価格：94,500円(税込)／チケット捺印数 2

慶應義塾の社会人教育機関として知られる「慶應MCC（慶應丸の内シテ

前提知識：「医薬向け分散分析」を受講済みか、同程度の知識のある方ィキャンパス）」とSAS Institute Japan株式会社では、
このたび「顧客プ

学習内容：多くの医学研究においては、研究対象者ごとに時間を追って特別コース開催のご案内

ロファイリングのためのデータマイニング」コースを共同開催します。

大阪会場 2005年3月17日(木）〜3月18日(金）10:00 〜 17:00
受講対象：SASによる統計解析に従事している方反応変数を繰り返し測定することがあり、このような研究は経時観察研究などと呼ばれます。その研究目的の一つは、反応日

価程：全5回、各日13：30〜17：30

変数と時間、治療効果あるいは他の説明変数との関係を定量

セッション1：2005年3月3日(木）／慶應MCCメインキャンパス的に評価することです。同一対象者内の反応変数には相関がセッション2：2005年3月9日(水）／SAS東京本社トレーニングルーム

生じることから、統計的に妥当な推論を行なうためには測定単セッション3：2005年3月11日(金）／SAS東京本社トレーニングルーム位に起因する相関を考慮する必要があります。そのような反応

セッション4：2005年3月16日(水）／SAS東京本社トレーニングルーム

変数間の相関を考慮する方法として、線型混合モデルおよび

セッション5：2005年3月18日(金）／SAS東京本社トレーニングルーム

一般化推定方程式（GEE）による解析方法が近年注目を浴び※チケットの扱いはありませんています。このコースでは、線型混合モデルと一般化推定方程格：157,500円（税込）※チケットの扱いはありません

受講対象：・ 企業・組織が保有する顧客データを、データマイニングによって有効活用したいと考えておられる企業・組織のご担当者の方・ データマイニングに関心のある方、
また導入を検討している
ご担当者

式の理論的背景について講義し、実際の医学データの解析を通してMIXEDプロシジャやGENMODプロシジャの使用法について学びます。
・線型混合モデルおよび一般化推定方程式（GEE）に関する
基本概念の説明

前提知識：特に必要ありません

・MIXEDプロシジャやGENMODプロシジャの使用法

学習内容：価値観が多様化する中で、各顧客に対し最適なサービス・商品

・医学分野における実データの解析を提供することで、満足度を高め、関係性を構築・維持する
CRM（Customer Relationship Management）が注目され

なお、2日目の最後にQ&Aの時間枠を設けます。

ています。それを実現する手法として、データを整理・分類し、優良顧客を判別・予測するデータマイニングへの期待がますま

SAS Institute Japan株式会社では、今後も多岐にわたったトレーニング

す高まってきています。本プログラムでは、データマイニングのコースを追加していく予定です。コース内容・日程等の詳細は、順次弊社

有効性や適応領域、プロセス、手法、
ソフトウェアの使い方まWebサイトに公開しますので、以下のURLをご参照ください。

でを総合的に学びます。単に理論や手法を理解するだけでは

http://www.sas.com/japan/training/

なく、具体的なデータを用いた演習と実践を意識したグループ
ワークをとおして、データマイニングのプロセス全体を体験し、実務に適応する力を養います。
詳

細：セッション1：導入レクチャー
データマイニングの考え方や構造を確認し、顧客プロファイ
リングの視点からデータマイニングの有効性・可能性を考察する。
セッション2：セグメンテーション ― 顧客を分類する
・k-means法、
自己組織化マップ（SOM）
データマイニングの最初のプロセスとなる、顧客データの分類（セグメンテーション）の考え方と手法を理解し、実際に操作演習をおこなう。
セッション3：判別 ― 優良顧客判別の図式をつくる
・decision tree（決定木）分類した顧客データから、優良顧客を判別するための具体的手法とプロセスを理解する。
セッション4：予測 ― 顧客タイプの予測・ニューラルネットワーク
分類・判別した顧客データから、目的に応じて顧客を予測するための手法とプロセスを理解する。セッションの後半では、設定された課題についてグループワークとして取り組む。

2005年新トレーニングセットプランのご案内● セットプランのお申し込み方法

セットプランとは、複数のコースをセットでお申し込みいただくと割安になる

各プランの専用申込用紙に、必要事項・受講希望コース・受講日程をご記

お得な制度です。2005年のトレーニングコース刷新に伴い、セットプランも入の上、ファクシミリでお送りください。専用申込用紙は、弊社Webサイト

新しく生まれ変わりました。より受講しやすくフレキシブルなプランもご用意からダウンロードできます。

しています。

・請求書は、1コース受講終了後に発行します。
・日程・コースの変更は可能ですが、キャンセルはできませんので● Basic Plan（合計3コース）

ご了承ください。
・受講有効期間は、最初に受講したコースの初日から3ヶ月間です。

●「SASプログラミング I」
内容●「SASプログラミング II」●「SASマクロ言語入門」

価格

3コース合計価格（税込価格 283,500円）→ 232,470円（税込）

新人研修キャンペーンのご案内
上記トレーニングゼットプランのうち、「Basic Plan」を2名以上でまとめてお申し込みいただくと、さらに受講料が割安になる期間限定キャンペーンです。
●「SASプログラミング I」● FreeChoice-1 Plan（合計3コース）
内容●「SASマクロ言語入門」「データへのアクセスと加工」カテゴリのコース（下記一覧）
から
お好きな3コース選択●「SASプログラミング II」

価格

通常セットプラン価格（税込価格 232,470円）→ 224,438円（税込）● SAS Enterprise Guide操作入門● SAS9 概要● SASプログラミングI● SASプログラミングII● SASプログラミングIII
内容● SASによるSQL入門

・2005年4月〜9月の期間で全3コースをご受講ください
・2名以上で一括お申し込みをいただいた場合に適用されます
・他の割引との併用はご遠慮ください● SAS/ACCESSを使用したデータベースと表形式データの処理方法入門● SASマクロ言語入門

その他、
トレーニングに関する情報については、前ページのURLをご参照● SASマクロ言語上級

いただくか、下記トレーニング担当までお問い合わせください。

● SASによる多重処理● SASプログラムの最適化● 臨床データマネジメント● 集計解析表作成● SASプログラミング速習
価格

3コース合計価格（税抜）から15％割引● FreeChoice-2 Plan（合計2コース）「データプレゼンテーション・レポーティング」カテゴリのコース（下記一覧）
からお好きな2コース選択● SASプログラムによるレポート出力
内容● SASによるグラフ出力● ODSによるレポート作成1● ODSによるレポート作成2● ODSによるXML出力

価格

2コース合計価格（税抜）から15％割引● FreeChoice-3 Plan（合計3コース）「統計解析」カテゴリのコース（下記一覧）
からお好きな3コース選択● 統計概論● SASによるデータ解析入門● 医薬向けSASによるデータ解析入門● SASによる回帰分析● 回帰分析上級
内容● 多変量解析● ロジスティック回帰分析● 医薬向けSASによる生存時間解析● 医薬向け分散分析● 医薬向けカテゴリカルデータ解析1● 医薬向けカテゴリカルデータ解析2

価格

3コース合計価格（税抜）から15％割引

トレーニング担当●T

E L 03-3533-3835
A X 03-3533-3781● E-mail JPNTraining@sas.com●F発行
テクニカルニュースに関するお問い合わせ先
テクニカルサポートグループ

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