当前位置:文档之家› SAS中用到的SQL语法及结构

SAS中用到的SQL语法及结构

SAS中用到的SQL语法及结构
SAS中用到的SQL语法及结构

SAS中的SQL语句完全教程之一:SQL简介与基本查询功能

1 SQL过程步介绍

1.1 SQL过程步可以实现下列功能:

查询SAS数据集、从SAS数据集中生成报表、以不同方式实现数据集合并、创建或删除SAS 数据集、视图、索引等、更新已存在的数据集、使得SAS系统可以使用SQL语句、可以和SAS的数据步进行替换使用。注意,SQL过程步并不是用来代替SAS数据步,也不是一个客户化的报表工具,而是数据处理用到的查询工具。

1.2 SQL过程步的特征

SQL过程步并不需要对每一个查询进行重复、每条语句都是单独处理、不需要print过程步就能打印出查询结果、也不用sort过程步进行排序、不需要run、要quit来结束SQL过程步

1.3 SQL过程步语句

SELECT:查询数据表中的数据

ALTER:增加、删除或修改数据表的列

CREATE:创建一个数据表

DELETE:删除数据表中的列

DESCRIBE:列出数据表的属性

DROP:删除数据表、视图或索引

INSERT:对数据表插入数据

RESET:没用过,不知道什么意思

SELECT:选择列进行打印

UPDATE:对已存在的数据集的列的值进行修改

2 SQL基本查询功能

2.1 SELECT语句基本语法介绍

SELECT object-item <, ...object-item>

FROM from-list

>

>;

这里SELECT:指定被选择的列

FROM:指定被查询的表名

WHERE:子数据集的条件

GROUP BY:将数据集通过group进行分类

HAVING:根据GROUP BY的变量得到数据子集

ORDER BY:对数据集进行排序

2.2 SELECT语句的特征

选择满足条件的数据、数据分组、对数据进行排序、对数据指定格式、一次最多查询32个

表。这里还要提到的就是,在SAS系统中,对于表名和变量名一般不超过32个字符,对于库名,文件引用名,格式等不能超过8个字符

2.3 Validate关键字

Validate关键字只存在于select语句中、可以在不运行查询的情况下测试语句的语法、检查列名是否合法、对于不正确的查询将打印其消息。例:

1 proc sql;

2 validate

3 select Region, Product,Sales

4 from sashelp.shoes

5 where Region = 'Africa';

NOTE: PROC SQL 语句有有效语法。

6 quit;

此外,我们还可以用noexec选项也可以用来进行语法测试。例:

7 proc sql noexec;

8 select Region, Product,Sales

9 from sashelp.shoes

10 where Region = 'Africa';

NOTE: 由于NOEXEC 选项,未执行语句。

11 quit;

这里提示未执行,未提示错误,说明该语句没有语法错误。但是如果加入一个sashelp.shoes 表里没有字段,这里就会出现错误,例:

12 proc sql noexec;

13 select Region, Product,Sales,test

14 from sashelp.shoes

15 where Region = 'Africa';

ERROR: 以下这些列在起作用的表中没有找到: test.

16 quit;

2.4 查询列

我们可以像2.3那样查询指定列,也可以用*来查询所有列。例:

proc sql;

select *

from sashelp.shoes;

quit;

这里我们可以用feedback选项来查看到底我们选择了哪些列:

17 proc sql feedback;

18 select *

19 from sashelp.shoes;

NOTE: Statement transforms to:

select SHOES.Region, SHOES.Product, SHOES.Subsidiary, SHOES.Stores, SHOES.Sales, SHOES.Inventory, SHOES.Returns

from SASHELP.SHOES;

20 quit;

这时,我们可以看到从sashelp.shoes表中选择了8个列

2.5 消除重复值

我们可以用distinct选项来消除重复值。例如,我们要得到没有重复的所有地区的名称:proc sql;

select distinct Region

from sashelp.shoes

quit;

2.6 where子集查询

2.6.1 比较运算符

先列出where语句用到的比较运算符:

LT < 小于

GT > 大于

EQ = 等于

LE <= 小于或等于

GE >= 大于或等于

NE ^= 不等于

例如,我们要查询sales大于100000的所有数据:

proc sql;

select *

from sashelp.shoes

where sales>100000;

quit;

2.6.2 in:只要满足in里的任意一个值,表达式即为真,例如,我们要选择Region在Africa 和Eastern Europe的所有数据:

proc sql;

select *

from sashelp.shoes

where Region in ('Africa','Eastern Europe');

quit;

2.6.3 逻辑运算符

OR | 或

AND & 是

NOT ^ 非

例如,选择Region在Africa和Eastern Europe,且销售额大于100000的所有数据:

proc sql;

select *

from sashelp.shoes

where Region in ('Africa','Eastern Europe') and sales>100000;

quit;

2.6.4 CONTAINS或?:判断某列是否包含指定字符串

例如,选择列Region包含’Afr’的数据:

proc sql;

select *

from sashelp.shoes

where Region ? 'Afr';

quit;

2.6.5 IS NULL或IS MISSING:判断某列数据是否为空

例如,如果找出Region为空的数据:

proc sql;

select *

from sashelp.shoes

where Region is missing;

quit;

注意,这里我们还可以用以下表达式对where语句进行替换。如果region为数值型变量,则可以用region=.,如果region为字符型变量,则可以用region= ‘’进行替换。

2.6.6 Between and:选择某一区间的数据

例如选择sales大于100000,但小于200000的所有数据:

proc sql;

select *

from sashelp.shoes

where sales between 100000 and 200000;

quit;

2.6.7 like:判断是否能匹配某些字符

例如,选择以region以A开头的所有地区

proc sql;

select *

from sashelp.shoes

where Region like 'A%';

quit;

这里注意有两类通配符,‘%’可以通配任意个任意字符,‘_’只能通配一个任意字符

2.6.8 =*:类似匹配

这里由于sashelp.shoes里没有符合要求的数据,所有就用书上的例子说明一下吧:

Where lastname=* ‘smith’,出来的结果可能是:smith,smythe等

2.7 表达式

我们可以通过已有的列进行计算来得到新的列,这时用关键词as来给新的列赋列名,例如:proc sql;

select Region, Product,Sales,Stores,Sales/Stores as salesperstores

from sashelp.shoes

quit;

这时结果就会多一列salesperstores,用来得到该地区该产品每个商店的平均销售量。这里要注意的是,在创建表达式时,我们还可以在SQL里用到SAS中的除LAG和DIFF之外的所有函数。

这里我们还可以用表达式计算出来的结果来进行子集查询,但一定要记住用calculated关键词。例如我们要找出商店平均销售量大于5000的数据:

方法一:

proc sql;

select Region, Product,Sales,Stores,Sales/Stores as salesperstores

from sashelp.shoes

where Sales/Stores>5000;

quit;

方法二:

proc sql;

select Region, Product,Sales,Stores,Sales/Stores as salesperstores

from sashelp.shoes

where calculated salesperstores>5000;

quit;

2.8 查询结果展示

2.8.1 order by数据排序

默认的排序方式是升序,我们可以用DESC关键词来进行降序排列。例如以sales降序排列数据:

proc sql;

select *

from sashelp.shoes

order by Sales DESC;

quit;

这里提示一下,我们可以用任意多列进行排序,包括表达式结果(不用calculated),但最好是选择的列。

2.8.2 LABEL与FORMAT

LABEL:改变输出变量名的内容

FORMAT:改变列的值的输出方式

例如,改变salesperstores的label和format

proc sql;

