#SAS学习-经典例子整理分享S2(SQL)

常规操作这边就不讲解了,讲一些比较冷门但是重要的知识点。

0?wx_fmt=jpeg

1. GROUP BY从句

在SQL语言中,用户可以通过GROUP BY从句来查看分组信息,需要注意的是它一般和汇总函数(summary function)配合使用,常见的汇总函数及其含义如下:

  • max 最大值

  • min 最小值

  • avg 平均值

  • count 计数(最常用)

  • nmiss 缺省值个数

  • range 极差

  • var 方差

  • std 标准差

  • sum 求和(最常用)

例1:计算不同厂商的个数

我们可以想到用count来计算,但是,我们还要注意使用distinct去除重复厂商。

PROC SQL;

select count(distinct make) as number_of_maker from sashelp.cars;

QUIT;

2. HAVING从句

HAVING从句和WHERE从句是类似的,都是来选择满足特定条件的行,不同之处在于:WHERE从句的操作在SELECT从句前,而HAVING从句则是在GROUP BY之后。

下面是一个例子:输出所有厂商的所有型号汽车的售价平均值,并平均值大于20000

PROC SQL;

select make,avg(msrp) as average_price from sashelp.cars

group by make

having average_price >=20000

order by make;

QUIT;

3. 使用SQL对报表加工

SQL对于SAS报表制作也是有一些选项可以给用户使用的,下面主要讲2个:

1)NUMBER|NONUMBER选项

默认情况下,SQL在输出报表的时候不输出行数,但这个选项可以让其显示,其语法结构如下:

PROC SQL NUMBER;

2)OUTOBS和INBOS选项

SQL还可以通过OUTOBS=选项来控制输出的行数,其语法结构如下:

OUTOBS=N,其中N为制定输出行数,而INOBS则是控制读入表的行的数量。

下面用一个例子来对以上的2个选项进行说明,读入sashelp的cars表,然后仅输出不同厂商和汽车型号组合的top10,并加上行数以及相应的标题和脚注。

PROC SQL OUTOBS=10 NUMBER;

title "THE FIRST TEN CAR MODEL IN THE LIST";

select distinct cars.make,cars.model from sashelp.cars;

QUIT;

4. 使用SQL管理表

SQL可以对表进行简单管理,包括创建新表,新增或者删除表、行、更新表中的值等等。

1)复制表

PROC SQL;

create table work.cars_copy as 

select * from sashelp.cars;

QUIT;

2)创建空表

PROC SQL;

create table new_class

{

name char(12) label='姓名',

sex char(4) label='性别',

age num label='年龄'

}

;

QUIT;

3)删除表

PROC SQL;

DROP TABLE 表名;

QUIT;

4)插入新行

PROC SQL;

title "NEW_CLASS";

insert into NEW_CLASS

set name='sam',

  sex='M',

  age='24'

set name='jesscia',

sex='F',

age='23';

title "insert new observations using set";

QUIT;

或者

PROC SQL;

insert into NEW_CLASS (name,sex,age)

values('SAM','M','24')

values('JESSCIA','F','23');

QUIT;

5)删除行

PROC SQL;

DELETE FROM CLASS WHERE (CLASS.HEIGHT)>180;

QUIT;

6)修改表中的列

PROC SQL;

ALTER TABLE 表名

ADD 列1,列2,...

DROP 列1,列2,...

MODIFY 列1,列2,...;

QUIT;

7)更新列的值

PROC SQL;

update class

set height=height*

case 

when age in (11,12) then 1.05

when age in (13,14) then 1.06

else 1.04

end;

QUIT;

0?wx_fmt=jpeg

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值