sas中的sql(6)創建表格、展現表格、插入行、刪除行、規定限制條件(constriants)、處理輸入錯誤(undo策略)、update表格、更改列


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>;

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM