chaper3过程步.ppt

上传人:李医生 文档编号:9290065 上传时间:2021-02-15 格式:PPT 页数:68 大小:1.65MB
返回 下载 相关 举报
chaper3过程步.ppt_第1页
第1页 / 共68页
chaper3过程步.ppt_第2页
第2页 / 共68页
chaper3过程步.ppt_第3页
第3页 / 共68页
chaper3过程步.ppt_第4页
第4页 / 共68页
chaper3过程步.ppt_第5页
第5页 / 共68页
点击查看更多>>
资源描述

《chaper3过程步.ppt》由会员分享,可在线阅读,更多相关《chaper3过程步.ppt(68页珍藏版)》请在三一文库上搜索。

1、第三章 SAS过程步,SAS系统用SAS数据步生成和管理数据, 用过程步实现分析、报表、绘图等功能。 本章介绍SAS过程步的一般用法和常用语句的含义,以及几个简单报表、分析、绘图过程的使用。,3.1 SAS 过程初步,SAS过程步的一般形式为: PROC 过程名 DATA=输入数据集 选项; 过程语句 / 选项; 过程语句 / 选项; RUN;,PROC语句的选项是可选的,用来规定过程运行的一些设置,如果有多个选项用空格分开; DATA=输入数据集是可选的,如果缺省的话使用最近生成的数据集; 过程步一般以RUN 语句结束,可以省略RUN语句而在下一个过程步或数据步的开始处结束。 交互式过程:在

2、遇到RUN语句时不结束过程运行,只有遇到QUIT语句或者下一个过程步、数据步时才结束。,过程步在PROC语句之后、结束之前可以有若干个过程语句; 过程语句与数据步中的语句不同,数据步中的语句不能用在过程步中; 过程步语句一般以某一个关键字开头,比如VAR、BY、TABLES、WEIGHT等,语句中有一些说明,如果有选择项的话要写在斜杠后。,有些SAS过程步是对数据集作某种变换(比如SORT过程对数据集排序),不生成显示结果; 多数过程步是对数据集作某些分析、报表,这时结果出现在OUTPUT窗口(高精度绘图过程的输出在GRAPHICS窗口); 对OUTPUT窗口的结果,可以用“File | Sa

3、ve As”菜单保存为一个文本文件,可以进一步的修饰,插入到其它报告中,也可以用“File | Print ”菜单打印。,SAS过程步常用语句,一、VAR语句 VAR语句在很多过程中用来指定分析变量。在VAR后面给出变量列表: VAR 变量名1 变量名2 变量名n; 变量名列表可以使用省略的形式,如X1-X3,MATH-CHINESE等。 VAR用法例如: var math chinese;,二、MODEL语句 MODEL语句在一些统计建模过程中用来指定模型的形式。其一般形式为 MODEL 因变量 自变量表 / 选项; 例3-1 data a2; input x y; cards; 820 1

4、65 780 158 720 130 867 180 690 134 787 167 934 186 679 145 639 120 820 158 ; proc reg; model y=x; run;,三、BY语句和CLASS语句 BY语句在过程中一般用来指定一个或几个分组变量,根据这些分组变量值把观测分组,然后对每一组观测分别进行本过程指定的分析。 在使用带有BY语句的过程步之前一般先用SORT过程对数据集排序。 例3-2: data class; set sasuser.class; Run; Proc sort; by sex; Run; proc print data=class;

5、 by sex; run; 上述PRINT 过程可以把男、女生分别列出。,在一些过程(如方差分析)中,使用CLASS语句指定一个或几个分类变量,它实际相当于因变量; 在另一些过程(如MEANS)中,CLASS语句作用与BY语句类似,可以指定分类变量,把观测按分类变量分类后分别进行分析; 使用CLASS时不需要先按分类变量排序。,四、OUTPUT语句 在过程步中经常用OUTPUT语句指定输出结果存放的数据集; 不同过程中把输出结果存入数据集的方法各有不同, OUTPUT语句是用得最多的一种,其一般格式为: OUTPUT OUT输出数据集名 关键字变量名 关键字变量名 ; 其中用OUT给出了要生成

6、的结果数据集的名字,用“关键字变量名”的方式指定了输出哪些结果(关键字的例子比如MEANS过程中的MEAN,VAR,STD等等),等号后面的变量名指定了这些结果在输出数据集中叫什么名字。,例3-3,title 95级1班学生成绩排名; data c9501; input name $ 1-10 sex $ math chinese; avg = math*0.5 + chinese/120*100*0.5; cards; 李明 男 92 98 张红艺 女 89 106 王思明 男 86 90 张聪 男 98 109 刘颍 女 80 110 ; run;,proc print;run; proc