select Region, Product,Sales,Stores,

Sales/Stores as salesperstores

label='sales per stores'

format=dollar12.2

from sashelp.shoes;

quit;

2.9 处理SQL常用函数

MEAN或AVG:均值

COUNT或N或FREQ:非缺失值个数MAX:最大值

MIN:最小值

NMISS:缺失值个数

STD:标准差

SUM:求和

VAR:方差

2.9.1 求和sum

proc sql;

select Region, Product,Sales,Stores,

sum(Sales,Inventory,Returns) as total

from sashelp.shoes;

quit;

2.9.2 求均值avg

proc sql;

select Region, Product,Sales,Stores,

avg(Sales) as salesavg

from sashelp.shoes;

quit;

2.9.3 分组求均值group by

proc sql;

select Region,

avg(Sales) as salesavg

from sashelp.shoes

group by Region;

quit;

2.9.4 计数count

proc sql;

select Region,count(*) as count

from sashelp.shoes

group by Region;

quit;

2.9.5 HAVING数据子集

proc sql;

select Region,count(*) as count

from sashelp.shoes

group by Region

having count(*)>50;

quit;

其它的就不多作介绍了,多用用就熟悉了

2.10子查询

2.10.1 找出regions平均sales大于全部平均sales的region

proc sql;

select Region,

avg(Sales) as salesavg

from sashelp.shoes

group by Region

having avg(Sales)>

(select avg(Sales) from sashelp.shoes);

quit;

2.10.2 ANY关键词介绍

>ANY(20,30,40) 最终效果:>20

=ANY(20,30,40) 最终效果:=20 or =30 or =40

例如,选择出region为united state的sales小于任意region为africa的sales的数据proc sql;

select Region,Sales

from sashelp.shoes

where Region='United States'

and Sales

(select Sales from sashelp.shoes where Region='Africa');

quit;

这个例子没有多少意义,只是说明一下any的用法

2.10.3 ALL关键词介绍

>ALL (20,30,40) 最终效果:>40

例如,选择出region为united state的sales小于所有region为africa的sales的数据proc sql;

select Region,Sales

from sashelp.shoes

where Region='United States'

and Sales

(select Sales from sashelp.shoes where Region='Africa');

quit;

2.10.4 EXISTS与NOT EXISTS

proc sql;

select *

from sashelp.shoes

where exists

(select * from sashelp.orsales);

quit;

SAS中的SQL语句完全教程之二:数据合并与建表、建视图索引等

1 连接joins分为内连接inner joins和外连接outer joins

内连接:仅返回匹配的数据,最多可以有32个表同时进行内连接

外连接:返回所有匹配的数据和非匹配的数据,一次只能有两个表或视图进行外连接

迪卡尔积:返回表内所有可能的匹配情况。例如表A有10*20的数据,表B有30*40的数据,则两个表的迪卡尔积有(10+30)*(20+40)=40*60的数据

我们先建立两个数据集:

data march;

input flight $3. +5 date date7. +3 depart time5. +2 orig $3.

+3 dest $3. +7 miles +6 boarded +6 capacity;

format date date7. depart time5.;

informat date date7. depart time5.;

cards;

219 01MAR94 9:31 LGA LON 3442 198 250

622 01MAR94 12:19 LGA FRA 3857 207 250

132 01MAR94 15:35 LGA YYZ 366 115 178

271 01MAR94 13:17 LGA PAR 3635 138 250

302 01MAR94 20:22 LGA WAS 229 105 180

114 02MAR94 7:10 LGA LAX 2475 119 210

202 02MAR94 10:43 LGA ORD 740 120 210

219 02MAR94 9:31 LGA LON 3442 147 250

132 02MAR94 15:35 LGA YYZ 366 106 178

202 03MAR94 10:43 LGA ORD 740 118 210

219 03MAR94 9:31 LGA LON 3442 197 250

622 03MAR94 12:19 LGA FRA 3857 180 250

271 03MAR94 13:17 LGA PAR 3635 147 250

202 04MAR94 10:43 LGA ORD 740 148 210

219 04MAR94 9:31 LGA LON 3442 232 250

622 04MAR94 12:19 LGA FRA 3857 137 250

132 04MAR94 15:35 LGA YYZ 366 117 178

271 04MAR94 13:17 LGA PAR 3635 146 250

302 04MAR94 20:22 LGA WAS 229 115 180

114 05MAR94 7:10 LGA LAX 2475 117 210

202 05MAR94 10:43 LGA ORD 740 104 210

219 05MAR94 9:31 LGA LON 3442 160 250

622 05MAR94 12:19 LGA FRA 3857 185 250

132 05MAR94 15:35 LGA YYZ 366 157 178

271 05MAR94 13:17 LGA PAR 3635 177 250

114 06MAR94 7:10 LGA LAX 2475 128 210

202 06MAR94 10:43 LGA ORD 740 115 210

219 06MAR94 9:31 LGA LON 3442 163 250

132 06MAR94 15:35 LGA YYZ 366 150 178

302 06MAR94 20:22 LGA WAS 229 66 180

114 07MAR94 7:10 LGA LAX 2475 160 210

132 07MAR94 15:35 LGA YYZ 366 164 178

271 07MAR94 13:17 LGA PAR 3635 155 250

302 07MAR94 20:22 LGA WAS 229 135 180

;

run;

data delay;

input flight $3. +5 date date7. +2 orig $3. +3 dest $3. +3

delaycat $15. +2 destype $15. +8 delay;

informat date date7.;

format date date7.;

cards;

114 01MAR94 LGA LAX 1-10 Minutes Domestic 8 202 01MAR94 LGA ORD No Delay Domestic -5 622 01MAR94 LGA FRA No Delay International -5 132 01MAR94 LGA YYZ 11+ Minutes International 14 302 01MAR94 LGA WAS No Delay Domestic -2 114 02MAR94 LGA LAX No Delay Domestic 0 202 02MAR94 LGA ORD 1-10 Minutes Domestic 5 219 02MAR94 LGA LON 11+ Minutes International 18 622 02MAR94 LGA FRA No Delay International 0 132 02MAR94 LGA YYZ 1-10 Minutes International 5 271 02MAR94 LGA PAR 1-10 Minutes International 4 302 02MAR94 LGA WAS No Delay Domestic 0 114 03MAR94 LGA LAX No Delay Domestic -1 202 03MAR94 LGA ORD No Delay Domestic -1 219 03MAR94 LGA LON 1-10 Minutes International 4 622 03MAR94 LGA FRA No Delay International -2 132 03MAR94 LGA YYZ 1-10 Minutes International 6 271 03MAR94 LGA PAR 1-10 Minutes International 2 302 03MAR94 LGA WAS 1-10 Minutes Domestic 5 114 05MAR94 LGA LAX No Delay Domestic -2 202 06MAR94 LGA ORD No Delay Domestic -3 219 06MAR94 LGA LON 11+ Minutes International 27 132 06MAR94 LGA YYZ 1-10 Minutes International 7 302 06MAR94 LGA WAS 1-10 Minutes Domestic 1

622 07MAR94 LGA FRA 11+ Minutes International 21 132 07MAR94 LGA YYZ No Delay International -2 271 07MAR94 LGA PAR 1-10 Minutes International 4 302 07MAR94 LGA WAS No Delay Domestic 0 ;

run;

1.1 内连接

proc sql;

create table innerjoins as

select a.*,b.*

from March a,Delay b

where a.flight=b.flight and a.date=b.date;

quit;

1.2 外连接

1.2.1 左连接left join

proc sql;

create table leftjoins as

