坚持在未来绽放 发表于 2019-9-4 15:53:32

SAS 中的 sql 语句的使用------单表操作


1. 在 SAS 中使用 sql 语句,使得对于数据的操作会更加地方便。

  (1)sql 语句分为增、删、改、查,就是基本数据的操作

  (2)SAS 中的 sql 一般只使用增、查。

2. SAS 中 sql 的增和查

一般的样式为:
1 proc sql;
2   here is your sql;
3 run;

(1)SAS 中 sql 的查询
1 data temp;
2 input visit $ visit_dat $;
3 cards;
4 v1 20190201
5 v2 20200304
6 v3 20190825
7 ;
8 run;
9
10 proc sql;
11 select
12   *
13 from
14   work.temp;
15 run;
结果为:


(2)SAS 中 sql 的增加
data temp;
input visit $ visit_dat $;
cards;
v1 20190201
v2 20200304
v3 20190825
;
run;

/* 创建表 */
proc sql;
create table visit as
select
    visit
from
    work.temp;
run;

/* 打印创建的表 */
proc print data=visit;
run;

结果为:


(3)SAS 中 sql 语句的条件查询
data temp;
input visit $ visit_dat $;
cards;
v1 20190201
v2 20200304
v3 20190825
;
run;

/* 创建表,含条件语句 */
proc sql;
create table visit as
select
    *
from
    work.temp
where
    visit = "v1";
run;

/* 打印创建的表 */
proc print data=visit;
run;
结果为:


(4)SAS 中 sql 的分组查询
data temp;
input visit $ visit_dat $;
cards;
v1 20190201
v2 20200304
v3 20190825
v1 20180431
v2 20170902
v4 20160826
;
run;

/* 创建表,含分组语句 */
proc sql;
create table visit as
select
    *
from
    work.temp
group by
    visit;
run;

/* 打印创建的表 */
proc print data=visit;
run;

结果为:

注意:
分组查询和按条件查询的区别:
按条件查询是根据条件,查询想要得到的结果;
分组查询的结果是所有数据,但是按照条件分组的。

(5)SAS 中 sql 分组后,按照条件查询,使用 having 来添加条件
data temp;
input visit $ visit_dat $ age;
cards;
v1 20190201 18
v2 20200304 21
v3 20190825 34
v1 20180431 58
v2 20170902 23
v4 20160826 25
;
run;

/* 创建表,分类语句+条件语句 */
proc sql;
create table visit as
select
    *
from
    work.temp
group by
    visit
having
    age>25;
run;

/* 打印创建的表 */
proc print data=visit;
run;

结果为:


(6)SAS 中 sql 语句的排序,使用 order by,若是要排序的字段是字符型,则按照首字母的顺序
数字的排序
data temp;
input visit $ visit_dat $ age;
cards;
v1 20190201 18
v2 20200304 21
v3 20190825 34
v1 20180431 58
v2 20170902 23
v4 20160826 25
;
run;

/* 创建表,排序语句 */
proc sql;
create table visit as
select
    *
from
    work.temp
order by
    age;
run;

/* 打印创建的表 */
proc print data=visit;
run;

字符的排序
data temp;
input visit $ visit_dat $ age type $;
cards;
v1 20190201 18 a
v2 20200304 21 f
v3 20190825 34 e
v1 20180431 58 c
v2 20170902 23 d
v4 20160826 25 r
;
run;

/* 创建表,含排序语句 */
proc sql;
create table visit as
select
    *
from
    work.temp
order by
    type;
run;

/* 打印创建的表 */
proc print data=visit;
run;

(7)SAS 中 sql 语句的 case 使用,使用 case when,这里的case when 只是针对单独的字段来做判断
data temp;
input visit $ visit_dat $ age type $;
cards;
v1 20190201 18 a
v2 20200304 21 f
v3 20190825 34 e
v1 20180431 58 c
v2 20170902 23 d
v4 20160826 25 r
;
run;

/* 创建表,区别对待 */
proc sql;
create table visit as
select
    visit,visit_dat,
    case when age>50 then "高龄"
         when age>25 & age<=50 then "适合"
         else "低龄"
    end
    as age_span,type
from
    work.temp;
run;

/* 打印创建的表 */
proc print data=visit;
run;

结果:


注意:
在写sql语句的时候,每次写完一条 sql 语句必须跟上一个分号(;)。
页: [1]
查看完整版本: SAS 中的 sql 语句的使用------单表操作