zoukankan      html  css  js  c++  java
  • 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>;
  • 相关阅读:
    Golang实现mysql where in 查询
    Golang终止程序运行(类似php die; exit;)和打印变量(print_r)
    (转)Unity中protobuf的使用方法
    (转)PlayerPrefs游戏存档
    Unity3d---> IEnumerator
    (转)Unity3D占用内存太大的解决方法
    UICamera(NGUI Event system)原理
    NGUI诡异的drawCall
    (转)U3D DrawCall优化手记
    (转)Unity3D
  • 原文地址:https://www.cnblogs.com/yican/p/4100240.html
Copyright © 2011-2022 走看看