update / insert into后面不需要加table關鍵字
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>;