7、 sort data=c9501; by descending avg; run; proc print;run; proc means data=c9501; var math; output out=result n=n mean=meanmath var=varmath; run; proc print data=result; run;,五、FREQ语句 FREQ语句指定一个重复数变量,每个观测中此变量的值说明这个观测实际代表多少个完全相同的重复观测。FREQ变量只取整数值。如 freq numcell; 例 3-4 data a; Input sex$ age number; Car

8、ds; F 20 20 f 22 23 M 21 19 m 22 16 ; Proc means; Freq number; Var age; run;,六、WEIGHT语句 WEIGHT语句指定一个权重变量,在某些允许加权的过程中代表权重,其值与观测对应的方差的倒数成比例。,七、ID语句 有些过程(如PRINT、UNIVARIATE)需要输出观测的代号,这一般使用观测的序号。但是,如果数据集中有一个变量可以用来区分观测(如人名、省市名),就可以用ID语句指定这个变量作为观测标识,如: id name; 指定用变量NAME的值来标识观测。,八、WHERE语句 用WHERE语句可以选择输入数据集

9、的一个行子集来进行分析,在WHERE关键字后指定一个条件。 例3-5: where math=60 and chinese=60; 指定只分析数学、语文成绩都及格的学生。,九、LABEL语句和FORMAT语句 LABEL语句为变量指定一个标签,很多过程可以使用这样的标签。其格式为 LABEL 变量名标签 变量名标签 ; 例3-6 proc print data=sasuser.c9501 label; id name; var math chinese; label name=姓名 math=数学成绩 chinese=语文成绩; run;,FORMAT语句可以为变量输出规定一个输出格式. 例3

10、-7 proc print data=sasuser.c9501; format math 5.1 chinese 5.1; run; 使得列出的数学、语文成绩宽度占5位,带一位小数。 在数据步中规定的变量属性是附属于数据集本身的,是永久的; 在过程步中规定的变量属性(标签、输出格式等)只用于此过程的本次运行。,3.2 列表报告,PRINT过程用来生成列表报告; 基本用法 proc print; print过程步用来列出数据集的内容,可以检查变量与值之间对应是否正确,数据输入是否正确。 为了列出一个指定的数据集,在PROC语句中使用DATA选项指定要列表的输入数据集名, 例3-8 proc p

11、rint data=sasuser.gpa; run;,在过程步内使用VAR语句可以指定要列出的变量并指定顺序。 例3-9 proc print data=c9501; var name chinese sex; run; 列出变量NAME、CHINESE、SEX的值。注意这已不是生成时的变量顺序,并且变量MATH未列出。,注意PRINT的输出第一列总是标为OBS,值为观测序号。 在PROC PRINT语句中加入NOOBS选项,结果中就没有了OBS这一列 例3-10 proc print data=c9501 noobs; run;,在过程中使用WHERE语句可以从输入数据集中选一个子集来处理

12、, 在PRINT过程中使用WHERE 可以指定只列出满足条件的观测。 例3-11 proc print data=c9501; where name in (李明, 张聪); run;,使用中文列标题 为了对列标题使用中文,可以在过程内用LABEL语句给变量指定标签,同时在PROC PRINT语句中加LABEL选项, 例3-12 proc print data=c9501 noobs label; var name sex math chinese avg; label name=姓名 sex=性别 math=数学 chinese=语文 avg=平均分; run; 实际上,如果在生成数据集的数

13、据步中使用如上的label语句,结果数据集中的变量就有了标签,在过程步中可以直接使用而不需再次用label语句定义。,例3-13 title 95级1班学生成绩排名; data c9501; input name $ 1-10 sex $ math chinese; avg = math*0.5 + chinese/120*100*0.5; label name=姓名 sex=性别 math=数学 chinese=语文 avg=平均分; cards; 李明 男 92 98 张红艺 女 89 106 王思明 男 86 90 张聪 男 98 109 刘颍 女 80 110 ; run; proc

14、print data=c9501 label;run; proc sort data=c9501; by descending avg; run; proc print data=c9501 label;run;,用BY语句分组处理 在过程步中使用BY语句可以指定分类变量, 把观测分类处理在使用带有BY语句的过程之前一般用SORT过程对数据集按照分类变量排序。 例3-14: proc sort data=c9501; by sex; run; proc print data=c9501; by sex; run; 。,在PRINT过程中可以用SUM语句计算某个变量的总计(总和)。 例3-15