select *

from March a

left join Delay b

on a.flight=b.flight and a.date=b.date;

quit;

1.2.2 右连接right join

proc sql;

create table rightjoins as

select *

from March a

right join Delay b

on a.flight=b.flight and a.date=b.date;

quit;

1.2.3 全连接full join

proc sql;

create table fulljoins as

select *

from March a

full join Delay b

on a.flight=b.flight and a.date=b.date;

quit;

1.3 迪卡尔积

proc sql;

create table cartesian as

select a.*,b.*

from March a,Delay b;

quit;

这里再大概说明一下内外连接的实现的基本原理:首先生成两个数据表的迪卡尔积,然后再根据where语句来选择符合条件的数据作为输出结果。当然,在实际处理过程中,SQL过程步会对这个迪卡尔积的数据集进行优化,将其划分成小块数据进行处理。

2 复杂的连接

这里因为找不到很好的例子来说明如何处理复杂的连接,因此就不讲解了,大概说一下思路吧:简单地说,对于复杂的查询,我们应该将该查询分解成几个小的子查询,然后对每个子查询的结果进行测试,最后将所有的子查询结合起来就组成了这个复杂的查询。这样会比一来就写复杂的查询容易得多。

3 数据集SET操作

这里有四类SET操作,分别是EXCEPT、INTERSECT、UNION、OUTER UNION。

EXCEPT:得到除第二个数据集以外的所有第一个数据集里的数据

INTERSECT:得到第一个数据集和第二个数据集都有的数据

UNION:得到两个数据集所有的数据,这里如果两个数据集有相同的数据,重复数据只出现一次

OUTER UNION:得到两个数据集所有的数据。

还有两个关键词来修改SET操作的行为:ALL和CORRESPONDING

ALL:并不删除重复值,不能与OUTER UNION合用(注意,用ALL关键词,一种情况是你不管是否会有重复值,另一个情况是不可能出现重复值,例如有主键的数据)CORRESPONDING:只保留两个数据集都有的字段,一般简写为CORR

3.1 EXCEPT

找出所有没有延迟的航班和日期:

proc sql;

select flight,date

from March

except

select flight,date

from Delay;

quit;

注意:这里重复值已经被删除。如果要得到所有的包含重复值的数据,就要用到关键词ALL:proc sql;

select flight,date

from March

except ALL

select flight,date

from Delay;

quit;

如果只保留两个数据集都有的字段,则用到关键词CORRESPONDING(可简写为CORR):proc sql;

select *

from March

except CORR

select *

from Delay;

quit;

3.2 INTERSECT

找出所有延迟的航班和日期:

proc sql;

select flight,date

from March

INTERSECT

select flight,date

from Delay;

quit;

关键词ALL和CORRESPONDING与在EXCEPT中一样,这里不再作介绍

3.3 UNION

选择所有的数据,这里的重复值只出现一次

proc sql;

select flight,date

from March

UNION

select flight,date

from Delay;

quit;

关键词ALL和CORRESPONDING与在EXCEPT中一样,这里不再作介绍

3.4 OUTER UNION

proc sql;

select flight,date

from March

OUTER UNION

select flight,date

from Delay;

quit;

这里,如果我们用到关键词CORR,就可以将相同字段的数据结合到一起:

proc sql;

select *

from March

OUTER UNION CORR

select *

from Delay;

quit;

4 建表

4.1 建空表

4.1.1 通过指定变量建空表

proc sql noprint;

create table percent

(varname char(30),

Industry char(4),

begindate num format date9. label='the beginning date',

enddate num format date9. label='the ending date',

P_1 num,

P_5 num,

P_95 num,

P_99 num);

quit;

4.1.2 拷贝数据集来建空表

proc sql noprint;

create table Delaycopy(keep=flight date)

like Delay;

quit;

4.1.3 查询语句中,用outobs选项来建空表

proc sql noprint outobs=0;

create table flight114 as

select *

from Delay;

quit;

4.2 对数据表增加数据

主要有三种方法:

4.2.1 SET语句

proc sql noprint;

insert into flight114

set flight='302' ,

date='07MAR94'd,

orig='LGA',

dest='WAS',

delaycat='No Delay',

destype='Domestic',

delay=0;

quit;

4.2.2 VALUES语句

proc sql noprint;

insert into flight114

values('271','07MAR94'd,'LGA','PAR','1-10 Minutes','International',4);

quit;

4.2.3 条件查询:建表和导入数据同时完成

proc sql noprint;

create table flight114 as

select *

from Delay

where flight='114';

quit;

5 完整性约束

完整性约束的好处是保证SAS数据集的连续性和正确性,它在我们更新数据或插入新的数据时,验证新的数据是否符合该变量的约束条件。

完整性约束需要8.0以上版本,符合ANSI标准,可以在表建立时或表有数据后建立约束,但不能被用于视图,也不能用于低于8.0版本的SAS系统建立的数据集。

五大类完整性限制:NOT NULL、CHECK、UNIQUE、PRIMARY KEY、FOREIGN KEY。

NOT NULL:不许出现缺失值

CHECK:指定该变量可以输入哪些值

UNIQUE:每个值必须是唯一的,其值可以为空,但只能有一个值为空

PRIMARY KEY:主键,每个值必须是唯一且非空的

FOREIGN KEY:其它表的主键,即外键,其值为关联表的主键的值且非空

5.1 check

例:

proc sql noprint;

create table percent

(varname char(30),

Industry char(4),

begindate num format date9. label='the beginning date',

enddate num format date9. label='the ending date',

percent num,

CONSTRAINT percent _check check

(percent le 1.0));

quit;

这时,如果我们插入的数据中,percent>1的话,将会出现错误。

5.2 回滚ROLLBACKS

当我们用INSERT或UPDATE的时候,操作要等到发生错误的时候才会停止,这时会出现一个问题,就是数据表的一些数据更新了,而另一些数据没更新,这时如果我们要回到原来的状态,就需要用到UNDO_POLICY选项进行回滚。

UNDO_POLICY有三个选项:

REQUIRED:缺省选项,取消所有的更新或新插入的数据。这里要注意的是,此操作不一定完全能成功。

NONE:阻止所有的与约束不符的更新或新数据

OPTOINAL:取消所有可以成功取消的更新或新插入的数据

本功能用得很少,所以只是翻译一下,请大家查阅相关文献。

6 创建视图与索引

6.1 视图

视图最大的好处是它只是一个存储的查询,因此不包含任何数据,这可以减少磁盘的使用空间。其它的功能与数据库的表类似。

创建视图语法:

Create View View-name as

Query-expression_r ;

例:

proc sql noprint outobs=0;

create View delayview as

select *

from Delay;

quit;

6.2 索引

语法:

Create Index index-name

On table-name (column-name,column-name);

视图和索引都用得很少,所以这里就不作讲解了,大家查阅相关文献吧。

7 维护表

这里主要讲一下如何更新或删除已存在的表的数据,如何对一个表增加、减少、或改变其列的属性,如何删除表、视图和索引。

7.1 更新数据

这里主要用update来更新表的数据,语法如下

Update table-name

Set column-name=expression_r,

Set column-name=expression_r,…

Where expression_r;

注意,这里的where一定要写清楚,如果没有的话,则会更新所有的数据。

例:

proc sql noprint;

update delay

set delaycat='Delay'

where delay=0;

quit;

7.2 条件处理

用CASE语句来实现条件处理。例如,对SASHELP.shoes根据sales的大小进行分类:语法:

Sel ect column…

Case

When when-condition then result-expression_r

