SAS: Proc SQL学习笔记01

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

 

proc sql语法如下:

PROC SQL ;

  SQL STATEMENT;

 ..

 

常见选项

下面说的选项是指

FEEDBACK选项

它是在里的一个选项,可选值为 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;

输出如下:

SAS: Proc SQL学习笔记01_第1张图片

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)处理方式的不同

在DB2数据库中,如果使用SUM(COL1, COL2)那么计算结果只有一行,它相当于sum(col1)+sum(col2)

但在SAS中,它是为每一行返回一条结果,只计算当前行中的col1+col2。

 

给列设定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作用于组,从中选择慢足条件的组。

 

你可能感兴趣的:(办公)