SAS中的SQL语句大全(8)

2025-11-19

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 附录


SAS中的SQL语句大全(8).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:2024数模校内选拔赛赛题(中南财经政法大学)

相关阅读
本类排行
× 游客快捷下载通道(下载后可以自由复制和排版)

下载本文档需要支付 7

支付方式:

开通VIP包月会员 特价:29元/月

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信:xuecool-com QQ:370150219