sas中的sql(6)创建表格、展现表格、插入行、删除行、规定限制条件(constriants)、处理输入错误(undo策略)、update表格、更改列

1:三种建表方式

建表只会在库中建立好表格并在日志中显示,并不会有输出。

 

1.1:自己定义列来建立一张空表

column-specification = column-define + column-constriants + MESSAGE=/MSGTYPE

SAS中数据的存储方式只有两种,一种char(n)一种num。sas也支持sql原生的数据类型,但是最终都会统一转化为这两种

proc sql;
create table work.departments
    (Dept varchar(20) label=Department,
        Code integer label=Dept Code,
        Manager varchar(20),
        AuditDate num format=date9.);
quit;

 

 

1.2:创建一张和其他表一模一样的空表

Drop/Keep=选项,来保留或删除规定的列,他们可放在任意一张表后面

proc sql;
    create table work.flightdelays3
    (drop=delaycategory destinationtype)
like sasuser.flightdelays
    (keep=delaycategory destinationtype delay);
    describe table work.flightdelays3;
quit;

 

1.3:依据查询结果中创建表格

 对于select中新生成的列如果没用别名,sas会自动起一个名字

proc sql;
create table work.ticketagents as
    select lastname, firstname,
            jobcode, salary
    from sasuser.payrollmaster,
        sasuser.staffmaster
    where payrollmaster.empid
        = staffmaster.empid
    and jobcode contains TA;
quit;

 

 

2:展现表格,及表格中的限制条件

DESCRIBE TABLE table-name-1<, ... table-name-n>;

在日志中会生成完整的建表语句!

proc contents data=libref.tableName也可以

 

/*展示表格中的限制条件*/
DESCRIBE TABLE CONSTRAINTS table-name-1<, ... table-name-n>;

 

3:插入行数据,这里给出两种常用方式

所有列的插入,都在表末尾

proc sql;
insert into
    work.newtable
    (item,qty)/*规定要插入的列,不写则默认为所有列*/
    values (FLUTE,6)
    values(VIOLIN,3);
quit;

 

4:删除行

DELETE FROM table-name <WHERE expression>;

不加where则会删除整张表的内容

5:创建一个对列有限制条件的表(不能作用于视图)

两种方式

Creating a Constraint in a Column Specification

proc sql;
create table work.employees
/*将限制条件直接跟在变量后*/ (ID
char (5) primary key, Name char(10), Gender char(1) not null check(gender in (M,F)), HDate date label=Hire Date);

 

Creating a Constraint by Using a Constraint Specification

proc sql;
create table work.discount3
(Destination char(3),
BeginDate num Format=date9.,
EndDate num format=date9.,
Discount num,
/*将限制条件写成单独的行*/
constraint ok_discount check (discount le .5), constraint notnull_dest not null(destination)); quit;

 

6:处理输入错误

Using the UNDO_POLICY= Option to Control UNDO Processing

如果在插入行时不满足规定的约束条件,则会进行undo策略

比如在undo_policy=默认情况下,插入两行,第一行满足,第二行不满足,则两行都不会进行插入。

在undo_policy=none情况下,插入成功的会保留,失败的不会插入。

 

 

7:更新表格,case when的两种使用方式

部分更新和全表更新

proc sql;
update work.payrollmaster_new2
set salary=salary*
case substr(jobcode,3,1)
    when 1
        then 1.05
    when 2
        then 1.10
    when 3
        then 1.15
    else 1.08
end;
quit;

 

8:更改表中的列

To add, drop (delete), or modify columns in a table, use the ALTER TABLE statement.

/*添加列*/
proc
sql; alter table work.payrollmaster4 add Bonus num format=comma10.2, Level char(3); quit;
/*删除列*/
proc
sql; alter table work.payrollmaster4 drop Bonus,Level; quit;

You can use the MODIFY clause to change a column‘s

1:length (column width) - for a character column only

2:informat

3:format

4:label.

不能更改列的类型,比如char->num

不能更改列名

/*modify列*/
proc
sql; alter table work.payrollmaster4 modify salary format=dollar11.2 label="SalaryAmt"; quit;
/*三种操作可以一起使用*/
proc
sql; alter table work.payrollmaster4 add Age num modify dateofhire date format=mmddyy10. drop dateofbirth, gender;

 

9:删除表

DROP TABLE table-name-1 <, ... table-name-n>;

 

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。