本人本文不讨论data step 与 proc sql谁优谁劣。只要你学会用,用得好,就是大哥,同时谁优谁劣心中有数。
本系列主要介绍sas 的proc sql过程。按照对象分为三部分:表,表的操作 即row column,其他。
个人学习的思路借鉴sas data步的学习经验,对表的管理以及操作。
第一部分:table表。
表是由行和列组成的,sas的行是代表观测,列代表变量。以下为创建表的几种方法。
第一:没有raw data 只给出表的结构,即表包含的列明。
如要创建的表a包含三个列分别为 id,date,country。
proc sql;
create table a
(id num,
date num format = date9. label = "brithday",
country char(10) format = $25.
);
当然,除了列的属性以外,还可以规定主键,外键,添加约束等操作,以后有空写一下。
第二:从已存在的表中建立新表。
如将a表的结构copy给表b:
proc sql;
create table b
like a;
quit;
如建立表c只从表a中选择id以及date这两列。
proc sql;
create table c
as select id, date
from a;
quit;
我们可以使用describe在log里边查看表的结构。
proc sql;
describe table a;
quit;
log如下:
218 proc sql;
219 describe table a;
NOTE: SQL table WORK.A was created like:
create table WORK.A( bufsize=65536 )
(
id num,
date num format=DATE9. label='brithday',
country char(10) format=$25.
);
220 quit;
NOTE: PROCEDURE SQL used (Total process time):
real time 0.07 seconds
cpu time 0.01 seconds
这个也能帮助你查看你新导入的数据集的变量以及属性(通常很少用,因为在explorer里边,你选中dataset鼠标右击就可以查看列的属性),但是这过程可以让你熟悉创建表的sas代码。
同时,对于不太理解sas的我 或许还有你们,添加validate可以让sas执行sql server的思路先编译查找你所写的code是否在语法,变量等上有问题,这是在不提交程序的前提下(validate后只能跟select)。
proc sql;
validate
select *
from sashelp.class;
quit;
log:显示 proc sql statement has valid syntax;即为有效语句,毛问题啦。
250 proc sql;
251 validate
252 select *
253 from sashelp.class;
NOTE: PROC SQL statement has valid syntax.
254 quit;
NOTE: PROCEDURE SQL used (Total process time):
real time 0.00 seconds
cpu time 0.01 seconds