以下に各節ごと,各項ごとに説明を行う。タイトルの後の[]内にあるアルファベットは,習得の必要性,あるいは難易度を示した。アルファベットが前の方ほど必要あるいは容易であることを示す。一応の目安としてはAとBとでとりあえずデータ処理ができる程度と考えてよい。2つ以上の方法がある処理については容易な方を見出しに示した。
DATA d1; * 省略された場合[DATA; ]は自動的に DATA1, DATA2, ... となる) |
DATA test1; SET sastest; * sastest というデータセットからデータ を読み込む; |
読み込み方法をインフォーマットで指定して読み込む方法。オブザベ−ション中に多数の変数がある場合などに有効。一文字でもずれてはならない。
┌────────────────────────┐ │INPUT (id name sex height weight f1-f4) │ │ (3. +1 $10. +1 1. +1 3. +1 2. +1 4*1.); │ │CARDS; │ │001 MIRAN 2 110 15 1234 │ │002 RYUTO 1 165 66 5678 │ │----+----+----+----+----+----+---- │ │ 5 10 15 20 25 30 │ └────────────────────────┘○CARDS命令で使用する場合でも上記のように第一カラムからデ−タを書かなくてはならない
通常は,欠損値の箇所に .(ピリオド)を入力しておけば,以下の分析で自動的に欠損値として扱ってくれる(フォーマット入力の場合は,当該の箇所を空白にしておくだけでもよい)。
特定のデータ値を欠損値扱いにしたい(たとえば,ある質問で,「どちらともいえない」にした場合,9を与えていたが,これをすべて欠損値として扱いたい)場合には,
IF score=9 THEN score=.; |
DATA d1; MISSING R X; INPUT id questnl; CARDS; 8401 2 8402 R 8403 1 8404 X 8405 2 ; .... |
age = INT(( expdate - birthday) / 365.25);* 実験日と誕生日から年齢を計算; Rohrer = weight / (height*height*height) * 10000000; * ローレル指数; mes = ' メッセージ'; |
NOTE: 変数 ××× は初期設定されていません. |
文字型変数が新たに作成される場合,その文字数は「最初に代入された文字の長さ」によって決定される。その後で 最初の文字数を越える文字数を入力しても超過分は無視されてしまうので注意が必要。 これを避けるにはLENGTHステートメントを使い,あらかじめ使用する文字数を設定する。
LENGTH mes $ 15; |
fsum = f1+f2+f3+f4; [1] |
fsum = SUM(OF f1-f4);[2] |
保存する必要がない変数はDROPステートメントで消し去るか,KEEPステートメントによって残したい変数だけを指定する。どちらか一方しか指定できない。
fsum = f1+f2+f3+f4; DROP f1-f4; * f1,f2,f3,f4 を消去する; |
fsum = f1+f2+f3+f4; KEEP fsum; * fsum だけを残す; |
TITLE1 'これはタイトルです'; *; TITLE3 'これもタイトルです'; * TITLE2 は空白になる; |
TITLE; * これ以後はTITLE1 は使わない; |
変数にラベルをつける。その結果,どのような処理を行っているかわかりやすくなる。ラベルは 40 文字以内,単引用符( ' ) で囲む。この中では漢字の使用可。
LABEL gaku='学年' sex=' 性別' syushin=' 出身地'; |
┌─────────────────────────────┐ │PROC FORMAT; │ │ VALUE gakuf 1=' 1年生' 2=' 2年生' 3=' 3年生'; │ │ VALUE $ sexf 'M'='男' 'F'=' 女'; │ │ VALUE syuf 1='札幌' 2=' 札幌以外の道内' 3=' 道外'; │ │ .... │ │RUN; │ │ │ │DATA ×××× ; │ │ .... │ │ FORMAT gaku gakuf. sex sexf. syushin syuf.; │ │ ↑ ↑ ↑ │ │ ピリオドに注意 │ └─────────────────────────────┘
変数へ付けたラベルを,以下の書式によって消去したり再定義できる。
┌────────────────┐ │ LABEL gaku=' ' ; [1] │ │ ↑ │ │ 空白にする │ │ │ │ LABEL gaku=' グレード' ; [2] │ └────────────────┘
[1] 消去の例 [2] 再定義の例
PROC ××××; ‥‥ FORMAT gaku ;[1] RUN; |
[1] 消去の例.定義のとき必要だった gakuf. を書かない。
※再定義の場合はPROC FORMATを再度書く。
特定のオブザベーションを除いて処理する場合にDELETEステートメントを使用する。
IF sex='m' THEN DELETE; * 男性のデータ を削除; IF sex='m' THEN; ELSE DELETE; * 男性のデータ 以外を削除; IF 3<=_N_<=9 THEN DELETE; * [1] ; |
OUTPUTステートメントを用いて指定された複数のSASデータセットへオブザベーションを格納する(DATAステップで扱われるSASデータセットが1つだけの場合には普通にやればよく,特に必要ない)
DATA a b c; * 3 つの データセット 名(a b c) を指定; INFILE in; INPUT...... index=(weight-best)/weight; IF index >= 10 THEN OUTPUT a; ELSE IF index <= -10 THEN OUTPUT b; ELSE OUTPUT c; ......... |
オブザベーションの削除,格納の機能を用いて条件別の処理(男女別,年齢層別など)を効率良く行うことができる
(例1)sex 変数の1 が男性, 2 が女性とする。
DATA d1; ...... IF sex = 1; ...... |
または
DATA d1; ...... IF sex = 2 THEN DELETE; ...... |
であれば,データセット d1 には男性のデータのみが残る。
(例2)sex 変数の1 が男性, 2 が女性とする。
データセットを男性,女性,その他に分ける場合,以下のようにする。これで3つのデータセットが同時に作成される。
DATA test male female newhalf; ...... IF sex = 1 THEN OUTPUT male; ELSE IF sex = 2 THEN OUTPUT female; ELSE OUTPUT newhalf; |
またたとえば,PROCステップ において,
PROC MEANS DATA=male; ... |
というように指定することによって,必要なデータセットだけに対して分析を行うことができる。