|
|
|
本章では、SASシステムについて説明します。 |
Page Index |
|
|
|
|
SASシステムは、メインフレームからパーソナルコンピュータまで、共通のアプリケーションとデータを使用することができます。
また、MEA(Multi Engine Architecture)により、エクセル、アクセス、オラクルをはじめ、さまざまな形式のファイルを利用することができます。
|
|
|
|
|
標準的な4プロダクト
・Base SAS
・SAS/STAT
・SAS/GRAPH
・SAS Enterprise Guide
その他のプロダクト
・SAS/ACCESS
・SAS/AF : さまざまなGUIアプリケーション. を作成することができる
・SAS/ASSIST
・SAS/CONNECT
・SAS/EIS
・SAS/ETS
・SAS/FSP
・SAS/Genetics
・SAS/IML
・SAS/INSIGHT
・SAS/SHARE
・SAS/IntrNet
|
|
|
|
|
|
|
|
SASシステムを起動したときに表示される「PROGRAM
EDITOR」、「LOGウィンドウ」とプログラムの実行結果を表示するための「OUTPUTウィンドウ」を基本ウィンドウといいます。
|
|
|
|
【PROGRAM EDITOR】
SASのプログラムを入力します。
【LOG ウインドウ】
エラーや処理完了メッセージ等、プログラムの実行過程が表示まれます。
表示されている内容をファイルに保存することができます。
(PRINTTOプロシジャを使用してログやアウトプットの出力先を外部ファイルに切り替えることができます)
/*LOG出力先を外部ファイルに切り替える*/
/*NEWオプションは同名のファイルが存在するとき上書きする*/
PROC PRINTTO LOG="c:\sasout\output.lst"
NEW;
RUN;
PROC LOG DATA=sashelp.class;
RUN;
/* 出力先をOUTPUTウィンドウに戻す */
PROC PRINTTO;
RUN;
【OUTPUT ウインドウ】
プログラムの実行結果が表示されます。表示されている内容をファイルに保存することができます。
(PRINTTOプロシジャを使用してログやアウトプットの出力先を外部ファイルに切り替えることができます)
/* 出力先をc:\sasout\output.lst に変更する
*/
/*NEWオプションは同名のファイルが存在するとき上書きする*/
PROC PRINTTO PRINT="c:\sasout\output.lst"
NEW;
RUN;
PROC PRINT DATA=sashelp.class;
RUN;
/* 出力先をOUTPUTウィンドウに戻す */
PROC PRINTTO;
RUN;
|
|
|
|
|
@ プログラムはステートメントで構成します。
A ステートメントは必ず「セミコロン(;)」で終わります。
B 文字列を除いて小文字、大文字は区別しません。
C 変数名、配列名、データセット名、マクロ名、マクロ変数名は、32文字以内とします。
・先頭の文字は英文字または下線(_)
・2文字目以降は,英文字,数字,下線(_)のどれを用いてもよい
・ブランク( 空白) は使用できない
・文字変数は変数名の後に "$”をつける
D 関数名は、16文字以内とします。
E ライブラリの参照名は、8文字以内とします。
F 「* 」で始まる行、または「/* */」で囲まれた部分はコメントとして扱います。
|
|
|
|
|
@ SASデータセットは、SASシステム独自のファイル形式となっています。
A SASデータセットは、「ディスクリプター部」と、「データフ部」からなります。
B ディスクリプター部は、SASデータセットの属性や作成日付、レコード数などの情報を記録します。
C データ部は、実際のデータを格納します。
DSASプログラムの拡張子は「SAS」です。 |
|
|
|
|
@ SASデータセットのレコード(行)のことを「オブザベーション」といいます。
A SASデータセットのフィールド(列)のことを「変数」といいます。 |
|
|
|
|
SASライブラリはすべてのSASデータセットの保管場所です。
ライブラリの種類
【永久ライブラリ】
・「SYSUSER」といううライブラリ参照名で半永続的に使用されます。
SAS システムはセッション開始時にユーザドキュメント(c:\USERS\DOCUMENTS)の下の
My SAS Files\9.3 フォルダをSASUSER というライブラリ参照名で自動的に割り当てています。
【一時ライブラリ】
・「WORK」といううライブラリ参照名でSAS起動時に毎回新規に作成されます。SAS終了時には削除されます。
【ユーザーライブラリ】
・ユーザー定義ライブラリ : LIBNAMEステートメントを利用して割り当てます。
(例)
LIBNAME mylib '絶対パス'; /*SASプログラム・データを収容するライブラリ*/
LIBNAME funclib '絶対パス'; /* ユーザー定義関数を収容するライブラリ*/
SASデータセット名は、「ライブラリ参照名。SASデータセット名」であらわします。
ただし、WORKライブラリの参照名は省略することができます。
【その他のライブラリ】
MACAUTOS : マクロ自動呼出しライブラリ
【SASプログラムの格納場所】
保存先の標準フォルダ名は、c:\USERS\ユーザ名\DOCUMNETS\MY
SAS Files\9.3です。
SASプログラムの拡張子は「SAS」です。 |
|
|
|
SASプログラムは、大きく分けて3つの要素で構成されます。
それぞれが複数あってもよく、どちらかがなくてもかまいません。
- DATA ステップ
- PROC ステップ
- グローバルステートメント
SAS 言語によるプログラミングは、DATA ステップと呼ばれる実行単位と、
PROC ステップと呼ばれる実行単位を組合せて行います。
DATA ステップはデータ検索加工機能を実行するためのものであり、
PROC ステップは基本統計やレポーティングその他の特定機能を実行するためものです。
【SASプログラムの実行】
SASの各ステップは、次のDATA ステップ、またはPROC ステップが現れたときに初めて実行されます。
ただし、RUNステートメントによってそのステップの終了を示し、直ちに実行に移ります。
SASは、コーディングの上位から、DATA ステップ、またはPROC ステップが現れた順番に実行されます。 |
|
|
|
|
@ DATAステップは、外部ファイルをSASデータセットに変換したり、すでにあるデータセットを加工して、別のSASデータセットを作ります。また、DATAステップは、データをPROCステップに引き渡します。
A 「DATA」で始まり、「RUN」で終了します。
DATA d1;
RUN;
B RUNステートメントは、DATAステップの終了を宣言し、SASステートメントの実行をSASシステムに指示します。
C DATA ステップのループ実行
DATA ステップは入力するオブザベーションが無ければ1
回だけ実行されます。
しかし、外部データからの入力(INPUT ステートメント)やSAS
データセットからの入力(SET ステートメントなど)が
あるときは、読み取るデータ行(SAS データセットの読み取りの場合はオブザベーション)が尽きるまで、
自動的に繰り返し実行されます。
自動変数 _N_ には、DATAステップの処理回数がセットされます。 |
|
|
|
|
@ PROCステップは、SASデータセットを使ってグラフやレポートの作成、統計処理を行います。
A 「PROC」で始まり、「RUN」で終了します。
PROC MEANS DATA = temp;
RUN;
B RUNステートメントは、PROCステップの終了を宣言し、SASステートメントの実行をSASシステムに指示します。
C PROCステップ(プロシジャー)にはそれぞれの基本的な処理がすべて組み込まれているので、プロシジャーを使用するときは、どのSASデータセットのどの変数をしようするかを指定するだけで、簡単に目的の処理を実行することができます。
PROCステップは一般に次のような形をしています。
PROC プロジジャ名 [[DATA=SAS dataset][オプション]];
ステートメント;
[ ステートメント;]
[[ VAR 変数名;] [BY 変数名; ]] |
|
|
|
|
RENAME |
作成済みのSASデータセットの変数名を変更
文法
RENAME =( 古い名-1 =新しい名-1
<... 古い名-n
=新しい名-n>)
PROC DATASETS LIBRARY=ライブラリ参照名
NOLIST;
MODIFY SASデータセット名;
RENAME 元の変数名 = 新しい変数名
..........;
QUIT; |
|
|
|
|
|
@ SASが出力する情報やSASシステムが使用するファイルの取り扱い方法などを指定するステートメントです。
A プログラム内のどの位置にでも指定できます。
B LIBNAMEステートメント、TITLEステートメント、OPTIONSステートメントなどがあります。
【OPTIONSステートメント】
システムオプションを設定します
システムオプションの設定内容は,OPTIONSプロシジャで確認できます
OPTIONS システムオプション指定1 システムオプション指定2
.. ;
【LIBNAMEステートメント】
SAS データセットの読込に用いられるステートメントです。データライブラリにライブラリ名を割り当てます。
SASアプリケーションを起動後1回だけ行えば、SASアプリケーションの終了まで、その指定内容が維持されます。
文法
LIBNAME ライブラリ参照名 '物理パス名';
※物理パス名は絶対パスを指定することが必要であるが、プログラムの始めにx
コマンドを用いて、current directory
を指定することで相対パスの指定のみでデータを読込むことができるようになります。
x’ cd [基準ディレクトリの絶対パス]
’ ;
例
LIBNAME mylib 'C:\mydir'; /*ユーザー定義ライブラリ mylib を割り当てます*/
【FILENAMEステートメント】
外部データの読込に用いられるステートメントです。外部ファイルをファイル参照名として割り当てます。
SASアプリケーションを起動後1回だけ行えば、SASアプリケーションの終了まで、その指定内容が維持されます。
外部ファイルにアクセスする場合、アクセス先を指定する実行ステートメント(INFILE
ステートメント(入力)とFILE ステートメント(出力))において、そのファイルの物理パス名を記述する代わりに、あらかじめFILENAME
ステートメントでそのファイルをアクセスするためのファイル参照名を定義しておき、INFILE
ステートメントやFILE ステートメントでファイル参照名を使用することができます。
文法
FILENAME ファイル参照名 '物理パス名';
※物理パス名は絶対パスを指定することが必要であるが、プログラムの始めにx
コマンドを用いて、current directory
を指定することで相対パスの指定のみでデータを読込むことができるようになります。
x’ cd [基準ディレクトリの絶対パス]
’ ;
例
FILENAME IN 'c:\users\ユーザ名\documents\my
sas files\9.1';
DATA sample;
INFILE IN(sample1.dat);
INPUT ID name $ sex $ age height
weight;
RUN;
PROC PRINT DATA=sample;
RUN;
【TITLEステートメント】
出力(OUTPUTウィンドウ)のページごとにタイトルをつけます。10行まで可能です。
DATAステップやPROCステップの中にも、またそれらの外にでも,どこにでも書けるステートメントです。
TITLEn " メッセージ・・・・ ";
【RUNステートメント】
DATAステップの終わりや,PROCステップの終わりを示します。 |
|
|
|
変数は2種類のデータ型に分けられます。
文字型変数 : 最小1バイト、最大32767バイトを保存可能
数値型変数 : 3〜8バイトで確保する。デフォルトは8バイト。
浮動小数点数として扱うので、有効桁数は16または17桁。
(日付データは数値型のデータとして記録されます)
【変数の生成:暗黙的定義】
新しい変数を作成するには,等号の左辺にその変数をおいて,右辺の式の値を割り当てます
msg= ' メッセージ・・・・'; /*文字数は「最初に代入された文字の長さ」によって決定されます*/
【変数の明示的定義】
DATA ステップにおける変数の名前と型を明示的に定義します。
DATA _NULL_;
LENGTH fname $ 100; /*100文字の文字型変数を明示的に定義 1〜32767バイトまで可能
*/
/*変数名の後ろに$を付けると文字型となる*/
LENGTH counter 4; /*4バイト長の数字型変数を明示的に定義 デフォルトは8バイト
*/
RUN;
【自動変数】
DATAステップやPROCステップでは,その処理の内容によって,自動的に作成され,値を参照したり設定したりできる変数があり,自動変数と呼びます。
_N_ オブザベーション処理回数。
DATAステップにおいて,DATAステップの処理が何回目かを表します。
_ERROR_ DATAステップにおいて,エラーが発生した(1)か否(0)かを保持します。
ERRORステートメントで,ユーザが1に設定することもできます。
_INFILE_ DATAステップにおいて,INPUTステートメントで読み込まれたレコードの
バッファ内容が保持されます。
_FILE_ DATAステップにおいて,PUTステートメントで書き出されたレコードの
バッファ内容が保持されます
_TYPE_ SUMMARYプロシジャ,MEANSプロシジャなどで,出力SASデータセットの中で
カテゴリの組み合わせを保持します。
_FREQ_ SUMMARYプロシジャ,MEANSプロシジャなどで,出力SASデータセットの中で
カテゴリの度数を保持します。
【ラベル】
変数名に説明的なラベルを割り当てます。
LABEL 変数名='ラベル・・・' |
|
|
|
|
複数の変数に対して、同じ処理を行う場合にARRAYステートメントを使用して
配列を定義し、DOステートメントを使用します。
文法
ARRAY 配列名 {要素数} [$] [長さ] [配列要素]
[(初期値)];
(例)
ARRAY x{100} x1-x100;
ARRAYvar {*} TOKYO OSAKA NAGOYA;
DATA _null_;
ARRAY arr {5} $;
DO I=1 to 5 ;
arr{I}= 'abc' ; /*値を代入*/
END ;
RUN;
|
|
|
|
|
数値型と文字型データは、SAS内部では標準SAS値(SASシステムの内部表現)として扱われますが、外部のデータ表現を標準SAS値に変換したり、標準SAS値をレポート等に出力する場合の編集には多様な表現方法で実現できます。
INFORMAT(インフォーマット):外部データ(ファイル、SAS文字型変数)の表現を理解し標準SAS値に変換すること
informatの詳細:SAS文法のサイト
FORMAT(フォーマット):標準SAS値を外部データやレポートの出力形式に変換すること
formatの詳細:SAS文法のサイト
|
|
【INFORMATステートメント】
INPUTステートメントにより、外部データ形式を標準SAS値にインフォーマットできます。
INPUT 変数1 informats 変数2 informats 変数2 informats・・・;
例
INPUT 変数名1 $ /*データを文字型形式で読み込む*/
変数名2 comma10.
/*カンマ付き数字を読み込む。変数xの桁数は10桁*/
変数名3 MMDDYY10.
/*mm/dd/yyyy 形式で読み込みSAS日付値に変換する*/
変数名n YYMMDD10.; /*yyyy-mm-dd 形式で読み込みSAS日付値に変換する*/
INPUT関数により文字型の変数(データ)を数値型のデータにインフォーマットすることができます。
INPUT(変数,informats);
例
prechar1='50';
prechar2='01dec2012';
char1=INPUT(prechar1,best12.); /*best12.は適切な数値に変換するフォーマット*/
char2=input(prechar2,date9.); /*date9.はddmmmyyyy形式から数値日付に変換するフォーマット*/
数値編集形式
comma |
コンマ編集 |
dollar |
ドル記号「$」付き |
yen |
円記号「\」付き |
|
|
【FORMATステートメント】
FORMATステートメントにより、標準SAS値(SASシステムの内部表現)を整形し出力することができます。(汎用ステートメント:複数のプロシージャやデータステップで、同じ名前と形式で使われほぼ同じ機能をもつ)
FORMAT 変数 formats;
PUTステートメントにより標準SAS値を整形することができます。
PUT 変数1 編集形式 変数2 編集形式 変数3 編集形式・・・;
PUT関数により標準SAS値を整形することができます。
PUT(変数,formats);
文字編集形式
数値編集形式
w.d |
標準数値データを書き出す |
commaw.d |
コンマ編集 |
dollarw.d |
ドル記号「$」付き |
yenw.d |
円記号「\」付き |
日付編集形式
MMDDYY10. |
mm/dd/yyyy形式で編集 |
YYMMDD10. |
yyyy-mm-dd形式で編集 |
YYMMDDS10. |
yyyy/mm/dd形式で編集 |
YYMMS10. |
yyyy/mm形式で編集 |
date9. |
ddNOVyyy形式で編集 |
NENGO. |
H.nn/mm/dd形式で編集 |
NLDATE. |
yyyy年mm月dd日形式で編集 |
NLDATM. |
2008年03月28日 12時34分56秒形式で編集 |
weekdate30 |
December 13, 2001 3:32 PM形式で編集 |
TIME. |
12:34:56形式で編集 |
TIMEAMPM. |
12:34:56 PM形式で編集 |
TIME5. |
12:34形式で編集 |
ユーザー定義フォーマットで編集
/* ユーザー定義フォーマットをSASカタログに登録 */
/* オプションにLibrary指定ないので一時ライブラリに作成される */
PROC FORMAT;
VALUE 出力形式名
範囲1='文字値1'
範囲2='文字値2' ・・・
RUN;
/* ユーザー定義フォーマットで印刷 */
/* 出力形式はSASデータセット作成時にあらかじめ組み込んでおくこともできる */
PROC PRINT DATA=・・・・・;
FORMAT 変数名 出力形式名..;
RUN;
参考
/* SASカタログ(データセットに定義された出力形式)を使用せずにデータセットを使用する */
OPTIONS NOFMTERR;
/* SASカタログのサーチ順序を指定 */
OPTIONS FMTSEARCH=(Library1,Library2・・・);
その他の例
PROC PRINT DATA=work.salary;
FORMAT salary dollar10.2; /*少数2桁の&マーク・カンマ付き編集*/
RUN; |
|
|
|
|
数値タイプの欠損値
欠損値はピリオド1 個(.)で与えます。
文字タイプの欠損値
ヌル値""またはブランク1
個"
"で与えます。
欠損地の判定(MISSING関数)
IF MISSING(変数名) = . THEN /* 欠損値のとき */
新たに定義する文字変数の場合はどちらも長さ1
のブランクの値としてSAS
データセットに格納され、既に存在する文字変数の場合は定義された長さのブランク文字列を値としてSAS
データセットに格納されます。
長い方の長さに足りない方の文字列はブランクを埋めてから
比較されますので、長さの異なる文字タイプ欠損値の比較結果は等しくなります。
欠損値は統計量を計算する上での有効な値としてカウントせず、別途取り扱われます。
|
|
|