update / insert into后面不需要加table关键字
1:三种建表方式
建表只会在库中建立好表格并在日志中显示,并不会有输出。
1.1:自己定义列来建立一张空表
column-specification = column-define + column-constriants + MESSAGE=/MSGTYPE
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:创建一张和其他表一模一样的空表
Drop/Keep=选项,来保留或删除规定的列,他们可放在任意一张表后面
procsql;create table work.flightdelays3
(drop=delaycategory destinationtype)likesasuser.flightdelays
(keep=delaycategory destinationtype delay);
describetable work.flightdelays3;
quit;
1.3:依据查询结果中创建表格
对于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:插入行数据,这里给出两种常用方式
所有列的插入,都在表末尾
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
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情况下,插入成功的会保留,失败的不会插入。
7:更新表格,case when的两种使用方式
部分更新和全表更新
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.
/*添加列*/
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 ;