sas实例精选.docx
《sas实例精选.docx》由会员分享,可在线阅读,更多相关《sas实例精选.docx(36页珍藏版)》请在冰豆网上搜索。
sas实例精选
课件
《统计分析方法——SAS实例精选》程序及数据45例
/*一、以下是象征性的一个数据实例。
若能改用自己的数据来运行程序,则能举一反三地用活SAS*/
TITLE'xsq.dat';
/*二、本书后面许多章节的程序例子虽然未能逐一列出,但大同小异,即只要按下列象征性的程序数十例进行稍加修改,
则可派生出全书的程序例子。
读者也可改用自己的程序和数据,然后模仿书中的统计分析方法,准能真正学活SAS。
*/
/*程序2.1*/;
DATAchild;
INPUTagen@@;
DATALINES;
452
503
281
301
463
604
240
PROCPRINT;
PROCMEANS;
VARage;
PROCPLOT;
PLOTn*age;
RUN;
/*程序2.2*/;
DATAOLDER;/*注:
读取的数据存入OLDER文件中,文件名长度为1~8个字
符。
若文件名缺省,则SAS自动提供一个文件名,但不显示*/
INPUTID11-2CASEID3-5NAME6SEXAGE8-9EDC10OCU111
OCU212SAL113-15SAL216-18V119V220V321V422
V523;
LIST;/*显示每行的数据,以便核对。
可省之*/
CARD;/*告诉SAS,数据行从下一行开始读之*/
110011*********12021214
11002116542218018011210
……
11030227023013012021310
;
PROCPRINT;/*若写,则显示观察值。
可省。
*/
TITLE'老龄人社会保障抽样调查';/*TITLE''中的内容是标题名称*/
PROCPLOT;/*绘制散点图*/
PLOTEDC*OCU1=SEX;/*以性别1或性别2为图点的记号,画出教育水平与职业两变量值的
纵横交点,组成一幅散点图*/;
PROCCHART;/*调用直方图、条形图程序*/
VBAROCU1;/*画出退休前职业的垂直条形图*/
HBARSEX;/*画出性别的水平条形图*/
PROCFREQ;/*调用频次统计过程*/
TABLESEDC;/*计算EDC的频次*/
TABLESEDC*SAL1;/*制作交互分类表*/
PROCMEANS;/*调用MEANS过程,计算上述EDC、OCU1和SAL1各个变量的均
值、观察值、和方差等9种参数*/
PROCSORT;/*调用SORT过程*/
BYSEXEDC;/*按性别、教育年限排序*/
PROCPRINT;/*有了此条语句方能显示排序结果*/
PROCMEANS;/*再次调用MEANS过程,以便计算8种描述性统计量*/
BYSEXEDC;/*按SEX、EDC变量值分组,计算描述性统计量*/
RUN;/*微机SAS须有RUN命令。
大、中、小型机中的SAS则不需RUN命令*/
/*程序3.1*/;
DATAXSQ;
INFILE'XSQ.DAT';
INPUTID11-2CASEID3-5N6SEX7AGE8-9;
IFSEXEQ1THENDELETE;/*注:
删去男性的数据*/
LIST;
DATAXSQ2;/*新的数据集名称为XSQ2*/
SETXSQ;/*新的XSQ2数据集是从第一个数据集“XSQ”中复制的*/
IFAGE<50&SEX=0THENDELETE;
/*注:
如果年龄小于50岁,而且,性别=0(误码)时则删去*/
LIST;
RUN;
/*程序3.2*/;
DATAOLDER;
LABELID1='地区名称'EDC='老年人的教育水平'OCU1='退休前的职业'
OCU2='退休后的职业';
INFILE'OLDER.DAT';
INPUTID11-2CASEID3-5NAME6SEX7AGE8-9EDC10
OCU111OCU212;
CARDS;
PROCFORMAT;/*(执行FORMAT过程)*/;
VALUESEXFMT1='男'2='女';
/*注:
SEXFMT是SEX的新名称。
注意:
VALUE是关键词,不能变*/;
VALUEOCUFMT1='工人'2='干部'3='商业服务人员'4='教师'
5='科技人员';/*注:
OCUFMT是OCU1的新名称)*/;
PROCFREQ;
FORMATSEXSEXFMT.;/*注:
用SEXFMT的数值取代了原SEX的数值)*/;
TABLESEX;/*画出SEX=1或SEX=2的频次分布图)*/;
PROCMEANS;/*(调用MEANS统计过程)*/;
VARSEXEDCOCU1;/*计算变量的描述性统计量。
注意:
VAR也是关键词*/;
RUN;/*注:
运行程序*/;
/*程序3.3*/;
DATAscore;
RETAINcountschismathseng0;/*将计数器COUNT及schi等新变量预置为0*/;
INFILE'score.dat';
INPUTchimatheng;
LABLEchi='语文成绩'math='数学成绩'eng='英语成绩'
schi='全班语文总分';
COUNT=count+1;/*计算次数的'计数器'先预置为o,然后逐次加1*/;
SCHI=SUM(Schi,chi);/*语文成绩的累加*/;
SMATH=SUM(Smath,math);/*数学成绩的累加*/;
SENG=SUM(Seng,eng);/*英语成绩的累加*/;
list;/*列出数据*/
PROCPRINT;/*显示统计结果*/;
RUN;
/*注:
倒数4,5,6三个语句,是对例15程序相应行的改写*/;
/*例3.18*/;
DATAEXAM;
INPUTV1V2V3@@;
IF70<=V1<=80THENGOTOOK;
V2=1;
COUNT+1;
RETURN;
OK:
SUMX+V1;SUMY+V2;/*SAS允许一行书写多个语句*/
LIST;
CARDS;
758390
687580
9010075
RPOCPRINT;
RUN;
/*例3.19:
*/
DATAOLDER;
LABELID1='地区名称'
CASEID='观察值编号'
EDC='老年人的教育水平'
OCU1='退休前的职业';/*注:
在微机SAS中,标签用一对''(左撇号)括之*/
INFILE'OLDER.DAT';
INPUTID11-2CASEID3-5SEX7AGE8-9
EDC10OCU111OCU212;
/*程序3.4,原程序3-14。
本程序产生下述图3.3,原图3-14。
*/;
TITLE'北京市四区13个街道(居委会)<<社区服务研究>>数据分析';
DATASQ;
INFILE'S.dat';
INPUTId1-2CASEID3-5AGE6-7SEX8
edc9wk10fm11V6f12V7f13-14
v8f15-16V9f17V10A18V10B19V10C20V10D21vi22-24vo25-27;
IFAGE=0|SEX=0|FM=0|EDC=0|WK=0|V6F=0|V7F=0|V8F=0|V9F=0THENDELETE;
IFvi=0|vo=0|v7f=0|v8f=0thendelete;
AV=vi/v7f;VIO=VI-VO;AV8F=V8F/V7F;
PROCFORMAT;
VALUEvioFLOW--200='0'-200--100='1'-100-0='2'
0-100='3'100-200='4'200-HIGH='5';
VALUEavFLOW-60='0'60-70='1'70-80='2'80-90='3'
90-100='4'100-HIGH='5';
PROCFREQ;FORMATAVAVF.;FORMATVIOVIOF.;
TABLEavvio;
RUN;
/*程序4.1*/;
DATAL1;
INPUTid1-2se$4age5-6height8-10weight12-14.1;
CARDS;
01m19173672
02m20175575
03f19160540
04m21176700
05f20158585
;
c'河北'5='福建'6='辽宁'
7='四川'8='西藏';
TITLE'1973年~1975年我国部分省市男性死因分析';
PROCUNIVARIATEDATA=VARCNORMAL;
VARv1;
RUN;
/*程序5.2,用PROCUNIVARIATE过程中的PLOT命令绘制正态概率图等。
*/;
DATAVARC;
INPUTv11-6v27-12v313-18v419-24v525-29v630-35v738-42v43;
LABELv1='脑血管病'v2='心血管病'v3='癌症'v4='呼吸系病'
v5='动脉硬化性心脏病'v6='伤亡事故'v7='传染病'v='省份名称';
CARDS;
136.97109.4876.3274.5255.2346.4724.651
128.8095.2979.4269.2052.1828.3126.912
104.0374.30140.6671.7622.5048.1611.903
101.41126.6298.1389.5155.4840.3850.514
58.7661.7491.0981.5821.0861.9238.045
70.49109.6472.4781.0920.9040.1126.976
55.93148.5156.25153.94.101.2481.657
73.8699.8463.09153.38.54.2393.068
PROCFORMAT;
VALUEvf1='北京'2='天津'3='上海'4='河北'5='福建'6='辽宁'
7='四川'8='西藏';
FORMATvvf.;
TITLE'1973年~1975年我国部分省市男性死因分析';
PROCUNIVARIATEDATA=VARCPLOT;
VARv1;
RUN;
/*程序5.3,用PROCUNIVARIATE过程中的PLOT命令绘制正态概率图等。
*/;
/*程序6.1*/
DATAL1;
INPUTid1-2se$4age5-6height8-10weight12-14.1;
putidsexage;/*显示3个变量之值.*/
putid=weight=;/*在等号后面显示变量值.*/
put'学生代号是:
'id'身高='height'体重='weight;
list;/*为显示观测值(OBS)之用.*/
list;
CARDS;
01m19173672
02m20175575
03f19160540
04m21176700
05f20158585
;
PROCprint;
RUN;
/*程序6.2*/;
DATAL2;
INPUTid1-2sex$4age5-6height8-10weight12-14.1;
put@5'id='@9id@14'时,'@18'age='@23age;
/*@5表示在第5列显示.*/
put'';/*表示空出一行空白行.*/
put@1sex/height15-17;/*注:
"第01列显示sex值后跳到下行第
15-17显示height.*/
list;
CARDS;
01m19173672
02m20175575
03f19160540
04m21176700
05f20158585
RUN;
/*程序6.3*/;
DATAone;
INPUTabc;
CARDS;
122334
234556
344556
455667
TITLE'one数据集';/*显示第一个数据集的标题。
*/
DATAtwo;/*预先为'one'的复制品起名为'two'*/
SETone;/*'数据集two'是从'数据集one'中复制的。
*/
PROCPRINTDATA=two;/*显示数据集two的内容*/
TITLE'第二个数据集';
/*程序6.4*/;
DATAone;INPUTabcsex$;
CARDS;
122334m
234556f
344556f
455667m
PROCprint;
TITLE'数据集one';
PROCsort;bysex;
DATAtwo;
setone;
bysex;
puta@4first.sex=@18last.sex=;
PROCprintDATA=two;
TITLE'第二个数据集';
/*程序6.5*/;
DATAone;INPUTabcsex$;
CARDS;
122334m
234556f
344556f
455667m
PROCprint;
TITLE'数据集TWO';
PROCsort;bysex;
DATA_NULL_;
setone;
bysex;
putA@4first.sex=@18last.sex=;
PROCsort;bysex;/*先按sex排序.*/;
PROCprint;bysex;/*再按sex分组显示.*/
/*例5程序产生图6-5.注:
图6-5比图6-4简练.*/
/*程序6.6.*/;
TITLE'大中城市社区服务调查分析';
DATAxsq;
INPUTid11-2caseid3-5n6sex7age8-9edc10ocu111
ocu212
sal113-15sal216-18(v1v5)(5*1.);
DATALINES;
11001717942099172222215
11002526952007809911321
110026*********17011321
11003517452011018022222
11003626752011516812223
110042*********07031311
11005525732620010011324
11006227521004610321310
11007228910000000031120
......
11008526921112515011210
;
PROCSORTDATA=xsqOUT=new2;
BYDESCendingsal1DESCendingage;
PROCPRINTDATA=new2;
RUN;
/*程序6.7,原程序s7.2*/;
DATAscore;
RETAINcountschismathseng0;/*将计数器COUNT至schi
等新变量预置为0*/;
LABLEchi='语文成绩'math='数学成绩'eng='英语成绩'
schi='全班语文总分';
INPUTchimatheng@;
cards;
807595
708592
85.94
939688
.9986
;
COUNT+1;/*计算次数的'计数器'先预置为o,然后逐次加1*/;
schi+chi;/*语文成绩的累加*/;
Smath+math;/*数学成绩的累加*/;
Seng+eng;/*英语成绩的累加*/;
list;/*列出数据*/
PROCSORTDATA=scoreOUT=new7;
BYDESCendingschismathseng;
PROCPRINTDATA=new7;
RUN;
/*程序6.8,原程序6.7。
产生图6.7*/;
/*******************************************************************/
/*程序名:
学生成绩分析*/
/*数据文件名:
score1.dat*/
/*变量job的值:
chi=语文eng=英语math=数学*/
/*******************************************************************/
DATAscore;
INPUTidjob$score@@;
CARDS;
01chi8001math7501eng9502chi7002math8502eng92
03chi8503math8003eng9404chi9304math9604eng88
05chi8005math9905eng86
PROCsort;byjobidscore;
DATA_null_;
setscoreend=final;byjob;
TITLE'学科成绩分析.';
TITLE3'-----------------------------------------------------------';
subsco=subsco*score;
totsco=totsco*score;
subid+1;
totid+1;
putidjob5-8score;
iflast.id;
put/'科目'job'的totsco为:
'@30'id='subid@40'score='subsco/;
subsco=0;subid=0;
iffinalthenput'全组总分为:
'@20'id='totid@26'成绩='totsco;
PROCchart;
VBARjob/sumvar=score;/*画出成绩的累积条形图.*/
/*程序6.8产生图6.7*/
/*程序7.1:
各组男女赛跑成绩*/
DATARACE;
INPUTid1-2year5-8sex$9age10-11second13-16xgroup$18;
DATAlines;
011990f2417.0a
021990f2516.6a
031990f2316.8c
041990f2516.8c
051990m2416.2d
061990m2616.5d
071990m2215.7d
081991m2515.4e
091991m2315.0e
101991m2016.6e
111991m2215.7b
121991m2215.3b
131991m2316.4b
141991f2516.6b
151991f2416.8c
161991f2216.7c
;
PROCGCHART;HBARxgroup/SUBGROUP=sexGROUP=year;/*产生图7.2*/
RUN;
/*程序7.2,原程序23.2*/
DATAp1;
INPUTxy@@;
CARDS;
112439416525636749-11-24-39-416-525-636-749
1122334455667788991010
;
SYMBOL1c=greenv=ai=steprj;
SYMBOL2c=redv=stari=join;
PROCgchart;
VBARxy;
RUN;
PROCGSLIDEGOUT=exa4;
TITLE1C=blueF=centxi'First'C=green'line'c=centxi'Title';
Title3C=greenF=centxi'xY函数'C=blue'直方图';
PROCGSLIDEGOUT=exa4;
NOTEJ=C'立体直方图'H=2cmC=red;
RUN;
/*程序7.3:
*/;
TITLE'SASCONTOURPlot';
DATAC;
DOx=-5to5by.25;
DOy=-5to5by.25;
z=sin(x*x+y*y);
OUTPUT;
END;
END;
GOPTIONCBACK=BLUE
COLORS=(whiteyellowvliyggoldmagentasalmon);
TITLE1j=Lh=1.3F=swissc=white
'等高线图形中连用PATTERN和JOIN