| SAS复习要点 |
|
| 作者:jiaoshf 文章来源:本站原创 点击数: 更新时间:2006-5-1 |
|
|
SAS复习要点
一、基本概念、程序结构、语句格式与主要过程的一般形式
1. SAS的子窗口主要有浏览器窗口(EXPLORER)、结果窗口(RESULTS)、程序编辑器窗口(program editor)、日志窗口(log)、输出窗口(output);
2. 切换至日志窗口的命令是log、热键是F6;切换至输出窗口的命令是output、热键是F7;
3. 提交SAS程序的命令是submit;
4. SAS系统是大型集成软件系统,具备完备的数据访问、管理、分析和呈现及应用开发功能;
5. SAS数据集是一类由SAS系统建立、维护和管理的数据文件;
6. 为了实现存储和管理面向对象的开发任务,SAS建立目录册(catalog)类型的文件,在这一类文件中可以存储整个应用系统,包括它的界面,源程序和各种对象间的连接;
7. SAS逻辑库是一个逻辑概念,一个逻辑库就是存放在同一文件夹或几个文件夹中的一组SAS文件;
8. 在SAS软件系统的信息组织中,总共只有两个层次:SAS逻辑库是高一级的层次,低一级的层次就是SAS文件本身;
9. 在SAS系统中,为便于访问一个SAS文件,要为该SAS文件所在的位置指定一个SAS逻辑库,即赋予一个逻辑库名,在指定逻辑库名后,就可使用两级命名的方式引用SAS文件:逻辑库名.文件名;
10. 在每个SAS进程一开始,系统就自动地指定了一些逻辑库供用户使用,它们是WORK、SASHELP和SASUSER;
11. 在每个SAS进程开始时系统缺省地创建名为work的SAS逻辑库,它是一个临时逻辑库,在引用WORK库中的SAS文件时,可省略逻辑库名;
12. 永久逻辑库是指它的内容在当前SAS进程结束时仍被保留的SAS逻辑库,在SAS系统中除了库名为WORK以外的逻辑库都是永久库;
13. Sashelp包含所安装SAS系统各个产品有关的SAS文件,运行安装的SAS系统所需要的SAS文件缺省地存储在这个逻辑库中;
14. Sasuser包含为满足用户需要而特制的SAS文件,用户的一些设置也放在Sasuser逻辑库中;Sasuser也是存放为您个人使用而创建的文件的合适场合;
15. 库引擎是规定系统用什么格式向逻辑库读写文件的内部指令;
16. 由于Sashelp、Sasuser和Work是系统自动设定的,这些逻辑库名是不能删除的;
17. 一个SAS数据集是一个包含两个组成部分的文件:一个描述部分和一个数据部分。某些SAS数据集也另外包含一个索引文件;
18. SAS数据集的变量属性信息包括变量的:名称(name)、类型(type)、长度(length)、输出格式(format)、输入格式(informat)和变量标签(label);
19. SAS编程前必须明确以下三个方面:什么是输入的或供操作的数据、要对输入的数据进行什么加工、期望的输出结果是什么;
20. 每个SAS程序是由许多完成单个动作的程序步和一些设定环境的语句构成的;
21. 数据步(data step):读入源数据文件和SAS数据集,修改、编辑或创建SAS数据集或文本文件;
22. 过程步(proc step):面向SAS数据集,完成某个特定的计算、分析和呈现的功能;
23. 每个语句是由一个关键词开始,并以分号结束,通常就用开始的关键词命名这个语句;
24. DATA语句和PROC语句分别标志数据步和过程步的开始,RUN语句或另一个程序步的开始标志程序步的结束;
25. 指定逻辑库名的语句的一般形式为:libname 逻辑库名 '库的实际地址';
26. 在程序编辑器窗口提交语句: libname 逻辑库名 list;可以在log窗口显示该逻辑库的连接;
27. 多个物理位置指定同一个逻辑库名的一般形式为:libname 逻辑库名(物理位置1 物理位置2…);
28. 指定逻辑文件名语句的一般形式为:filename 逻辑文件名 '文件位置';
29. 查看SAS逻辑库的属性和内容的一般写法为:proc datasets lib=逻辑库名;
run;
30. 查看SAS数据集的属性的一般写法为:proc contents data=数据集名;
run;
31. 输出数据集的数据部分的一般写法为:proc print data=数据集名;
run;
32. 转换文本数据文件的数据步的一般形式为:data 数据集名;
infile 文件名;
input 变量输入设定;
run;
33. input语句的一般形式为:input 指针控制 变量名 输入格式…;
34. 指针控制@n表示从第n列开始读入,+n表示将列控制指针增加n列后读入;
35. 程序数据列PDV包含两个自动生成的(临时)变量:_N_、_ERROR_,它们可以在程序中使用,但不作为观测的一部分写入数据集;
36. retain语句的一般形式为:retain 变量名<初值> 变量名<初值> …;
37. 在数据步执行的每次循环中,retain语句指定的变量不再从新初始化,保留它以前存储的结果;
38. 求和语句的一般形式是:变量名+表达式;在求和语句中加号前后的项有不同的作用,一个是累加的变量,另一个是相加的表达式,两者位置是不能互换的;
39. 函数LAG和DIF调用的一般形式为:LAG(变量名);DIF(变量名);函数LAG的返回值是上一条记录中该变量的值,函数DIF的返回值是当前记录中变量值减去上一条记录中该变量的值;
40. 实现将加工结果存为文本格式的数据步程序的一般形式为:data _Null_;
数据读入语句组;
数据加工语句组;
file 文件名<选项>;
put 变量写入设定;
run;
41. 过程import的作用是实现将PC格式数据文件、以固定字符为字段分隔符的文本文件转换为SAS数据集;
42. DROP和KEEP语句的作用是实现对生成数据集的变量进行删减;
43. 在数据步的加工过程中,可使用IF语句选择要保留的观测,其一般形式为:IF 表达式;
44. 临时变量FIRST.*它在BY 变量每个值的第一条记录时为1,否则为0;临时变量LAST.*它在BY变量每个值的最后一条记录时为1,否则为0;
45. 过程PRINT的一般形式为:proc print data=数据集名 选项;
id 变量1 变量2…;
var 变量1 变量2…;
sum 变量1 变量2…;
by 变量1 变量2…;
pageby 变量1 变量2…;
run;
46. 过程FORMAT可以设定用户自己的输出格式,对变量的不同值或不同范围的值以设定的不同的‘标签’来显示,其一般形式为:PROC FORMAT;
VALUE 格式名 范围1='标签1'
范围1='标签1'
…;
run;
47. 汇总信息最常用的就是各个变量取值的分布(取各个值的频数和百分数)和一些常用的描述统计量;
48. SAS中计算频数分布和描述统计量最常用的过程是FREQ和MEANS;
49. FREQ过程的一般形式为:proc freq data=数据集;
tables 变量1<*变量2> 变量3<*变量4>;
weight 变量名;
format 变量1 输出格式 变量2 输出格式…;
run;
50. mean过程的一般形式为:proc mean data=数据集 <统计量关键字>;
var 变量1 变量2…;
class 变量1 变量2…;
freq 变量;
weight 变量;
output out=数据集 统计量关键字=<变量名列>…/autoname;
run;
51. 使用过程TABULATE制作一个报表,必须确定:什么是分类变量、什么是分析变量、计算什么统计量、用怎样的表格展示结果;
52. 过程tabulate的基本形式为:proc tabulate data=数据集<选项>;
class 变量1 变量2…;
var 变量1 变量2…;
table <<页表达式,>行表达式,>列表达式< SPAN>选项>;
run;
53. keylabel语句可对过程tabulate制作表格中的统计量名称进行更改,类似于变量标签的设定;
54. 制作散点图使用的过程是gplot,它的最简单的用法为:proc gplot data=数据集;
plot 纵轴变量*横轴变量;
run;
55. 在过程gplot中,控制表示点的符号和点间连线的是symbol语句;
56. 完成关于坐标轴的修饰是AXIS语句;
57. 在一个过程步中制作多幅图形,可有以下几种做法:使用BY语句、在PLOT语句中提出多个纵横轴组合、在过程步中使用多个PLOT语句;
58. PLOT语名可按第三个变量的不同值分别绘制连线并置于同一幅图上,这一用法的一般形式为:PLOT 纵轴变量*横轴变量=第三变量< SPAN>选项;>;
59. 过程GCHART制作汇总图的一般形式为:proc gchart data=数据集;
图形名 分类变量< SPAN>选项>;
run;
60. PLOT过程中绘制柱状图、饼图的语句是HBAR、VBAR、PIE,其选择分析变量和统计量的选项为:SUMVAR=变量名 TYPE=统计量;
61. 使用过程GCHART制作柱状图时,对每个柱的花纹和颜色进行设定是通过pattern语句实现的;
62. UNIVARITE过程的功能比FREQ过程的功能更强,UNIVARITE过程除了能够统计频数、各种百分比之外,还可以统计均值、标准偏差等描述性统计量以及图形显示;
63. UNIVARITE过程的一般形式:proc univariate data=数据集 freq plot;
var 变量表;
run;
64.定义宏变量的一般形式%let 变量名=值;
65.引用宏变量格式为&宏变量名;
66.在数据步中生成宏变量调用 symput()函数;
67.调用宏程序采用%宏名称;
68.使用%include读入宏定义;
69.在程序中宏变量被引用的效果为用宏变量的值直接替代宏变量名,这一过程也称之为解读;
70.相关分析过程为proc corr;
71.线性回归分析过程为proc reg;
72.logistic回归采用过程proc logistic;
73.方差分析采用过程proc anova;
74.从外部导入数据的过程为proc import;
75.从SAS导出数据的过程为proc export。
二、考试题型:填空题、选择题、程序阅读题
三、阅读程序
(一)P82 习题5、6并熟悉代码
(二)阅读下列程序并对语句作出注释 1.proc import datafile="c:\myfiles\Accounts.xls" out=sasuser.accounts sheet="Prices"; getnames=no; run; /*************************************/ /* print part of the new data set */ /*************************************/ proc print data=sasuser.accounts(obs=10); run; 并对每个语句进行注释
2.data admit; input ID $ 1-4 Name $ 6-19 Sex $ 21 Age 23-24 Date 26-27 Height 29-30 Weight 32-34 ActLevel $ 36-39 Fee 41-46; format fee 6.2; datalines; 2458 Murray, W M 27 1 72 168 HIGH 85.20 2462 Almers, C F 34 3 66 152 HIGH 124.80 2501 Bonaventure, T F 31 17 61 123 LOW 149.75 2523 Johnson, R F 43 31 63 137 MOD 149.75 2539 LaMance, K M 51 4 71 158 LOW 124.80 2544 Jones, M M 29 6 76 193 HIGH 124.80 2552 Reberson, P F 32 9 67 151 MOD 149.75 2555 King, E M 35 13 70 173 MOD 149.75 2563 Pitts, D M 34 22 73 154 LOW 124.80 2568 Eberhardt, S F 49 27 64 172 LOW 124.80 2571 Nunnelly, A F 44 19 66 140 HIGH 149.75 2572 Oberon, M F 28 17 62 118 LOW 85.20 2574 Peterson, V M 30 6 69 147 MOD 149.75 2575 Quigley, M F 40 8 69 163 HIGH 124.80 2578 Cameron, L M 47 5 72 173 MOD 124.80 2579 Underwood, K M 60 22 71 191 LOW 149.75 2584 Takahashi, Y F 43 29 65 123 MOD 124.80 2586 Derber, B M 25 23 75 188 HIGH 85.20 2588 Ivan, H F 22 20 63 139 LOW 85.20 2589 Wilcox, E F 41 16 67 141 HIGH 149.75 2595 Warren, C M 54 7 71 183 MOD 149.75 ; run; /*************************************/ /* select observations and variables */ /*************************************/ data subset1; set admit; if fee>= 124.80 & sex = 'M'; keep id name age weight; run; /*************************************/ /* subset data, perform processing, */ /* and subset variables again */ /*************************************/ data subset2(keep=id sex kgweight); set admit(drop=name date); if actlevel='LOW' and age>40; KgWeight=height/2.2;
run;
并对每个语句进行注释 。 3.data color; input Region Eyes $ Hair $ Count @@; label eyes='Eye Color' hair='Hair Color' region='Geographic Region'; datalines; 1 blue fair 23 1 blue red 7 1 blue medium 24 1 blue dark 11 1 green fair 19 1 green red 7 1 green medium 18 1 green dark 14 1 brown fair 34 1 brown red 5 1 brown medium 41 1 brown dark 40 1 brown black 3 2 blue fair 46 2 blue red 21 2 blue medium 44 2 blue dark 40 2 blue black 6 2 green fair 50 2 green red 31 2 green medium 37 2 green dark 23 2 brown fair 56 2 brown red 42 2 brown medium 53 2 brown dark 54 2 brown black 13 ; run; /*************************************/ /* create simple frequency tables */ /*************************************/ proc freq data=color; tables eyes hair; title1 'Simple Frequency Tables'; run; /*************************************/ /* create a crosstabulation table */ /* and an output data set */ /*************************************/ proc freq data=color; weight count; tables eyes*hair/out=freqcnt outexpect sparse; title1 'Crosstabulation Table'; run; /*************************************/ /* print the output data set */ /*************************************/ proc print data=freqcnt noobs; title2 'Output Data Set from PROC FREQ'; run; /*************************************/ /* clear any titles in effect */ /*************************************/ title;
并对每个语句进行注释 。 4.libname sales 'c:\salesdata\sas\2002'; /*************************************/ /* create new data set from raw data */ /*************************************/ data sales.quarter1; length Department $ 7 Site $ 8; input Department Site Quarter Sales; datalines; Parts Sydney 1 4043.97 Parts Atlanta 1 6225.26 Parts Paris 1 3543.97 Repairs Sydney 1 5592.82 Repairs Atlanta 1 9210.21 Repairs Paris 1 8591.98 Tools Sydney 1 1775.74 Tools Atlanta 1 2424.19 Tools Paris 1 5914.25 ; run; /*************************************/ /* print new data set */ /*************************************/ proc print data=sales.quarter1; run; /*************************************/ /* print existing data set */ /*************************************/ proc print data=mylib.productsales;
|