单因素实验设计又称为完全随机化实验设计。该实验设计要求实验条件或实验环境的同质性很高。例如,比较a个作物品种的产量,每一品种设置n个重复,全部实验共有an次。根据完全随机化实验设计的要求,试验田中的an个试验小区的土质、肥力、含水量、小气候、田间管理等条件必须完全一致。至于哪一个品种的哪一次重复安排在哪一个小区,完全是随机的,因此得到了“完全随机化实验设计”这一名称。
例2.9 下面以课本中例8.1的数据为例,给出单因素方差分析的SAS程序。
解:先按以下输入方式建立一个称为a:\2-5data.dat的外部数据文件。
1
64.6
1
65.3
1
64.8
1
66.0
1
65.8
2
64.5
2
65.3
2
64.6
2
63.7
2
63.9
3
67.8
3
66.3
3
67.1
3
66.8
3
68.5
4
71.8
4
72.1
4
70.0
4
69.1
4
71.0
5
69.2
5
68.2
5
69.8
5
68.3
5
67.5
SAS程序如下:
options linesize=76
data wheat
infile ‘a:\2-5data.dat’
input strain hight @@
run
proc anova
class strain
model hight=strain
means strain / duncan
means strain / lsd cldiff
run
在PROC ANOVA过程中的CLASS语句(分类语句)是必须的,而且一定要放在MODEL语句之前。在方差分析中要使用的分类变量(因素),首先要在CLASS语句中说明。分类变量可以是数值型的,也可以是字符型的。MODEL语句用来规定因素对实验结果的效应,一般形式为,因变量=因素效应。本例即为株高=品系效应。
MEANS语句应放在MODEL语句之后,MEANS语句后列出希望得到均值的那些变量。MEANS语句有很多选项,下面列出几个与本教材有关的选项,将选项写在MEANS语句的“/”之后。
DUNCAN: 对MEANS语句列出的所有主效应均值进行DUNCAN检验。
SNK: 对MEANS语句列出的所有主效应均值进行Student-Newman-Keuls检验。
T | LSD: 对MEANS语句列出的所有主效应均值进行两两t检验,它相当于在样本含 量相同时的LSD检验。
ALPHA= 均值间对比检验的显著水平,缺省值是0.05。当用DUNCAN选项时只能取0.01、0.05和0.10,对于其它选项,α可取0.0001到0.9999之间的任何值。
CLDIFF: 在选项T和LSD时,过程将两个均值之差以置信区间的形式输出。
CLM: 在选项T和LSD时,过程把变量的每一水平均值以置信区间的形式输出。
方差分析应具备三个条件,有时这三个条件并不能够得到满足,这时对原始数据就要进行变换,见课本§ 9.7。对原始数据进行变换,只需加上一个赋值语句即可,可参考配对数据t检验的SAS程序。
用下面的程序将excel表格导入到SAS中,proc import out=a1/*a1为表格1,表格2用同样的方法导入*/
datafile=" ### "
dbms=excel 2000 replace
range="a1"
getnames=yes
run
用下面的程序将a2中符合a1条件的数据筛选出来就行了:
proc sql
create table a3 as select 股票代码,收盘价 from a1,a2 where a2.股票代码=a1.股票代码
run
a1为表格1
a2为表格2
a3是结果
data tmpset SASHELP.workers(firstobs=10 obs=15)
if ELECTRIC>260
run
proc printrun
Obs DATEELECTRICMASONRY
1 OCT77 278.6 288.7
2 NOV77 276.2 286.2
3 DEC77 274.6 276.7
4 JAN78 262.1 234.3
输出4条记录。
解法2:
data tmp
set SASHELP.workers(firstobs=10 obs=15)
where ELECTRIC>260
run
proc printrun
Obs DATEELECTRICMASONRY
1 MAY78 278.0 295.5
2 JUN78 289.5 308.3
3 JUL78 296.6 306.9
4 AUG78 305.1 315.3
5 SEP78 307.8 310.6
6 OCT78 308.2 316.3
输出6条记录。
思考:上述两种解法为什么输出不一样?请注意if语句和where语句的区别。
区别:
1. if语句是面向PDV的,对当前PDV中的数据进行判断,满足条件时将其写入到外部数据集;where语句也是面向PDV的,它使用于从外部数据源读数据到PDV之前进行判断,当满足条件时才被写入到PDV。显然一个在写入PDV之前,一个在写入PDV之后,两者是有差异的。
2. 当没有数据集选项firstobs=10 obs=15时,if语句和where语句用法结果相同,但有这两个选项时效果就不同了。有这两个选项,if语句是从原数据集(或数据源)的观测记录进行计算个数,即从原数据集的第10号观测开始读入到PDV中,然后再判断是否满足if条件,若满足则输出到外部数据集,直到原数据集的第15号观测结束。而where语句是在读入到PDV之前就进行判断的,所以这里的firstobs的意思是从使得满足where条件的第10个观测开始,而不是原数据集的第10个观测开始。
综上可知,该题中应使用if语句。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)