quit;
例:用RENAME选项
procsql;
create table baseline_A_2 as
select *
from Scores(rename=(a1-a10=base_a1-base_a10) drop=b:)
where visit=1;
quit;
注意,这里我们将数组A的名字改为以B开头的变量,而后面一句drop=b:是不是会把刚才更名完后的变量也删除掉。结果是不会的,因为Keep和Drop选项是在Rename选项之前就执行了。
下面来讲一个我们经常遇到的情况:两个表的内连接。例如我们要对表SCORES和SURGERY进行内连接,表SCORES的主键为subject_id,而表SURGERY的主键为sid,这时,我们一般的内连接语句为:
procsql feedback _method;
create table Scores_Surg1 as
select *
from Scores T1, Surgery T2
where T1.subject_id=T2.sid and
T1.visit=T2.visit;
quit;
另一种方法就是先将SURGERY中的sid改名为subject_id,然后运用数据表的inner join来进行数据表的内连接:
procsql feedback _method;
create table Scores_Surg2 as
select *
from Scores T1
natural inner join
Surgery(rename=(sid=subject_id)) T2;
quit;
另外,我们还可以遇到列名为SAS关键词时,会出现一些错误,例如:
procsql _method;
create table caseLT4_1 as
select *
from Surgery
where case lt 4;
quit;
这里,where case这一句,SAS会认为这是一个条件操作的开始(case when…then… end),因此会出现错误。这时我们可以先将该列名更名后再进行where语句。例如:
procsql _method;
create table caseLT4_2 as
select *
from Surgery(rename=(case=case_id))
where case_id lt 4;
quit;
这时case已改名为case_id
5 SORTEDBY
该选项主要指明数据集已用哪些变量进行排序,这会增加SQL过程步的效率。本人对该选项用得比较少,对效率优化也做得比较少,就不再介绍,请大家阅读相关文献。
6 WHERE
WHERE选项在SQL过程步中,主要用于取数据子集或指定连接条件。Surgery数据集中,visit小于16的客户在Scores数据中增加一个标识。一般的方法如下:
procsql;
create table scores_surglt16 as
select T1.*,
case when ILV2.Visit gt 0 then 'Y' end as Surgery_Flag
from Scores as T1
left join
( select *
from Surgery
where Visit lt 16) as ILV2
on T1.visit=ILV2.visit and
T1.subject_id=ILV2.sid;
quit;
这里得到的结果是Surgery数据集中,visit小于16的10个客户,在Scores数据集中生成的新Surgery_Flag的值为Y。我们可以用where选项来简化上述代码:
procsql;
create table scores_surglt16_2 as
select T1.*,
case when T2.Visit gt 0 then 'Y' end as Surgery_Flag
from Scores T1
natural left join
Surgery(where=(visit lt 16)
rename=(sid=subject_id)) T2;
quit;
where的另一个用法是与in选项结合。例如要实现模糊匹配,我们可以用like以及通配符%:
procsql _method;
create table ex11a as
select *
from scores
where subject_id like '100-%' or
subject_id like '20%';
quit;
我们也可以用where和in选项来简化上述代码:
procsql _method;
create table ex11b as
select *
from scores(where=(subject_id in: ('100-','20')));
quit;
7 附录