< When when-condition then result-expression_r>

End;

例:

proc sql;

create table shoesrank as

select *,

(case

when sales>100000 then 'good'

else 'bad'

end) as rank

from sashelp.shoes;

quit;

7.3 删除行

语法:

Delete from table-name

Where expression_r;

例:

proc sql;

Delete from shoesrank

Where Region='Africa';

quit;

7.4 改变列

语法:

Alter Table table-name

Add column-definition,column-definition,…

Drop column-name,column-name,…

Modify column-definition,column-definition,…

对已存在的数据表增加一个列:例:

proc sql;

alter table shoesrank

add addcolumn num format=comma10.2,

addcolumnmore char(10);

quit;

从已存在的数据表中删除列,例:

proc sql;

alter table shoesrank

drop addcolumn;

quit;

修改某列的属性,例:

proc sql;

alter table shoesrank

modify addcolumnmore char(20) label='modify add label';

quit;

7.5 删除表、视图、索引

语法:

Drop Table table-name,table-name,…;

Drop View View-name,View-name,…;

Drop Index index-name,index-name,…;

From table-name;

例:

proc sql;

drop table shoesrank;

quit;

SAS中的SQL语句完全教程之三:SQL过程步的其它特征

1 SQL过程步选项

SQL过程步选项的作用主要是可以从更细节的方式去控制SQL过程步,并且可以在不执行过程的情况下对程序进行测试等。

下面介绍一下列出来的选项,这些选项大多经常用到,更多的选项可以参考SAS帮助。INOBS:进行一个查询时,对每个源数据表进行N行限制,仅对这N行的数据进行查询。OUTOBS:指定查询输出结果的观测数

LOOPS:指定SQL过程步内循环的次数(此选项我用得比较少,谁明白的可以讲一下,多谢)NOPROMPT和PROMPT:修改上述三个选项的效果,从而让你选择是否继续或停止选项的效果。

PRINT和NOPRINT:控制是否打印选择的数据结果

NONUMBER和NUMBER:控制是否在第一列打印观测值编号

DOUBLE和NOBOUBLE:输入报表是否隔行显示

NOFLOW和FLOW和FLOW=n和FLOW=n m :指定列宽,n指定列宽,m指定行宽???

1.1 double选项

proc sql double;

select flight,date

from March

UNION

select flight,date

from Delay;

quit;

1.2 inobs选项

注意:这里inobs选项只读取每个源表前10条数据进行后续的操作,如下面的日志所示。两个表都只读取10条数据进行关联,最后得到7条关联好的数据。

237 proc sql inobs=10;

238 create table tmp as

239 select a.*,b.*

240 from March a,Delay b

241 where a.flight=b.flight and a.date=b.date;

WARNING: 变量“flight”已经存在于文件WORK.TMP 中。

WARNING: 变量“date”已经存在于文件WORK.TMP 中。

WARNING: 变量“orig”已经存在于文件WORK.TMP 中。

WARNING: 变量“dest”已经存在于文件WORK.TMP 中。

WARNING: Only 10 records were read from WORK.DELAY (别名=B)由于INOBS= 选项。WARNING: Only 10 records were read from WORK.MARCH (别名=A)由于INOBS= 选项。NOTE: 表WORK.TMP 创建完成,有7 行,11 列。

1.3 outobs选项

这个选项的功能与inobs相似,不同的是,这个选项指定结果的观测值数量,而不是读取源表的数量,这在我们控制输出结果的数据量时非常有用。

243 proc sql outobs=10;

244 create table tmp1 as

245 select a.*,b.*

246 from March a,Delay b

247 where a.flight=b.flight and a.date=b.date;

WARNING: 变量“flight”已经存在于文件WORK.TMP1 中。

WARNING: 变量“date”已经存在于文件WORK.TMP1 中。

WARNING: 变量“orig”已经存在于文件WORK.TMP1 中。

WARNING: 变量“dest”已经存在于文件WORK.TMP1 中。

WARNING: 语句由于OUTOBS=10 选项而过早终止。

NOTE: 表WORK.TMP1 创建完成,有10 行,11 列。

1.4 prompt选项

这里prompt选项,可以让你选择是否还是按照原来的设置进行动作,或者继续操作。如下面的日志所以,如果直接选择停止,则得到1.2的结果,如果一直按继续,则得到如下结果:

255 proc sql inobs=10 prompt;

256 create table tmp3 as

257 select a.*,b.*

258 from March a,Delay b

259 where a.flight=b.flight and a.date=b.date;

WARNING: 变量“flight”已经存在于文件WORK.TMP3 中。

WARNING: 变量“date”已经存在于文件WORK.TMP3 中。

WARNING: 变量“orig”已经存在于文件WORK.TMP3 中。

WARNING: 变量“dest”已经存在于文件WORK.TMP3 中。

NOTE: 表WORK.TMP3 创建完成,有19 行,11 列。

1.5 number选项

proc sql outobs=4 number;

select * from March;

quit;

1.6 reset选项

对上述SQL语句加上reset选项,使其不输出序号

proc sql outobs=4 number;

reset nonumber;

select * from March;

quit;

2 DICTIONARY

2.1 DICTIONARY介绍

DICTIONARY可以得到很多SAS文件和会话等很多的元数据,包括SAS文件,外部文件,系统选项、宏、标题、脚注等。

DICTIONARY是在初始化时就创建,自动更新,并只允许读取操作,故不能修改。

下面列举一下SAS中DICTIONARY所包含的表:

SAS V8 DICTIONARY所包含的表:

CATALOGS:SAS目录的信息

COLUMNS:SAS变量和列的信息

EXTFILES:外部数据信息

INDEXES:参与索引的列的信息

MACROS:宏相关信息

MEMBERS:所有数据类型(表、视图、目录等)的信息

OPTIONS:当前会话选项

STYLES:ODS的样式信息

TABLES:表和数据集信息

TITLES:标题和脚注信息

VIEWS:视图信息

SAS V9 DICTIONARY所包含的新的表:

CHECK_CONSTRAINTS:CHECK约束信息

CONSTRAINT_COLUMN_USAGE:约束列使用信息

CONSTRAINT_TABLE_USAGE:约束表使用

DICTIONARIES:DICTIONARY所有表及其列

ENGINES:可用的引擎

FORMATS:可用的格式

GOPTIONS:SAS/GRAPH选项

LIBNAMES:LIBNAME信息

REFERENTIAL_CONSTRAINTS:相关约束

REMEMBER:已记录的信息

TABLE_CONSTRAINTS:表约束

2.2 查看2.1中各表内容

查看各表的结构,以查看dictionary.tables为例:

proc sql;

describe table dictionary.tables;

quit;

这里可以从日志里看到表dictionary.tables的结构。

要查看这个表的数据,可以通过以下语句实现,这里我们只输出前10条数据proc sql outobs=10;

select * from dictionary.tables;

quit;

2.3 使用DICTIONARY的信息

查看SASHELP库里的文件信息:

proc sql;

options nolabel nocenter;

select memname,nobs,nvar,crdate

from dictionary.tables

where libname='SASHELP';

quit;

注意,这里的库名都是大写。

查看SASHELP库里有列名为tabname的所有表:

proc sql;

options nolabel nocenter;

select memname

from dictionary.columns

SAS上机练习题(二)参考答案

