SAS: Proc SQL学习笔记01

本文假定读者对SQL很熟悉,因此不涉及SQL本身,只针对SQL在SAS中的应用 

 

proc sql语法如下:

PROC SQL <option(s)>;

  SQL STATEMENT;

 ..

<quit;>

 

常见选项

下面说的选项是指<options(s)里的选项>

FEEDBACK选项

它是在<option(s)>里的一个选项,可选值为 FEEDBACK | NOFEEDBACK

默认值是NOFEEDBACK,如果加上了FEEDBACK, 则会在SAS LOG中显示解析后的SQL(比如select *会解析为select所有字段)。

示例如下:

10221
10222  proc sql feedback;
10223      select * from certadv.payrollmaster
10224      where salary<32000
10225      order by jobcode;
NOTE: 语句变换为:

        select PAYROLLMASTER.EmpID, PAYROLLMASTER.JobCode, PAYROLLMASTER.Salary, PAYROLLMASTER.DateOfBirth, PAYROLLMASTER.DateOfHire
          from CERTADV.PAYROLLMASTER
         where PAYROLLMASTER.Salary < 32000
      order by PAYROLLMASTER.JobCode asc;

10226  quit;
NOTE: “PROCEDURE SQL”所用时间(总处理时间):
      实际时间          0.11 秒
      CPU 时间          0.03 秒

 

INOBS=和OUTOBS=

INOBS=n表示只从数据集中读取n行来处理,OUTOBS=n表示只展示n行。

 

NUMBER选项

加上此选项后,会在结果中多显示第1列,列名为row,记录号从1开始。示例程序:

proc sql number inobs=5;
	 select *
	 from sashelp.class
	 ;
quit;

输出如下:

NOEXEC选项

如果指定这个选项,那么SQL不会执行,只会在SAS LOG中显示一条NOTE: 由于 NOEXEC 选项,未执行语句。

如果SQL中有错误,那么会在SAS中将错误展示出来。

(注:也可以在SELECT语句前指定validate,效果类似)

 

calculated关健字

正常SQL情况下,计算出来的值不能出现在Where条件中,比如下面的SQL会报语法错误

select col1, col2, col1+col2 as total from t1 where total < 100;

这时候需要用到在列名前加上calculated关键字,表示这个列不是原表中有的,而是计算出来的列,改成如下SQL即可:

select col1, col2, col1+col2 as total from t1 where calculated total < 100;

 

IS MISSING

IS MINSSING和IS NULL等价,可以用IS NULL的地方都可以改为IS MISSING

 

SUM(COL1, COL2)

上面的表达式在标准SQL中是不支持的,因为sum()在标准SQL中是一个聚合函数。比如支持sum(col1),或者sum(col1+col2).

但同时sum还是SAS中的函数,所以在SAS中,上面的方式也是支持的,它计算每一行的col1+col2,形成一个新的列,程序示例:

 select * from t1;
 select *, sum(col1,col2) as col1_2 from t1;
 select *,sum(col1+col2) as col1_2 from t1;

输出如下:

 

给列设定format

比如 select avg(salary) as avgsalary from payroll; 则默认的avgsalary不是dollarw.格式的, 如果想在输出中改为这种格式,可以使用如下SQL:

select avg(salary) as avgsalary format=dolloar12. from payroll;

 

HAVING子句

HAVING一般跟在GROUP后面,只展示满足HAVING条件的组,比如查询选修了3门以上课程的学生的学号:

select Sno from SC group by Sno having count(*) > 3;

HAVING和WHERE区别在于作用对象的不同。 WHERE子句基本表或视力,从中选择满足条件的记录。而HAVING作用于组,从中选择慢足条件的组。

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值