15、9501班的同学购买课外书所用的钱数用如下程序输入数据集: data bkmoney; input name $ amount; cards; 李明 20 张红艺 15 王思明 10 张聪 20 刘颍 50; run;,计算总计和小计,只要在PRINT过程中加上SUM语句,可以对指定要求和的变量求和: 例3-16 proc print data=bkmoney noobs; sum amount; run; 列出了此数据集并计算全班的总书款,,SUM语句中可以指定多个变量名,同时对这些变量求和。 用BY语句与SUM语句就可以既计算总和也计算分组小计。 例3-16续 除了要计算学生购买课外书总支

16、出外还想分男、女生计算总支出。 注意由于数据集BKMONEY 中没有性别的信息,首先用了带MERGE语句的数据步来横向合并C9501和BKMONEY两个数据集。,proc sort data=c9501; by name; proc sort data=bkmoney; by name; data new; merge c9501 bkmoney; by name; run; proc sort data=new; by sex; proc print data=new; by sex; sum amount; run;,3.3 汇总表格,TABULATE过程可以作出很复杂的表; 一般格式为:

17、 PROC TABULATE DATA=数据集名; CLASS 分类变量; VAR 分析变量; TABLE 页维说明,行维说明,列维说明 / 选项; RUN; CLASS语句给出分类变量,用分类变量可以给观测分类,计算统计量时可以对每一类分别计算。VAR语句给出分析变量,分析变量必须是数值型变量,要计算的统计量是对这些变量计算。,例3-17 proc tabulate data=new; class sex; var amount; table sex, amount; run;,可以用“分析变量名*统计量名” 的形式。 统计量名包括N、NMISS、MEAN、STD、MIN、MAX、RANGE

18、、SUM、USS、CSS、STDERR、CV 、T(检验均值为0的t统计量值)、PRT(t统计量的p值)、VAR、SUMWGT(权数变量的和)、PCTN (某类观测占总观测个数的百分比)、PCTSUM(某类观测的总和占全部总和的百分比)。 例3-18 求男、女生的数学、语文成绩平均值及标准差: proc tabulate data= new; class sex; var math chinese; table sex, (math chinese)*(mean std); run;,要并列变量或并列统计量的话只要把各项用空格连接,如MATH CHINESE和MEAN STD。变量和统计量名之

19、间用星号连接。 如果要计算总的统计量值,只要加一个ALL关键字。 例3-18续 TABLE语句改成: table sex all, (math chinese)*(mean std);,可以用星号连接分类变量和分类变量以构成交叉分组,用星号连接分类变量和分析变量以构成分类计算分析变量的统计量。 例3-18续 要考察性别的频数分布,使用统计量N和PCTN,TABLE语句可以写成 table (sex all)*(N PCTN); 如果要计算的统计量不是N、PCTN这样的基于计数统计量,则还需要指定用来计算统计量的分析变量, 例如TABLE语句写成 table (sex all)*math*(me

20、an std); 在这两个例子中没有行维,只有列维。,使用KEYLABEL语句可以指定各统计量的标签,其格式为 KEYLABEL 关键字标签; 例3-19 proc tabulate data=new; class sex; var math chinese; table (sex all), (math chinese)*(mean std); keylabel mean=平均值 std=标准差 all=总计; label sex=性别 math=数学 chinese=语文; run; 用KEYLABEL指定了MEAN和STD标签,又用LABEL语句指定了变量的标签:,3.4 数据排序,SO

21、RT过程可以把数据集按某一个或若干个变量的次序进行排序。 例3-20 proc sort data=c9501; by sex; run; 把数据集C9501 的观测按性别排序(分类)。 注意DATA=指定的数据集既是输入数据集又是输出数据集。 过程的结果在输出窗口没有显示。,可以按几个变量排序, 例3-20 proc sort data=c9501; by sex descending avg; run; 上面程序按男、女性别排序,并在男生、女生内部按平均分由高到低排序。 BY语句内在一个变量名前面加上DESCENDING关键字表示此变量的排序是由大到小的。 结果可以用proc print;