6$6? ?д乬??? ?1乬 data a; input x@@; cards; 142.3 148.8 142.7 144.4 144.7 145.1 143.3 154.2 152.3 142.7 156.6 137.9 143.9 141.2 139.3 145.8 142.2 137.9 141.2 150.6 142.7 151.3 142.4 141.5 141.9 147.9 125.8 139.9 148.9 154.9 145.7 140.8 139.6 148.8 147.8 146.7 132.7 149.7 154.0 158.2 138.2 149.8 151.1 140.1 140.5 143.4 152.9 147.5 147.7 162.6 141.6 143.6 144.0 150.6 138.9 150.8 147.9 136.9 146.5 130.6 142.5 149.0 145.4 139.5 148.9 144.5 141.8 148.1 145.4 134.6 130.5 145.2 146.2 146.4 142.4 137.1 141.4 144.0 129.4 142.8 132.1 141.8 143.3 143.8 134.7 147.1 140.9 137.4 142.5 146.6 135.5 146.8 156.3 150.0 147.3 142.9 141.4 134.7 138.5 146.6 134.5 135.1 141.9 142.1 138.1 134.9 146.7 138.5 139.6 139.2 148.8 150.3 140.7 143.5 140.2 143.6 138.7 138.9 143.5 139.9 134.4 133.1 145.9 139.2 137.4 142.3 160.9 137.7 142.9 126.8 ; proc means data=a n mean median clm qrange std cv stderr maxdec=2; var x; proc univariate data=a normal; histogram x; var x; run; ??? The MEANS Procedure Analysis Variable : x N Mean Median Lower 95% CL for Mean Upper 95% CL for Mean Quartile Range Std Dev Coeff of Variation Std Error ? Ё? 95% ??? 95% ??? ? ? ? ? ? 130 143.22142.75142.10144.337.80 6.43 4.490.56

SAS上机练习题(全部,含参考答案)

重庆医科大学--卫生统计学统计软件包 SAS上机练习题(一) 1、SAS常用的窗口有哪三个?请在三个基本窗口之间切换并记住这些命令或功能键。 2、请在PGM窗口中输入如下几行程序,提交系统执行,并查看OUTPUT窗和LOG窗中内容,注意不同颜色的含义;并根据日志窗中的信息修改完善程序。 3、将第2题的程序、结果及日志保存到磁盘。 4、试根据如下例1的程序完成后面的问题: 表1 某班16名学生3门功课成绩表如下 问题: 1)建立数据集; 2)打印至少有1门功课不及格同学的信息;(提示,使用if语句) 参考程序: data a; input id sh wl bl; cards; 083 68 71 65 084 74 61 68

085 73 75 46 086 79 80 79 087 75 71 68 084 85 85 87 085 78 79 75 086 80 76 79 087 85 80 82 088 77 71 75 089 67 73 71 080 75 81 70 118 70 54 75 083 70 66 84 084 62 73 65 099 82 70 79 ; run; data b; set a; if sh<60 or wl<60 or bl<60then output; run; proc print data=b; var id sh wl bl;

run; 5、根据下列数据建立数据集 表2 销售数据 开始时间终止时间费用 2005/04/28 25MAY2009 $123,345,000 2005 09 18 05OCT2009 $33,234,500 2007/08/12 22SEP2009 $345,600 20040508 30JUN2009 $432,334,500 提示:(格式化输入;数据之间以空格分隔,数据对齐;注意格式后面的长度应以前一个位置结束开始计算,如果读入错误,可试着调整格式的宽度;显示日期需要使用输出格式) 开始时间,输入格式yymmdd10. 终止时间,输入格式date10. 费用,输入格式dollar12. 参考程序: data a; input x1 yymmdd10. x2 date10. x3 dollar13.; cards; 2005/04/28 25MAY2009 $123,345,000 2005 09 18 05OCT2009 $33,234,500 2007/08/12 22SEP2009 $345,600

SAS上机实习-8页文档资料

