77范文网 - 专业文章范例文档资料分享平台

SAS中的SQL语句大全(8)

来源:网络收集 时间:2019-08-31 下载这篇文档 手机版
说明:文章内容仅供预览,部分内容可能不全,需要完整文档或者需要复制内容,请下载word后使用。下载word有问题请添加微信号:或QQ: 处理(尽可能给您提供完整文档),感谢您的支持与谅解。点击这里给我发消息

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

百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说教育文库SAS中的SQL语句大全(8)在线全文阅读。

SAS中的SQL语句大全(8).doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印 下载失败或者文档不完整,请联系客服人员解决!
本文链接:https://www.77cn.com.cn/wenku/jiaoyu/718319.html(转载请注明文章来源)
Copyright © 2008-2022 免费范文网 版权所有
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ: 邮箱:tiandhx2@hotmail.com
苏ICP备16052595号-18
× 注册会员免费下载(下载后可以自由复制和排版)
注册会员下载
全站内容免费自由复制
注册会员下载
全站内容免费自由复制
注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: