sas系统方差分析程序

sas系统方差分析程序,第1张

在阅读以下内容之前,请先阅读第一章"SAS软件基本 *** 作"。

单因素实验设计又称为完全随机化实验设计。该实验设计要求实验条件或实验环境的同质性很高。例如,比较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 tmp

set 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语句。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/8095556.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-13
下一篇 2023-04-13

发表评论

登录后才能评论

评论列表(0条)

保存