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

update / insert into后面不需要加table关键字

1:三种建表方式

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

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

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

47560d1c9df728d3a5912b333c899c7d.png

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

procsql;create table work.departments

(Deptvarchar(20) label='Department',

Codeinteger label='Dept Code',

Managervarchar(20),

AuditDate num format=date9.);

quit;

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

7bbfdc5090799f00caf74b1b91e14e52.png

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

procsql;create table work.flightdelays3

(drop=delaycategory destinationtype)likesasuser.flightdelays

(keep=delaycategory destinationtype delay);

describetable work.flightdelays3;

quit;

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

fc95aa611d062f7ed5f8479967748f4c.png

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

procsql;create table work.ticketagents as

selectlastname, firstname,

jobcode, salaryfromsasuser.payrollmaster,

sasuser.staffmasterwherepayrollmaster.empid=staffmaster.empidand jobcode contains 'TA';

quit;

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

DESCRIBE TABLE table-name-1;

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

proc contents data=libref.tableName也可以

/*展示表格中的限制条件*/

DESCRIBE TABLE CONSTRAINTS table-name-1;

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

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

9b3f3ac57b22c073f3650d9abd162c25.png

procsql;insert into

work.newtable

(item,qty)/*规定要插入的列,不写则默认为所有列*/

values ('FLUTE',6)values('VIOLIN',3);

quit;

4:删除行

DELETE FROM table-name ;

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

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

两种方式

Creating a Constraint in a Column Specification

3e514766d276a5e841e3b38b8291ccb7.png

procsql;create table work.employees

/*将限制条件直接跟在变量后*/

(IDchar (5) primary key,

Namechar(10),

Genderchar(1) not null check(gender in('M','F')),

HDate date label='Hire Date');

Creating a Constraint by Using a Constraint Specification

procsql;create table work.discount3

(Destinationchar(3),

BeginDate num Format=date9.,

EndDate num format=date9.,

Discount num,

/*将限制条件写成单独的行*/constraint ok_discount check (discount le .5),constraint notnull_dest notnull(destination));

quit;

6:处理输入错误

Using the UNDO_POLICY= Option to Control UNDO Processing

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

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

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

6f73e0e5f1632cabc450ba2a0325515d.png

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

部分更新和全表更新

ae1cb1bc0bafb66ba73b3b35585aea87.png

procsql;update work.payrollmaster_new2set 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 modifycolumns in a table, use the ALTER TABLE statement.

5114e17d1376d5ac32856f60937bc93f.png

fc2cf58c80e573a51e34b67db1e40a4a.png

/*添加列*/

procsql;alter table work.payrollmaster4add Bonus num format=comma10.2,Level char(3);

quit;

/*删除列*/

procsql;alter table work.payrollmaster4drop 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列*/

procsql;alter table work.payrollmaster4

modify salary format=dollar11.2 label="SalaryAmt";

quit;

/*三种操作可以一起使用*/

procsql;alter table work.payrollmaster4addAge num

modify dateofhire date format=mmddyy10.drop dateofbirth, gender;

9:删除表

DROP TABLE table-name-1 ;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值