sas程序注释
例1:
Option pagesize=150; …………………页面大小
data xiao; ……………………………………..建立名称为xiao的数据集
infile "f:\1.2.txt" firstobs=2 dlm=’09’X; ………从文件第2行读取,以TAB 为标志(TAB16位制为09) input year yymmdd10. prodcut@@; ……………介入数据,并规定格式①
year=intnx('year','1jan1964'd,_n_-1); ……………以观测值减1年份增加,观测值从1开始 format year yymmdd10.; ……………输出格式 proc print data=xiao; ……………输出数据集xiao run;
data kk; ……………建立数据集KK
set xiao; ……………采用xiao数据集的数据
lagprodcut=prodcut-lag(prodcut); ……………增加lagprodcut差分变量(lagprodcut=prodcut-lag(prodcut)可以写成
lagprodcut=dif(prodcut))
run; ……………运行上面程序
proc print data=kk; ……………在界面输出kk数据集 run; ……………运行以上程序
data bufen; ……………建立名称为bufen的数据集 set kk; ……………采用kk数据集的数据
keep year lagprodcut; ……………保留year和lagprodcut两列数据 where year>='01jan1970'd; ……………数据只取条件是大于01jan1970的值 proc print data=bufen; ……………在output窗口输出数据集bufen run; ……………运行上面程序
proc gplot data=kk; ……………以数据集kk里面数据作图
plot prodcut*year=1 lagprodcut*year=2/overlay; ……………图形以prodcut、lagprodcut为纵坐标、year为横坐标,在同一坐标
作图,(/overlay)并图像样式设定条件(=1,=2)
symbol1 c=red v=dot i=spline; ……………图像条件1选项(c=颜色v=数据形状i=连线线条形状) symbol2 c=black v=diamond i=join; ……………图像条件2选项 run; …………运行以上程序
proc arima data=kk; …………以数据集kk作arima过程②
identify var=prodcut nlag=24; …………arima过程分析的变量名称是prodcut,延迟24期 run; …………运行以上程序
proc arima data=kk; …………以数据集kk作arima过程
identify var=lagprodcut nlag=24 minic p=(0:5) q=(0:5); ………arima过程分析的变量名称是prodcut,延迟24期,并自动定阶 run;………运行以上程序
estimate p=1 q=1; ………estimate过程,AR一阶(偏自相关图) MA一阶(自相关图)
forecast lead=5 id=year out=results; ………预测过程,预测期数5期,以year为标识,输出数据集名称为results proc gplot data=results; ………以数据集results作图
plot lagprodcut*year=1 forecast*year=2 l95*year=3 u95*year=3/overlay href=1980; ………以lagprodcut、forecast、l95(下限)、
u95(上限)作为纵坐标,year为横坐标作图,并在同一坐标系(/overlay),以1980竖着划一根线(href=1980)
symbol1 c=black i=none v=none; ………图像条件1选项 symbol2 c=red i=jion v=none; ………图像条件2选项
symbol3 c=green i=none v=dot l=2;………图像条件3选项,长度(length)为2 run; ……………运行以上程序
注:①intnx('year','1jan1964'd,_n_-1):第一个参数是变化的方式(year month day)第二个参数是日期参数,第三个参
数是变化步长
②arima过程包含信息有
………arima过程 ………identify var=过程 ………描述统计量 ………自相关图 ………逆自相关图 ………偏自相关图
………自相关白噪声检验p小于α说明是白噪声
………最小信息量准则minic过程
……estimate过程
………优化总结
………参数估计的相关性(未知参数估计结果),p值越小于α有效AR+MA-
………拟合统计量的值依次为方差估计值标准差估计值 AIC信息量 SBC信息量残差个数
………各参数估计值的相关矩阵
…残差自相关白噪声检验(模型检验,LB统计量p值大于α,越大模型拟合越好………自变量模型信息
………AR过程结果及模型方程 ………MA过程结果及模型方程
………forecast lead=过程
………变量预测值
………作图过程
日期输出过程:monyy.→jan05 monyy7.→jan2005 date.→01jan05 year4.→2005 yymmdd10.→01jan2005
例2:
data k; input x@@;
time=_n_; …………时间变量 cards; …………输入数据 63.2 49.9 49.5 ;
proc gplot data=k; plot x*time=1;
symbol1 c=red i=join v=star;
67.9 55.8 49.5 50.2 55.4 45.3 48.1 61.7 55.2 53.1 59.9 30.6 30.4 33.8 42.1
proc arima data=k;…………arima检验过程 identify var=x nlag=20 minic p=(0:5) q=(0:5); run;
estimate p=1 q=3;
forecast lead=5 id=time out=results; proc gplot data=results;
plot x*time=1 forecast*time=2 l95*time=3 u95*time=3/overlay; symbol1 c=black i=none v=star; symbol2 c=red i=join v=none; symbol3 c=grenn i=none v=dot l=2; run;
例3:AR二阶xt=xt-1-0.5xt-2+et
data liao;
x1=0.5; …………随机赋值给x1 x2=0.6; …………随机赋值给x2 do i=0 to 100; …………循环i从1到100 y=rannor(0); …………y是标准白噪声 x3=x1-0.5*x2+y; …………x的方程 x2=x3; x1=x2;
output; …………输出
end; …………do结束一次,继续循环,直到循环终止 proc print data=liao; run;
proc gplot data=liao; plot x3*i;
symbol i=line c=red v=star; run;
线性回归:P107
data kk; input x@@;
time=_n_;(若二次型下面增加语句time1=time*time) cards;
8444 9215 8879 8115 9457 8590 8997 9574 9051 9724 9120 10143 9746 10074 9578 10817 10116 10799 9901 11266 10686 10961 10121 11333 10677 11325 10698 ; run;
data mm;……..新建一个mm数据集,为了存放预测值(在列后面增加数据方法) do i=1 to 5; time=27+i; output; end; run;
data mm(drop=i);……..在列后面增加数据 set kk mm ;……..合并两个数据集(注意顺序) run;
proc gplot mm;……..作图 plot x*time;
symbol c=red v=dot i=line; run;
proc reg data=mm;……..回归过程拟合
model x=time/p cli;……..模型参数,x为自变量,time为因变量,输出预测值,95%上下界(若二次型变为x=time time1) output out=ree p=pre;……..物理数据集输出 plot x*time;……..回归过程拟合直接作图 quit;……..回归过程退出
指数平滑:
P111
data mm;……..建立数据集,录入数据 input y@@; year=2000-1+_n_; cards;
8.2 8.3 8.3 8.2 7.8 7.4 7.3 7.3 7.7 ; run; proc print; run;
proc forecast data=mm trend=1 weight=0.5 interval=year lead=5
out=res outfull outest=rest;……..预测过程步,趋势一阶回归,平滑系数0.5,预测值5期,间隔为年(非必须),outfull:
将原序列的观测值、拟合值、预测值、95%存入res结果文件,如果缺省outfull系统只
有预测值存入结果;outest将预测过程中的参数估计和拟合优度存入rest文件(如果是Holt两指数平滑,则methord=winters weight=(0.15 0.1)参数分别是α、γ)
id year;…….时间标识(因变量) var y;…….变量 run;
proc gplot data=res;
plot y*year=_type_;…….对res所有数据进行作图 run;
综合分析:P115
data hh (drop=i y); ……..建立数据集hh,去除i、y列数据(如果想要删除列用类似i的方法,删除中间列要加循环) infile "e:\data\1.14.txt" firstobs=2; ……..从文件读取数据,从第二行开始 do month=1 to 12; ……..外循环控制月份,即纵向列 input i@@; ……..读取一个文件里的数
do y=1993 to 2000;……..内循环控制年份,即横向行(内循环的速度大于外循环) input x@@; ……..读取一个文件的数
year=mdy(month,1,y); ……..循环输出格式,即按月份+1输出 output; ……..输出数据 end;……..结束内循环 end;……..结束外循环
format year monyy.; ……..年份输出格式 run; ……..运行以上程序
data temp; ……..建立数据集temp do month= 1 to 12; ……..建立一个月份数据
year=mdy(month,1,2001); ……..输出格式2001,month+1 output; ……..输出数据 end; ……..结束循环
format year monyy.; ……..年份输出格式 run; ……..运行以上程序 data hh; ……..建立数据集hh
set hh temp; ……..把hh 、temp按顺序合并放入hh(覆盖)(后插入的,为预测值建立的时间轴) run; ……..运行以上程序
proc print; ……..在程序框输出数据 run; ……..运行以上程序
proc sort data=hh; ……..对数据集进行排序操作 by year; ……..排序标识是年份 run; ……..运行以上程序
proc gplot; ……..作图,对最近的数据集作图不需要data
plot x*year; ……..以x为纵坐标、year为横坐标作图(时序图p116) symbolc=black i=line v=star; ……..图形选项 run; ……..运行以上程序
proc sql;……..SQL过程步(提取季节因素season)
create table mm as select month,avg(x) /(select avg(x) ……..创建一个mm的表,表的内容由select执行,第一列为month
文件数据
from hh) as season第二列数据为公式算出,命名为season(注:在用公式时,必须是单列数据对单列数据) from hh 对数据进行select操作的表是hh,所有数据在同一个表中进行
group by month;因为要对每个月份分别进行均值计算,所以必须对月份进行分组(季节指数=各年同月均值/总均值) run; ……..运行以上程序 proc sql; ……..运行SQL过程步
create table dd as select year, hh.month ,x,season……..创建dd数据库,内容由select执行,第一列为hh的month列 fromhh,mm第二列为x,第三列为season (注:hh表中有month、x数据,mm表中有month、season数据) where hh.month=mm.month;因为数据来自不同的表,所以必须用主键把两个表连接起来 run; ……..运行以上过程步
data dd; ……..建立一个数据集,取名dd
set dd; ……..在原有dd表里面增加数据(相当于覆盖dd) ti=x/season;……..增加的列为ti(趋势、随机) run;……..运行以上程序
proc gplot data=dd; ……..对dd数据集进行作图操作
plotseason*month ti*year;……..以ti为纵坐标、year为横坐标(季节指数图p117,消除季节后的散点图p118) (对season*month如果作图有错,在run后面增加plot season*month;where year
v=circle;run;原因请参照dd数据集)
symbol c=black i=none v=circle; ……..作图选项 run; ……..运行作图程序
proc reg data=dd; ……..对数据集进行reg过程(回归模型建立、优化、参数估计) model ti=year /all; ……..model以ti为自变量,时间因变量,并且输出所有回归数据 plot ti*year;……..对ti和year进行作图(线性趋势拟合图p118)
output out=rep=pre r=res;……..输出数据集,out取名为re、预测数据集取名为pre、结果数据集取名为res quit;……..回归过程的退出
proc gplot data=res;……..对res数据集里面的res(residual残差)进行进行作图 plot res*year;……..对res里的数据进行时间变量的作图(残差图p118) symbol c=black i=none v=circle;……..图形选项 run;……..运行以上过程步 data res;……..建立res数据集
set res;……..在res基础上进行修改(数据集名相同,相当于覆盖原有数据集) estimate=season*pre;……..增加一列,列名为estimate,放在res里 run;……..运行以上程序
proc gplot data=res;……..对res进行作图
plot x*year=1 estimate*year=2/overlay href=2001;……..以x、year、estimate进行同一坐标轴作图(拟合效果图p119) symbol1 c=black i=none v=circle;……..作图选项1 dd数据集 symbol2 c=black i=line v=none;……..作图选项2 run;……..运行程序
X-11过程p121:
data hh (drop=i y);
infile "e:\1.14.txt" firstobs=2; do month=1 to 12; input i@@; do y=1993 to 2000;
input x@@;
year=mdy(month,1,y); output; end; end;
format year monyy.; run;
proc sort data=hh; by year;
run; ……..数据步,数据录入 proc gplot; plot x*year;
symbol c=black i=line v=star; run; ……..作图,时序图
proc x11 data=hh; ……..X11过程步
monthly date=year; ……..以年作为时间标识,趋势变化为月(季度quarterly) var x; ……..变量名称
output out=res b1=x d10=season d11=adj d12=trend d13=irr; ……..物理数据集输出(B1原始数据x,D10最终季节因素,D11
调节的季节因素,B1/D10,D12长期趋势,趋势拟,合D13随机波动,D11-D12)
proc gplot data=res; ……..作图过程步
plot (x season adj trend irr)*year; ……..联合作图 symbol c=black i=line v=star; ……..作图选项 run;
非平稳,差分p139(若线性一阶差分,曲线二阶三阶差分,趋势周期,差分取出趋势,在进行年为基准周期步的差
分,如月12步差分,季节4步差分)
data hh; ……...建立名称为hh的数据集 infile "f:\1.2.txt" firstobs=2;
input year x@@; ……...介入数据,并规定格式
y1=dif(x);……....一阶y1=dif(x),二阶y2=dif(dif(x)),12步差分y12=dif12(dif(x)) year=intnx('year','1jan1964'd,_n_-1); ……...测值减1年份增加,观测值从1开始 format year yymmdd10.; run;
proc gplot data=hh; ……....作图过程步
plot (x y1 )*year ;……...时间序列图,差分后的时序图 symbol c=black i=line v=star; …….....作图选项 run;
ARIMA模型建立:p144
optionpagesize=150; data hh;
infile “e:\data.1.17.txt” firstobs=2;
input year x@@;
diifx=dif(x);…….....一阶差分(一阶y1=dif(x),二阶y2=dif(dif(x)), 12步差分y12=dif12(dif(x))) run; proc gplot; plot (x difx)*year; symbol i=line;
run;…….....联合作图,时序图 proc arima data=hh;
identify var=x(1) nlag=24;……....白噪声检验(一阶差分:x(1) 二阶:x(1,1)阶:x(1,1,1)一阶四步:x(1,4) 二阶12步x(1,1,12))) estimate q=1;…….....观测自相关图和偏自相关图,参数检验,模型检验(残差检验),最小信息量准则 forecast lead=5 id=year out=resu;……....预测过程步 quit;…...退出
proc gplot data=resu; ………以数据集results作图
plot x*year=1 forecast*year=2 l95*year=3 u95*year=3/overlay href=1980; ………以lagprodcut、forecast、l95(下限)、u95
(上限)作为纵坐标,year为横坐标作图,并在同一坐标系(/overlay),以1980竖着划一根线(href=1980)
symbol1 c=black i=none v=none; ………图像条件1选项 symbol2 c=red i=jion v=none; ………图像条件2选项
symbol3 c=green i=none v=dot l=2; ………图像条件3选项,长度(length)为2 run; ……………运行以上程序
蔬系数模型:p150
option pagesize=150; datahh;
infile “e:\data\1.18.txt” firstobs=2; input year x@@;
difx=dif(x);…….....一阶差分,一次一次差分,直到平稳,避免出现过差分 run; proc gplot;
plot (x difx)*year;Xtsymbol i=line; run;
proc arima data=hh;
identify var=x(1) nlag=24;……....白噪声检验(一阶差分:x(1) 二阶:x(1,1)阶:x(1,1,1)一阶四步:x(1,4) 二阶12步x(1,1,12))) estimate p=(1,4) noint;……...定阶可以一次一次尝试,根据参数检验、模型检验和最小信息量准则定阶,此例中参数检验
参数项、φ2、φ3不显著(p﹥α)
run;
1
10.26633B0.35597B
4
t,t~N(0,123.86)
简单季节模型:p152
option pagesize=150; ……...页面大小 data hh;
infile “e:\data\1.19.txt”; inputr x@@;
year=intnx(‘quarter','1jan1960'd,_n_-1); ……...输入时间,以季度递增 foemat year yyq6. ……...时间输出格式 1960q1
difx=dif4(dif(x)); ……...一阶四步差分,季节数据为4步,月度数据为12步(差分提取趋势,步数提周期) run; proc gplot; plot (x difx)*year; symbol i=line; run; proc arima;
identify var=x(1,4) nlag=24; ……...白噪声检验,变量1阶4步
estimate p=(1,4); ……...参数估计模型估计模型定阶AR1阶,蔬系数模型 run;
乘积季节模型:p156
option pagesize=150; data hh;
infile "e:\1.20.txt"; input x@@;
dif=dif12(dif(x));…….一阶12步差分 time=intnx("month","01jan1948"d,_n_-1) format time monyy7. run;
proc gplot data=hh; plot (x dif)*time;
run;
run;·
id time; var x; run;
自相关图
偏
自相关
run;
残差自回归模型:p161(续p144)
option pagesize=150; data hh;
infile "e:\1.17.txt" firstobs=2; input year x@@; k=_n_; lagx=lag(x); run; proc gplot; plot x*year; symbol i=line v=dot; run;
proc autoreg data=hh; model x=k;
output out=a p=p1 r=r1; model x=lagx /noint; output out=b p=p2 r=r2; proc arima data=a; identify var=r1; run;
proc arima data=b; identify var=r2; run; data kk; merge a b; by year; run;
proc gplot data=kk;
plot x*year=1 p1*year=2 p2*year=2/overlay; symbol1 c=black v=star i=none; symbol2 c=red v=none i=line; run;
t66.4194.515t,t1,2,3......X1.365x
t1,t1,2,3.....
序列拟合模型
残差拟合模型
残差自相关检验:p163
option pagesize=150;
data hh;
infile "e:\1.17.txt" firstobs=2;
input year x@@;
k=_n_;
run;
proc gplot;
plot x*year;
symbol i=line;
run;
data kk(drop=i); ………..建立kk数据集,为了产生k的序列,便于预测
do i=1 to 5;
k=37+i;
output;
end;
run;
data hh;
set hh kk;
run;
proc autoreg data=hh; model x=k /dwprob; ………..回归模型,产生 DW检验的p值,越小越有效①
model x=K /nlag=5 backstep; ………..残差自回归模型,阶数定为5,逐步回归(如果第5阶有效,尝试大范围)②
output out=res p=p r=r pm=pm rm=rm;………..输出数据集(pm rm为确定模型的预测值和残差 p r 为整个模型的预测
值和残差,精度较好)
run;
proc gplot data=res;………..作图
plot x*year=1 p*year=2 pm*year=3/overlay;
symbol1 c=red i=line v=star;
symbol2 c=black i=jion v=none;
symbol3 c=blue i=none v=dot;
run;
方差齐性变换:p171
data hh;
infile "d:\1.21.txt";
year=intnx("month","01apr1963"d,_n_-1);
input y@@;
x=log(y); ……对原序列进行对数变换
difx=dif(x); ……进行一阶差分
difx1=dif(x)*dif(x); ……残差平方
run;
proc gplot;
plot (difx difx1 y x)*year;
symbol i=line;
run;
proc arima data=hh;
identify var=difx;
run;
条件异方差模型(ARCH模型):p174
data hh;
infile "d:\1.22.txt" firstobs=2;
input y$ x@@; ……y值是字符串
t=_n_;
t1=intnx("month","01jan1926"d,_n_-1);
format t1 monyy.;
run;
proc gplot ;
plot x*t1;
symbol c=black i=join v=none;
run;
proc gplot ;
where t1>"01jan1926"d and t1
plot x*t1;
symbol c=black i=join v=none;
run;
proc autoreg ;
model x= / archtest; ……对残差进行异方差检验,对残差自身进行模型拟合,不需要时间
model x= /garch=(q=3) noint; ……ARCH3阶,从高阶往低阶试,全部显著可以通过(p值全部小于α)
output out=res cev=v ucl=ucl lcl=lcl r=r ; ……条件方差(cev=)、序列置信区间(ucl=、lcl=)、残差(r=) run;
data res;
set res;
ucl1=1.96*sqrt(0.00345); ……残差序列方差齐性下的置信区间 lcl2=-1.96*sqrt(0.00345);
yucl=1.96*sqrt(v); ……残差序列条件方差下的置信区间 ylcl=-1.96*sqrt(v);
run;
proc gplot data=res; ; ……作图
plot x*t=1 ucl1*t=2 lcl2*t=2 yucl*t=3 ylcl*t=3 /overlay; symbol1 c=black i=join v=none;
symbol2 c=blue i=join v=none w=2 l=2;
symbol3 c=red i=join v=none;
run;
E(2t|t1,t
data hh; 22)0.014370.0796t10.2722t3 2....
infile "e:/1.23.txt" firstobs=2;
input y$ x@@;
lagx=lag(x);
t=intnx("day","01jan1980"d,_n_-1);
format t monyy.;
proc gplot;
plot x *t;
symbol i=join;
run;
proc autoreg data=hh;
model x=lagx /lagdep=lagx archtest;
model x=lagx /nlag=5 backstep garch=(p=1,q=1) noint;
output out=out pm=pm p=p rm=rm r=r lcl=lcl ucl=ucl cev=cev; run;
data out;
set out;
uclr=1.96*sqrt(0.002007);
lclr=-1.96*sqrt(0.002007);
cuclr=1.96*sqrt(cev);
clclr=-1.96*sqrt(cev);
cuclp=p+1.96*sqrt(cev);
clclp=p-1.96*sqrt(cev);
run;
proc gplot data=out;
plot x*t=1 p*t=2 cuclp*t=3 clclp*t=3 lcl*t=4 ucl*t=4/overlay; symbol1 c=black i=none v=star;
symbol2 c=red i=line v=none;
symbol3 c=blue i=lnie;
symbol4 c=green i=join v=star;
run;
proc gplot data=out;
plot r*t=1 uclr*t=2 lclr*t=2 clclr*t=3 cuclr*t=3 /overlay; symbol1 c=black i=none v=star;
symbol2 c=red i=line v=none;
symbol3 c=blue i=lnie;
run;
tXt1t
t0.0365t1t
thtet,et~N(0,0.0002007)
t0.9143ht10.0752t1