UNIX 上における SAS プログラムの入力,実行,出力 (A)グラフィックを含まない場合 1.入力   SRV に login 後,editor MULE を使って,データ(があれば)とプログラムを   別々のファイルに入力する. (1)データファイル macro.dat の作成(4種類のデータを入力する場合) srv% のプロンプトが出ている状態で,    mule macro.dat  と入力し,Enter キーを押すと編集画面が現れる.以下,データを入力する. 71 1.22 14.62 6.15 72 1.39 15.88 4.44  (データ間は1カラム以上の空白をあける) 73 1.27 21.74 11.75    74 1.37 26.59 24.45 75 1.89 13.94 11.82   76 2.01 12.48 9.32 77 2.02  8.59 7.99   (桁を揃える必要はない)     78 2.24 6.25 3.86 79 2.08 6.31 3.56 80 2.01 6.62 8.04 81 2.21 5.62 4.92 82 2.35 4.13 2.65 83 2.66 3 1.81 84 2.71 3.56 2.25 85 2.62 2.68 2.05 86 2.76 2.34 0.4 87 2.85 2.15 -0.21 88 2.53 4.11 0.53 89 2.27 4.86 2.23 90 2.11 4.79 3.13 91 2.1 3.58 3.29 92 2.15 1.96 1.62 93 2.5 0.79 1.14 94 2.89 2.08 0.51 95 3.15 2.13 -0.27 入力終了後,Ctrl キーを押したままで,x をタイプ,次に c をタイプする. 保存するかどうかの問い合わせがあるので,保存するために y をタイプする. これで,MULE から出て srv% のプロンプトが現れる. (2)プログラムファイル macro.sas の作成 srv% のプロンプトが出ている状態で,    mule macro.sas  と入力し,Enter キーを押すと編集画面が現れる.以下,SAS プログラムを入力する. options ls=65 ps=50; (1ページ当りの出力結果の大きさを制限                  ls=カラム数,ps=行数) filename in1 'macro.dat';   (in1 はファイル定義名で,次の infile ステートメント                  の名前と同一.macro.dat は入力するデータファイル名)  data survey;infile in1;input year unemploy wage price;                 (ステートメントは必ず ; で終わる.同一行に複数の                  ステートメントを入力してもよい.input ステートメントは                  入力する変数名(8 文字以内)を記述)  title 'Regression Analysis of the Phillips Curve'; (出力結果に付けるタイトルを指定) proc reg;model wage=unemploy;  (単回帰分析の実行) proc reg;model wage=unemploy price; (重回帰分析の実行) 入力終了後,Ctrl キーを押したままで,x をタイプ,次に c をタイプする. 保存するかどうかの問い合わせがあるので,保存するために y をタイプする. これで,MULE から出て srv% のプロンプトが現れる. 2.実行 srv% のプロンプトが出ている状態で, sasb macro.sas     と入力し,Enter キーを押せばよい.実行後,2つのファイルが作られる. macro.lst 実行結果のファイル macro.log 実行プロセスのファイル 実行結果を見るには, mule macro.lst とする.見終わったら,Ctrl キーを押したままで,x をタイプ,次に c を タイプすれば,MULE から出て srv% のプロンプトが現れる. プログラムに誤りがあるかどうかをチェックするには,   mule macro.log とする.見終わったら,上と同様にして MULE から出る. 3.出力 macro.lst の内容をプリンターへ出力するには,srv% のプロンプトが出ている状態で, jtops macro.lst | lpr -P XXXXqms (XXXXqmsは各部屋にあるqmsプリンターの名前) と入力する. (B)グラフィックを含む場合 1.入力 (1)データファイルの作成はグラフィックを含まない場合と同じ. (2)プログラムファイルの作成 srv% のプロンプトが出ている状態で,    mule gmacro.sas  と入力し,Enter キーを押すと編集画面が現れる.以下,SAS プログラムを入力する. プログラムの内容は,上で作った macro.sas と非常によく似ているので,これを取りこむ. そのために,Ctrl キーを押したままで x をタイプする.次に,Ctrl キーを離し,i を タイプする.カーソルが画面下に移動して,ファイル名入力の要求が来るので,そのまま macro.sas と入力すると,macro.sas の内容が挿入される(うまく行かなかった場合には,Ctrl キーを 押したままで g をタイプしてから再度行えばよい).この中身を少し修正する. 先頭に filename graph 'graph1.ps';  (graph1 は任意) goptions device=psepsf gsfmode=replace gsfname=graph; を入力する.また,プログラムの最後に symbol i=rlclm95 v=diamond; proc gplot;plot wage*unemploy; を入力する. 2.実行 グラフィックを含まない場合と同様.実行後, gmacro.lst 実行結果のファイル gmacro.log 実行プロセスのファイル graph1.ps グラフィックの結果を含むポストスクリプトファイル が作成される.graph1.ps を見るには,XWindow を開く必要がある. 3.グラフィックファイルの出力 ポストスクリプトファイル graph1.ps を出力するには,srv% のプロンプトの状態で, lpr -P XXXXqms graph1.ps と入力する.( XXXXqms は各部屋にある qms プリンターの名前) −−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−− SAS の文法 ・SAS ステートメント 必ず ; で終わる.同一行に複数のステートメントを入力してもよいし,1 つのステートメントが 複数行にわたってもよい.また,何カラム目から書き始めてもよい. (1)DATA ステートメント(DATA ステップの始まりを表す)  data survey;(名前は、英字かアンダーライン _ で始まり,残りは英数字か _ の 8 文字以内) (2)FILENAME ステートメント(入力データファイルの指定) filename dd名 'データファイル名';(dd名は,infile ステートメントのdd名と同一) (3)INFILE ステートメント(別のファイルからデータを読み込むことを知らせる) infile dd名;(dd名は,filename ステートメントのdd名と同一) (4)INPUT ステートメント data ステートメントのあとに置き,実際に入力するデータに対する変数名を記述 する.文字変数は,直後に $ 記号を付ける.変数名は英字で始まり,残りは 英数字の 8 文字以内.     input sex$ x y z; (5)プログラミング・ステートメント(input ステートメントのあとに) filename abc 'def.dat';    data a;infile abc;input name$ x y; year=_n_+1969;(_n_ はデータ番号を表す) a1=x+y; a2=x-y; a3=x*y;a4=x/y;a5=sqrt(x); b1=sin(x);b2=cos(x);b3=tan(x);b4=arsin(x);b5=arcos(x);b6=atan(x); c1=lag1(y);c2=lag2(y);(lag4(y) は y の4期前の値) c3=dif(y);(dif は1期前との階差=y-lag1(y)) d1=exp(y);d2=log(y); e1=mod(x,3);e2=round(y);e3=floor(y);e4=ceil(y); sum+x;sum2+x*x;(sum,sum2 には,それぞれ x の累積和,累積 2 乗和が入る) if x>=50;(if x < 50 then delete; と同じ) (6)SET ステートメント(データセットの再利用) (7)PROC ステップの中で使われるステートメント       PROC PRINT; TITLE1 'CONSUMPTION FUNCTION';(TITLE1 は TITLE だけでもよい) TITLE2 'JAPANESE GOVERNMENT';(TITLE10 まで可能) (8)特殊なステートメント    DATA A;DO X=-3 TO 3 BY 0.05;Y=SIN(X);OUTPUT;END; DATA B;DO X=0 TO 1 BY 0.02;DO Y=0 TO 1 BY 0.02;OUTPUT;END;END; DATA C;S=0;DO I=1 TO 100;S=S+SQRT(I);OUTPUT;END; DATA D;DO IT=1 TO 500;X=0;DO N=1 TO 50; X=X+RANNOR(0)/SQRT(50);END;OUTPUT;END;    (RANNOR は正規乱数を発生させる SAS 関数 → 次節参照) ・統計学に関連した SAS 関数 (1)乱数 DATA A; DO I=1 TO 100; A=RANNOR(0); 正規乱数 B=RANBIN(0,20,0.5); 二項乱数(20=N, 0.5=P) C=RANUNI(0); 一様乱数 OUTPUT; END; (2)分布関数 DATA B;DO X=-3 TO 3 BY 0.1; P1=PROBNORM(X); 正規分布関数 P2=PROBT(X,5); t 分布関数(自由度 5) OUTPUT;END; DATA C;DO K=0 TO 10; Q1=PROBBNML(0.5,20,K); 二項分布関数 OUTPUT;END; DATA D;DO X=0 TO 10 BY 0.5; R1=PROBCHI(X,10); カイ 2 乗分布関数(自由度 10) R2=PROBF(X,10,5); F 分布関数(自由度 10, 5) OUTPUT;END; (3)分位点関数(分布関数の逆関数) DATA E;DO P=0.01 TO 0.99 BY 0.01; X1=PROBIT(P); 正規分位点関数 X2=TINV(P,5); t 分位点関数(自由度 5) X3=CINV(P,10); カイ 2 乗分位点関数(自由度 10) X4=FINV(P,10,5); F 分位点関数(自由度 10, 5) OUTPUT;END; ・SAS プロシージャ (1)レポーティング    CHART PROC CHART;HBAR 変数名; PROC CHART;VBAR 変数名/MIDPOINTS=0 TO 100 BY 10; PLOT PROC PLOT;PLOT 縦軸名*横軸名[='記号' OR =変数名]; PRINT PROC PRINT; SORT PROC SORT;BY 変数名;(昇順にソートする.降順の場合は BY DESCENDING 変数名;とする) (2)記述統計 CORR FREQ MEANS RANK SCORE STANDARD SUMMARY TABULATE UNIVARIATE (3)グラフィック(あらかじめ,GOPTIONS ステートメントが必要) GPLOT SYMBOL1 I=SPLINE L=1 V=NONE C=RED; SYMBOL2 I=NONE V='*' C=YELLOW; SYMBOL3 I=RL L=2 V='+' C=BLUE; PROC GPLOT;PLOT Y1*X1 Y2*X2 Y3*X3/OVERLAY; G3D PROC G3D;PLOT Y*X=Z/TILT=0 TO 90 by 10 ROTATE=0 TO 90 BY 10; (4)回帰分析 REG PROC REG;MODEL Y=X; PROC REG;MODEL Y=X1 X2 X3; OUTPUT OUT=AA R=RY P=PY; (5)計量経済モデル分析 SYSLIN PROC SYSLIN DATA=KLEIN 2SLS OUTEST=BB; ENDOGENOUS C P W I X WSUM K Y; INSTRUMENTS KLAG PLAG XLAG WP G T YR; CONSUME: MODEL C=P PLAG WSUM; INVEST: MODEL I=P PLAG KLAG; LABOR: MODEL W=X XLAG YR; SIMLIN 上の SYSLIN プロシージャを実行後に使う. PROC SIMLIN DATA=KLEIN EST=BB TYPE='2SLS' TOTAL INTERIM=4; ENDOGENOUS C P W I X WSUM K Y; EXOGENOUS WP G T YR; LAGGED KLAG K 1 PLAG P 1 XLAG X 1; OUTPUT OUT=DD P=CHAT PHAT WHAT IHAT XHAT WSUMHAT KHAT YHAT R=CRES PRES WRES IRES XRES WSUMRES KRES YRES; (6)時系列モデル分析 ARIMA PROC ARIMA DATA=SERIESA;IDENTIFY VAR=X;ESTIMATE P=1 Q=1 METHOD=ML; FORECAST OUT=B1 BACK=65 LEAD=30 ID=N; PROC PLOT DATA=B1(FIRSTOBS=101); PLOT FORECAST*N='F' X*N='*' L95*N='L' U95*N='U'/OVERLAY;