22、run;显示出来。 在INSIGHT中也可以对数据集排序(使用数据窗口菜单的sort功能)。,3.5 数据集转置,可以利用Transpose过程改变行和列的关系 例3-21 data mat; input x1 x2 x3; cards; 1 2 3 4 5 6 7 8 9 10 11 12 ; run; Proc print;run; Proc transpose data=mat out=matt; Var x1 x2 x3; Run; Proc print; run;,3.6 描述统计,MEANS过程、UNIVARIATE过程、FREQ过程 这三个过程用来计算简单的数据汇总信息。 MEA

23、NS和UNIVARIATE过程对区间变量计算均值、标准差等数字特征, FREQ过程对离散变量计算取值频数分布。 例3-21 proc means data=c9501; var math chinese; run; 上述程序对C9501中的数学成绩、语文成绩计算简单统计量。,如果使用UNIVARIATE过程则可以计算较多的统计量。 例3-22 proc univariate data=sasuser.gpa; var gpa; run; 结果中各统计量的可参见李东风统计软件教程1.3.7,FREQ过程可以考察离散变量的取值分布,在TABLES语句中指定要分析的变量。 例3-23 proc fr

24、eq data=c9501; tables sex; run; 对区间变量使用FREQ过程列出频数分布, 如 tables math; MEANS、UNIVARIATE、FREQ的结果可以在INSIGHT的“Analyze|Distribution”和“Tables|Frequency Table”得到。,例3-24 data sasuser.taxif; input amount num ; cards; 10 4 12 6 13 1 15 1 16 1 19 5 20 3 23 1 24 1 25 1 26 3 27 1 ; Run; Proc means data=sasuser.tax

25、if mean std sum min max; Var amount ; Freq num; Run;proc print;,3.7 用CORR过程计算相关系数,相关系数可以反映变量两两之间的线性相关; 可用proc corr 。 例3-25 proc corr data=sasuser.gpa; var hsm hss hse; run; 上述程序计算SASUSER.GPA中的三个变量HSM、HSS、HSE两两之间的相关系数(普通的Pearson相关系数)。 CORR的结果也在INSIGHT中可以由“Analyze|Multivariate”菜单得到。,3.8 用SAS/GRAPH绘图,S

26、AS可以把存贮在SAS数据集中的数据以图形的方式形象直观地显示出来; 在SAS/GRAPH 模块的支持下,SAS可以作散点图、曲线图、直方图、扇面图、三维曲面图、等高线图、地图,等等。,散点图和曲线图,用GPLOT过程绘制散点图和曲线图。 例3-26 proc gplot data=sasuser.gpa; symbol i=none v=star; plot satv*satm; run; 结果显示了一个GRAPHICS窗口,绘出了以SATV为纵轴、以SATM为横轴的散点图 在GPLOT过程中,用PLOT语句指定绘图用的变量; 要绘制连线,则在symbol语句中指定i=join 如果不想出现

27、散点符号,则在symbol语句中指定V=none。,SYMBOL语句是一个全程语句,指定绘图用的连线方式、颜色、散点符号、大小,等等。SYMBOL语句可以带编号,如SYMBOL2,SYMBOL3 等,不带编号的相当于SYMBOL1。,在PLOT语句中指定多个因变量(自变量一般应为同一个)并使用OVERLAY选项可以做多条曲线; 例3-27 proc gplot data=sasuser.air; symbol1 i=join v=none line=1 ; symbol2 i=join v=none line=2 ; plot co*datetime=1 so2*datetime=2 / ov

28、erlay; run; 说明:其中指定了两个SYMBOL语句,第一个SYMBOL语句指定了LINE=1,表示线型为实线,第二个SYMBOL语句指定了LINE=2表示线型为虚线。我们在PLOT语句中用了“纵轴*横轴= n”的格式来指定曲线使用哪一个SYMBOL语句的规定来画, n对应于SYMBOL语句的序号。,SYMBOL语句中,I=选项, 取I=SM nn( nn取0099值)表示绘制样条曲线但可以不经过散点, nn值代表曲线光滑性与拟和度的折中, 取I=NEEDLE绘制每个点到横轴的垂线, 取I=RL 绘制线性回归直线, I=RQ为二次曲线, I=RC为三次曲线。,后面加上CLI nn如RL

29、CLI95表示在回归直线之外绘制预测值的95置信限曲线, 例3-28 proc gplot data=sasuser.gpa; symbol i=rlcli95 v=star; plot satv*satm; run; GPLOT过程还可以有其它灵活的用法,可以参考有关资料或用SAS系统菜单“Help”,从中找“SAS System Help: Main Menu | Graphics | GPLOT”。,直方图和扇形图,可用GCHART过程绘制直方图; 例3-29 proc gchart data=sasuser.gpa; vbar gpa; run; SASUSER.GPA中GPA的分布直