中科院研究生院统计分析与SAS实现第1次上机实习题 一、定量资料上机实习题 要求: (1)先判断定量资料所对应的实验设计类型; (2)假定资料满足参数检验的前提条件,请选用相应设计的定量资料的方差分析,并用SAS软件实现统计计算; (3)摘录主要计算结果并合理解释,给出统计学结论和专业结论。 【练习1】取4窝不同种系未成年的大白鼠,每窝3只,随机分配到三个实验组中,分别注射不同剂量雌激素,经过一定时间后处死大白鼠测子宫重量,资料见表1。问剂量和窝别的各自水平下子宫重量之间的差别有无统计学意义?若剂量间差别有统计学意义,请作两两比较。 表1 未成年大白鼠注射不同剂量雌激素后的子宫重量 子宫重量(g) 窝别 剂量(μg/100g):0.2 0.4 0.8 合计 1 106 116 145 367 2 42 68 115 225 3 70 111 133 314 4 42 63 87 192 合计260 358 480 1098 定量资料的随机区组设计(区组因素:窝别;实验因素:剂量)【SAS程序】: DATA PGM15G; DO A=1TO4; /*A为窝别*/ DO B=1TO3; /*B为雌激素剂量*/ INPUT X @@; /*X为子宫重量*/ OUTPUT; END; END; CARDS; 106 116 145 42 68 115 70 111 133 42 63 87 RUN; ods html; /*将结果输出成网页格式,SAS9.0以后版本可用*/ PROC GLM DATA=PGM15G; CLASS A B; MODEL X=A B / SS3; MEANS A B; /*给出因素A、B各水平下的均值和标准差*/ MEANS B / SNK; /*对因素B(即剂量)各水平下的均值进行两两比较*/ RUN; ODS HTML CLOSE; 【练习2】一位工程师研究由钻头压力产生的冲力。考察了A(钻孔速度)和B(进料

统计实验与SAS上机简易过程步

数据统计分析一般可遵循以下思路: (1)先确定研究目的,根据研究目的选择方法。不同研究目的采用的统计方法不同,常见的研究目的主要有三类:①差异性研究,即比较组间均数、率等的差异,可用的方法有t检验、方差分析、χ2检验、非参数检验等。②相关性分析,即分析两个或多个变量之间的关系,可用的方法有相关分析。③影响性分析,即分析某一结局发生的影响因素,可用的方法有线性回归、logistic回归、Cox 回归等。 (2)明确数据类型,根据数据类型进一步确定方法:①定量资料可用的方法有t检验、方差分析、非参数检验、线性相关、线性回归等。②分类资料可用的方法有χ2检验、对数线性模型、logistic回归等。下图简要列出了不同研究目的、不同数据类型常用的统计分析方法。 (3)选定统计方法后,需要利用统计软件具体实现统计分析过程。SAS中,不同的统计方法对应不同的命令,只要方法选定,便可通过对应的命令辅之以相应的选项实现统计结果的输出。 (4)统计结果的输出并非数据分析的完成。一般统计软件都会输出很多结果,需要从中选择自己需要的部分,并做出统计学结论。但统计学结论不同于专业结论,最终还需要结合实际做出合理的专业结论。 第一部分:统计描述

1.定量资料的统计描述指标及SAS实现; (1)数据分布检验:PROC UNIVARIATE ①基本格式: ②语句格式示例: 1.PROC UNIVARIATE normal;/*normal选项表示进行正态性检验*/ 2.CLASS group;/*指定group为分组变量*/ 3.VAR weight;/*指定分析变量为weight*/ 4.RUN; ③结果:正态性检验(tests for normality)结果,常用的是Shapiro-Wilk 检验和Kolmogorov-Smirnov检验。当例数小于2000时,采用Shapiro-Wilk检验W值为标准;当例数大于2000时,SAS中不显示Shapiro-Wilk检验结果,采用Kolmogorov-Smirnov检验D值为判断标准。正态性检验的P≤0.05提示不服从正态分布,P>0.05提示服从正态分布。 注:若服从正态分布,进行PROC MEANS过程步;若不服从则计算百分位数,转(3) (2)数据描述(符合正态分布的数据):PROC MEANS ①基本格式: 关键字(可以无视):不写任何关键字时默认输出n,mean,std,max,min; n:有效数据记录数(有效样本量) median:中位数 mean:均数 qrange:四分位数间距 std:标准差 var:方差 clm:95%可信区间 max、min:最大、最小值 ②语句格式示例: 1.PROC MEANS n mean std median qrange clm;/*关调用proc means过程, 要求输出的指标有例数、均值、标准差、中位数、四分位数间距、95% 可信区间*/ 2.CLASS group;/*指定group为分组变量*/ 3.VAR weight;/*指定分析变量为weight*/ 4.Run; ③结果以“均数±标准差”表示 (3)偏正态分布的统计描述: ①基本思想:计算中位数和百分位数,并且用“中位数(Q1~Q3)”表示 ②语句格式示例: 1.proc univariate data=aa; 2.var x; 3.output out=c pctlpre=P pctlpts=0 to 100 by 2.5;/*计算0到100

SAS上机练习题(全部-含参考答案).docx

重庆医科大学“卫生统计学统计软件包 SAS上机练习题(一) 1、SAS常用的窗口有哪三个?请在三个基本窗口之间切换并记住这些命令或功能键。 2、请在PGM窗口中输入如下几行程序,提交系统执行,并查看OUTPUT窗和LOG窗中内容,注意不同颜色的含义;并根据口志窗屮的信息修改完善程序。 DATS EXO 101; INPUTT NAME $ AGE SEX; CARDS; XIAOMIN 19 1 LIDONG 20 1 NANA 18 2 PROD PRONT DATS=EX1; RUN; PROC PRINT DATA=EX 1; VAR NAME AGE; RUN; 3、将第2题的程序、结果及tl志保存到磁盘。 4、试根据如下例1的程序完成后面的问题: 表1某班16名学生3门功课成绩表如下 问题: 1)建立数据集; 2)打印至少有1门功课不及格同学的信息;(提示,使用if语句) 参考程序: data a; input id sh wl bl; cards; 083 68 71 65 084 74 61 68 085 73 75 46 086 79 80 79 087 75 71 68 084 85 85 87 085 78 79 75 086 80 76 79 087 85 80 82 088 77 71 75 089 67 73 71 080 75 81 70 118 70 54 75 083 70 66 84 084 62 73 65 099 82 70 79 run; data b; set a;

if sh<60 or wl<60 or bl<60 then output; run; proc print data=b; var id sh wl bl; run; 5、根据下列数据建立数据集 表2销售数据 提示:(格式化输入;数据之间以空格分隔,数据对齐;注意格式后面的长度应以前一个位置结朿开始计算,如果读入错误,可试着调整格式的宽度;显示日期需要使用输出格式) 开始时间,输入格式yymmddlO. 终止时间,输入格式血tel0. 费用,输入格式dollar 12.

SAS上机练习题(全部_含参考问题详解)

医科大学--卫生统计学统计软件包 SAS上机练习题(一) 1、SAS常用的窗口有哪三个?请在三个基本窗口之间切换并记住这些命令或功能键。 2、请在PGM窗口中输入如下几行程序,提交系统执行,并查看OUTPUT窗和LOG窗中容,注意不同颜色的含义;并根据日志窗中的信息修改完善程序。 3、将第2题的程序、结果及日志保存到磁盘。 4、试根据如下例1的程序完成后面的问题: 表1 某班16名学生3门功课成绩表如下 问题: 1)建立数据集; 2)打印至少有1门功课不及格同学的信息;(提示,使用if语句) 参考程序: data a; input id sh wl bl; cards; 083 68 71 65 084 74 61 68 085 73 75 46 086 79 80 79 087 75 71 68 084 85 85 87 085 78 79 75 086 80 76 79

087 85 80 82 088 77 71 75 089 67 73 71 080 75 81 70 118 70 54 75 083 70 66 84 084 62 73 65 099 82 70 79 ; run; data b; set a; if sh<60 or wl<60 or bl<60then output; run; proc print data=b; var id sh wl bl; run; 5、根据下列数据建立数据集 表2 销售数据 开始时间终止时间费用 2005/04/28 25MAY2009 $123,345,000 2005 09 18 05OCT2009 $33,234,500 2007/08/12 22SEP2009 $345,600 20040508 30JUN2009 $432,334,500 提示:(格式化输入;数据之间以空格分隔,数据对齐;注意格式后面的长度应以前一个位置结束开始计算,如果读入错误,可试着调整格式的宽度;显示日期需要使用输出格式) 开始时间,输入格式yymmdd10. 终止时间,输入格式date10. 费用,输入格式dollar12. 参考程序:

SAS上机实习考试

1、为比较两种方法对乳酸饮料中脂肪含量测定结果是否不同,某人随机抽取了10份乳酸饮料制品,分别用脂肪酸水解法和哥特里-罗紫法测定其结果如表3-3第(1)~(3)栏。问两法测定结果是否不同? 表两种方法对乳酸饮料中脂肪含量的测定结果(%) 编号(1) 哥特里-罗紫法 (2) 脂肪酸水解法 (3) 1 0.840 0.580 2 0.591 0.509 3 0.67 4 0.500 4 0.632 0.316 5 0.687 0.337 6 0.978 0.517 7 0.750 0.454 8 0.730 0.512 9 1.200 0.997 10 0.870 0.506 2、为研究国产四类新药阿卡波糖胶囊的降血糖效果,某医院用20名II型糖尿病病人进行同期随机对照试验。试验者将这些病人随机等分到试验组(用阿卡波糖胶囊)和对照组(用拜唐苹胶囊),分别测得试验开始前和8周后的空腹血糖,算得空腹血糖下降值见表3-4,能否认为该国产四类新药阿卡波糖胶囊与拜唐苹胶囊对空腹血糖的降糖效果不同? 表3-4 试验组和对照组空腹血糖下降值(mmol/L) 试验组 (n1=10) -0.70 -5.60 2.00 2.80 0.70 3.50 4.00 5.80 7.10 -0.50 对照组 (n2=10) 3.70 6.50 5.00 5.20 0.80 0.20 0.60 3.40 6.60 -1.10 3. 两组肿瘤患者,单纯放疗组(A)13 例,口服平消胶囊+放疗组(B)12 例,接受放疗前后,血清Sil-2R水平(U/ml)如表所示。试评价平消胶囊对接受放疗患者血清Sil-2R水平的影响? 两组肿瘤患者的血清Sil-2R水平

SAS课程上机练习一

SAS课程上机练习一 下面的数据是一次对20岁以上人群进行心血管病随访研究的结果,数据中各变量的含义如下: V1—随访号V2—年龄V3—开始随访时的求诊机构V4/V5—开始随访时的收缩压/舒张压V6/V7—体重/身高V8—开始随访时的胆固醇V9—社会经济地位(1-高2-中3-底)V10—原有心血管病(0-其他心脏病1-冠心病2-冠心与高心3-高心4-高心及风心5-风心6-可疑心脏病7-高血压8-正常)V11—随访结束时的求诊机构V12/V13—随访结束时的收缩压/舒张压V14—随访结束时的胆固醇V15—随访结束时的体重V16—随访结束时的最后诊断(0-未诊断1-3心肌梗塞4-7心绞痛8-9其他)V17—死亡年份(63-68)0-未死。 一、数据集练习操作 1、用data步建立SAS永久数据集(下次练习可以调用此数据集) 2、将年龄(V2)按20—30—40—50—及60岁以上分组 3、计算体重指数={体重/身高2}*100 4、将随访结束时最后诊断的结果(V16)分为四组:(1)心肌梗塞(2) 心绞痛(3)其他心脏 病(4)未诊断 5、按体重指数的大小( 0.30)分为二类:1-超重0-未超重 6、将死亡年份(V17)按是否死亡分为二类(1为死亡,0为未死亡)。 7、将原有心血管病(V10)分为患有心血管病与不患有心血管病二类(1有0无) 8、将数据集按是否死亡分为二个数据集。 9、将社会经济地位(V9)设置为哑变量。 10、计算开始随访时的收缩压与/舒张压(V4/V5)之差。 二.。计算分析 1.年龄分布的特征。 2.开始时收缩压频数分布的特征。 3·超重病人开始时胆固醇(V8)的分布的特征。 3·比较不同体重的人开始时的收缩压。 4·比较不同社会经济地位与患心血管病的差别。 5·比较心肌梗塞的病人开始时的收缩压与随访结束时的收缩压的差别。 6·比较不同年龄、不同体重(指数)间开始时的胆固醇的差别。 7·试分析年龄与血压(V4)之间的关系。 9、比较不同社会经济地位开始随访是收缩压的差别。 三、结果存盘 1.要求将你编辑好的SAS程序保存。 2.要求将所有的计算结果(OUTPUT)保存.。 3.文件名的格式为:你的姓名+你的学号 例如:王永,学号为20918003,则你存盘的文件名为:王永208918003

SAS上机练习题(全部-含参考标准答案)

SAS上机练习题(全部-含参考答案)

————————————————————————————————作者:————————————————————————————————日期:

重庆医科大学--卫生统计学统计软件包 SAS上机练习题(一) 1、SAS常用的窗口有哪三个?请在三个基本窗口之间切换并记住这些命令或功能键。 2、请在PGM窗口中输入如下几行程序,提交系统执行,并查看OUTPUT窗和LOG窗中内容,注意不同颜色的含义;并根据日志窗中的信息修改完善程序。 DATS EX0101; INPUTT NAME $ AGE SEX; CARDS; XIAOMIN 19 1 LIDONG 20 1 NANA 18 2 ; PROD PRONT DATS=EX1; RUN; PROC PRINT DATA=EX1; V AR NAME AGE; RUN; 3、将第2题的程序、结果及日志保存到磁盘。 4、试根据如下例1的程序完成后面的问题: 表1 某班16名学生3门功课成绩表如下 问题: 1)建立数据集; 2)打印至少有1门功课不及格同学的信息;(提示,使用if语句) 参考程序: data a; input id sh wl bl; cards; 083 68 71 65 084 74 61 68 085 73 75 46 086 79 80 79 087 75 71 68 084 85 85 87

085 78 79 75 086 80 76 79 087 85 80 82 088 77 71 75 089 67 73 71 080 75 81 70 118 70 54 75 083 70 66 84 084 62 73 65 099 82 70 79 ; run; data b; set a; if sh<60 or wl<60 or bl<60then output; run; proc print data=b; var id sh wl bl; run; 5、根据下列数据建立数据集 表2销售数据 开始时间终止时间费用 2005/04/28 25MAY2009 $123,345,000 2005 09 18 05OCT2009 $33,234,500 2007/08/12 22SEP2009 $345,600 20040508 30JUN2009 $432,334,500 提示:(格式化输入;数据之间以空格分隔,数据对齐;注意格式后面的长度应以前一个位置结束开始计算,如果读入错误,可试着调整格式的宽度;显示日期需要使用输出格式) 开始时间,输入格式yymmdd10. 终止时间,输入格式date10. 费用,输入格式dollar12.

SAS上机实验

实验内容 1试用产生标准正态分布的随机数normal(seed)产生参数为10的卡方分布随机数100个。 2根据数据集: (1)创建一个仅包含地区、销售的产品类型、销售数量和销售额的数据集。 (2)分别创建一个仅包含产品类型a100和产品类型a200和SAS数据集。 (3)选择一个人口在50000以上的部分子集。 3 以下数据来自7位同学的高考语文、数学和英语成绩,试用编程的方法计算出平均成绩在75以上的男同学的人数。 实验步骤: 实验1: data a (drop=i) ; do i=1to100by1; z=normal(0)**2+normal(0)**2+normal(0)**2+normal(0)**2+normal(0)**2+no rmal(0)**2+normal(0)**2+normal(0)**2+normal(0)**2+normal(0)**2; output; end; 结果如下: 实验2: (1) data biao1;

input region$ product$ quantity price; cards; es a100 150 3750 so a100 410 10250 es a100 350 8750 so a100 710 17750 es a100 750 18750 so a100 760 19000 es a100 150 3000 so a100 410 8200 es a100 350 7000 so a100 710 14200 es a100 750 15000 so a100 760 152000 es a200 165 4125 so a200 425 10425 es a200 365 9125 ne a100 200 5000 we a100 180 4500 ne a100 600 15000 we a100 780 19500 ne a100 800 20000 we a100 880 22000 ne a100 200 4000 we a100 180 3600 ne a100 600 12000 we a100 780 15600 ne a100 800 16000 we a100 880 17600 ne a200 215 5375 we a200 195 4875 ne a200 615 15375 ; 实验结果:

0九研究生SAS软件上机试卷(1)

09硕/博士研究生课程《医学统计软件应用》上机试卷 (春学期) 一·内容 有一个名为:Hypertension的SAS数据文件,文件中的数据来自于杭州市某社区居民家庭健康档案一份2000例的随机样本,数据中各变量的含义如下: V1 地区编号:①城镇②农村 V2性别①男②女 V3 年龄(岁) V4文化程度 1.文盲或半文盲2小学 3.初中 4.中专或高中 5.大专6大学或以上 V5职业 1.专业技术人员(医生、教师等) 2.行政管理、文职人员 3.轻体力劳动工人(服务行业、钳工、检验工等) 4.重体力劳动工人(搬运工、建筑工等) 5.在校学生 6. 家务 V6你的家人是否有高血压①父母双方均有②父一方有③母一方有④父母双方均没有⑤不详 V7你的家人是否有糖尿病①父母双方均有②父一方有③母一方有④父母双方均没有⑤不详 V8你的家人是否有其他疾病①肿瘤②冠心病③脑卒中④高血脂 V9. 吸烟①是②否③已戒 V10.饮酒①是②不饮③已戒酒 V11..饮茶①是②偶尔③不饮 V12.锻炼你是否经常参加体育运动(包括散步.太极拳.跑步游泳跳舞等运动持续半小时以上为1次) ①每天参加②每周3次以上③每周1-2次 ④每月1-2次⑤不参加 V13饮食习惯①以荤食为主②以素食为主③荤素各半 V14吃.腌、霉食品①经常吃(每周3次以上) ②偶尔吃③不吃 V15食物口味咸淡程度①偏咸②偏淡③一般 V16甜食①.经常吃(每周3次以上) ②偶尔吃③不吃 V17工作压力①大②一般③没压力 V18 5年内家庭重大事件(亲属病故.伤亡.离异)①有②无 V19 身高(厘米)V20—体重(公斤)V21—腰围(厘米)V22—臀围(厘米) V23是否服降压药①是②否 V24—收缩压(mmHg) V25—舒张压(mmHg)

最新SAS上机实习

S A S上机实习

中科院研究生院统计分析与SAS实现第1次上机实习题 一、定量资料上机实习题 要求: (1)先判断定量资料所对应的实验设计类型; (2)假定资料满足参数检验的前提条件,请选用相应设计的定量资料的方差分析,并用SAS软件实现统计计算; (3)摘录主要计算结果并合理解释,给出统计学结论和专业结论。 【练习1】取4窝不同种系未成年的大白鼠,每窝3只,随机分配到三个实验组中,分别注射不同剂量雌激素,经过一定时间后处死大白鼠测子宫重量,资料见表1。问剂量和窝别的各自水平下子宫重量之间的差别有无统计学意义?若剂量间差别有统计学意义,请作两两比较。 表1 未成年大白鼠注射不同剂量雌激素后的子宫重量 窝别 子宫重量(g) 剂量(μg/100g):0.2 0.4 0.8 合计 1 106 116 145 367 2 42 68 115 225 3 70 111 133 314 4 42 63 87 192 合计260 358 480 1098 定量资料的随机区组设计(区组因素:窝别;实验因素:剂量)【SAS程序】: DATA PGM15G; DO A=1TO4; /*A为窝别*/ DO B=1TO3; /*B为雌激素剂量*/ INPUT X @@; /*X为子宫重量*/ OUTPUT; END; END; CARDS; 106 116 145 42 68 115 70 111 133 42 63 87 ; RUN; ods html; /*将结果输出成网页格式,SAS9.0以后版本可用*/ PROC GLM DATA=PGM15G; CLASS A B; MODEL X=A B / SS3;

上机练习题

上机练习题 1.括弧匹配检验work1.pas 假设表达式中允许包含两种括号:圆括号和方括号,其嵌套的顺序随意,如([]())或[([][])]等为正确的匹配,[(])或([]()或( ( ) ) )均为错误的匹配。 现在的问题是,要求检验一个给定表达式中的括弧是否正确匹配? 输入一个只包含圆括号和方括号的字符串,判断字符串中的括号是否匹配,匹配就输出“OK”,不匹配就输出“Wrong”。 输入一个字符串: [([][])] 输出: OK 【输入】 输入仅一行字符(字符个数小于255) 【输出】 匹配就输出“OK”,不匹配就输出“Wrong”。 【样例】 输入(work1.in) [(]) 输出(work1.out) Wrong 2.自然数的拆分work2.pas 任何一个大于1的自然数总可以拆分成若干个自然数之和。 1:4=1+1+1+1 2:4=1+1+2 3:4=1+3 4:4=2+2 5:4=4 分析:设拆分出的数s1≤s2≤…≤sk。定义数组s为一个栈,用来存放因子。从1开始搜索因子,求和,若sum ≤n就将因子压栈;若sum =n,则输出解,出栈;若sum >n,则修改栈顶元素的值,即回溯。 【输入】 输入仅一行,包含一个自然数n。 【输出】 这个自然数拆分结果。拆分出的因子要求满足s1+s2+…+sk=n 且s1≤s2≤…≤sk。具体要求见样例。 【样例】 输入(work2.in) 4 输出(work2.out)

1:4=1+1+1+1 2:4=1+1+2 3:4=1+3 4:4=2+2 5:4=4 3.糟糕的头发 work3.pas 农夫约翰有N (1 <= N <= 80,000)头奶牛,自从奶牛们独自照看自己的头发开始,它们的发型变得越来越糟糕。约翰决定统计奶牛们所能看到其他奶牛的头顶的数目总和。 第i头奶牛加上她头发的高度为h[i] (1 <= h[i] <= 1,000,000,000),奶牛们站成一排面向东方(见图1),所以,从第i头奶牛的发尖看过去,她能看见前面所有比她矮的奶牛头顶(这些可能的奶牛依次为i+1,i+2,……)。 例如 = = = = - = 奶牛面向右 --> = = = = - = = = = = = = = = 1 2 3 4 5 6 Cow#1 可以看到的奶牛编号为#2, 3, 4 Cow#2 什么也看不到 Cow#3 可以看到的奶牛编号为#4 Cow#4 什么也看不到 Cow#5 可以看到的奶牛编号为#6 Cow#6 什么也看不到 约翰用c[i] 表示每头奶牛能看到的奶牛数量,请你帮约翰统计所有c[i](1 <= i <= N)的总和。上面例子的统计结果就是:3 + 0 + 1 + 0 + 1 + 0 = 5 时间限制:0.5 seconds 【输入】 输入的第一行为一个单独的整数n表示奶牛的数目,以下i+1行中n个整数分别代表第i头羊的高度。 【输出】只需一行,c[1]~c[n]的和。 【样例】 输入(work3.in) 6 10 3 7 4 12 2 输出(work3.out) 5

new_SAS课程上机练习四

SAS课程上机练习四 1、用两种化疗方法治疗淋巴系统肿瘤,其疗效如下表。检验两种化疗方法的缓解率 有否差别? 两种化疗方法的缓解率比较 治疗方法缓解未缓解合计缓解率(%) 单纯化疗组 2 10 12 16.7 复合化疗组14 13 27 51.9 合计16 23 39 2.用两种方法检查110例肺结核患者,结果如下表,问用两种方法检查的结果有无差别? 110例肺结核患者分别用两种方法检查结果 甲法乙法合计 + — + 50 28 78 —12 20 32 合计62 48 110 3、某市中心血站采集血清标本673例,检出乙肝核心抗体55例,其血型分布如下 表。问不同血型的乙肝核心抗体阳性率有否差别? 乙肝核心抗体的阳性率与血型关系 血型检测数乙肝核心抗体阳性数阳性率(%) A 221 13 5.88 B 169 16 9.47 O 235 23 9.79 AB 48 3 6.25 合计673 55 8.17 4、为了解年龄与总胆固醇之间的数量关系,随机抽查了20名高血脂病人治疗前的总胆固醇水平(mmol/L)与年龄,测定值见表9.1。试求胆固醇对年龄的直线回归方程和相关系数。

5、某医院用中药结合化疗(中药组)和化疗(对照组)两种疗法治疗18例白血病患者,最初的缓解期(天)如下,试绘制两组的缓解率曲线并作比较。 中药组:10,13+,26,32,89,169+,198+,205+,220,254+ 对照组:4,12,20+,32,45,69,103,254+ (注:有+号的数据为截尾值) 6、某疾控中心对该地2496名55岁以下男性做了一次吸烟和喝咖啡对心肌梗死影响的病例对照研究,调查结果见下表。 吸烟及喝咖啡与心肌梗死关系调查结果 喝咖啡(杯/天) 吸烟(支/天) 0 1-20 21-35 35以上 病例对照病例对照病例对照病例对照 0 66 123 30 52 15 12 36 13 1-2 141 179 59 45 53 22 69 25 3-4 113 106 63 65 55 16 119 30 5以上129 80 102 58 118 44 373 85 请拟合下列模型: (1)模型1将喝咖啡(cofe)和吸烟(smoke)两个变量作为有序分类变量(0,1,2,3,),拟合模型。 (2)模型2将喝咖啡(cofe)和吸烟(smoke)两个变量以0为基准设为哑变量(0,1),拟合模型 (3)模型3将喝咖啡和吸烟两个变量作为交互效应变量,拟合模型。 7、根据练习一的数据,分析影响血压的主要因素有哪些? 8、某单位研究三种不同穴位的镇痛效果,资料如表4-16。试检验针刺不同穴位的镇痛效果有无差别?

相关主题
文本预览
相关文档 最新文档