30、方图, 其中绘图用的变量用VBAR语句给出。 把VBAR改成HBAR则条形方向变为横向。 用GCHART绘制的直方图和在INSIGHT中绘制的直方图有所不同,它在横轴标的是区间的中点值,而在INSIGHT中横轴标的是区间的端点值。,可以绘制分组的直方图, 例3-30 proc gchart data=sasuser.gpa; vbar gpa / group=sex; run;,在GCHART中用PIE语句绘制表示频数的扇形图: 例3-31 proc gchart data=sasuser.gpa; pie sex; run; 若需要显示百分比值,在PIE语句中加入TYPE=PERCENT选项

31、, 例3-32“pie sex / type=percent;”,GCHART过程还可以用BLOCK语句绘制三维直方图。 例3-32 goptions hpos=90 vpos=70; proc gchart data=sasuser.houses; block style / group=bedrooms; run;,三维曲面图和等高线图,对一个二元函数z=f(x,y),有了x取等间隔值、y取等间隔值时z的值,这时我们可以用G3D过程绘制曲面图形,用GCONTOUR绘制曲面的等高线图。 例3-33 绘制一个二维正态分布曲面的图形。假设(X,Y)服从联合正态分布,其均值都是0,方差分别为1和a

32、,相关系数为r。这时,我们可以得到(X, Y)的联合密度函数的公式为: 可以在一个网格上计算曲面的值:,data dnorm2; a=2; a2=sqrt(a); r=0.5; det=a*(1-r*r); do x=-3 to 3 by 0.3; do y=-3*a2 to 3*a2 by 0.3*a2; z=1/(2*3.1415926*det)*exp(-0.5/det*(a*x*x + y*y - 2*r*a2*x*y); output; end; end; keep x y z; run;,G3D过程来绘制曲面图: Proc g3d data=dnorm2; plot x*y=z;

33、run;,用GCONTOUR过程可以绘制曲面对应的等高线图, 例3-33 proc gcontour data=dnorm2; plot x*y=z; run;,图形的调整与输出,各绘图过程中都指定了丰富的选项来调整图形; 在图形中也可以用TITLE语句和FOOTNOTE语句给图形加标题和脚注; 为了在图形的标题、标签中也能使用汉字,老的SAS版本需要比较多的步骤,但是在Windows下的SAS 8.0以后只要很简单的语句就可以在图形中使用True Type字型的汉字。,例3-34 goptions ftext=宋体; proc gplot data=sasuser.class; title

34、试验FONTS的汉字功能; plot weight * height; label weight = 体重 height=身高; run;,为了把SAS/GRAPH绘制的图形保存为兼容的图形文件,只要在显示某一页图形输出时,选“File | Export”菜单,在出现的输入文件名的窗口选择适当的文件类型,如BMP、WMF 、JPEG、PS,等等; SAS/GRAPH图形就是从SAS中用“File | Export”输出为WMF文件调入MS Word的结果; 要打印SAS/GRAPH生成的图形,只要选“File | Print”。这样用Windows的打印驱动程序与SAS/GRAPH的图形驱动配

35、合来打印; SAS/GRAPH模块还提供了许多种打印机的独立的驱动程序,可以不依赖于Windows的打印驱动,具体请参考有关资料或帮助。,3.9 分析员模块介绍,启动SAS/analyst的方法: 从菜单启动 从命令条启动,数据管理, 打开数据集 介绍数据窗口菜单 保存数据集 编辑数据集 数据集变量的运算,数据筛选,筛选数据集:datafilter-subset data 保存数据集: filesave as 与 filesave 的区别,数据变换, compute rank standardize recode values recode ranges change type,随机数生成 分类汇总 横向合并 data resdat.a ; set ResDat.Idx000001(keep=date clpr); run; data resdat.b (keep=date oppr); set ResDat.Idx000001; run;,纵向合并 data a; merge ResDat.stk000001 ResDat.stk000002; by date; run;,行列转置 data mat; input x1 x2 x3; cards; 1 2 3 4 5 6 7 8 9 10 11 12 ; run;,报表,列表 汇总表,描述性统计 画图,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 科普知识


经营许可证编号:宁ICP备18001539号-1