暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

SAS入门系列之十八:多数据集的加工 SQL语言—纵向查询

华中卫生统计 2021-10-06
1133




01

理论基础


SQL语言简介

结构化查询语言SQL(Structured Query Language)是关系型数据库管理系统的标准语言。SAS系统也支持SQL语言。

SQL语言是一个强大的数据处理工具,它是DATA步的一种补充。相比DATA步,SQL语言更加直观、简洁,其常用术语和基本结构如下




SQL语言纵向查询(串接数据


SQL语言纵向查询类型:



SQL语言纵向查询代码:

说明

  • CREATE从句创建新表(数据集);

  • SELECT从句选择要查看的列,不同列直接用逗号隔开

  • FROM从句指定了操作的表(数据集);

  • WHERE从句选择满足条件的行。







02

实战

SQL纵向查询  建立串接数据集 

    Data a18_1;     /*建立SAS临时数据集a18_1*/   
       input id name:$ 9. height weight;     /*输入不同类型和格式变量并定义输入格式*/
     format height 5.1 weight 4.1;     /*设立变量height weight输出格式*/
    cards;
    1001  蔡晴      126.0   22.6
    1003  范运霄    159.7   55.8
    1002  高宇      162.8   60.2
    1005  喻希山    144.0   32.3
    ;




    Data a18_2;     /*建立SAS临时数据集a18_2*/    
       input id$ name:$ 9. ht;    
     format ht 6.2;    
    cards;
    1001  蔡晴    133.00
    1006  徐军港  142.50
    1003  范运霄  159.70    
    ;




    Data a18_3;     /*建立SAS临时数据集a18_3*/    
       input id name:$ 9. wt;    
     format wt 6.3;    
    cards;
    1004  安有文  36.000
    1001  蔡晴    37.000
    1005  喻希山  32.300
    ;




    *建立转换变量类型的中间数据集;
    data a18_2_num;     /*建立SAS临时数据集a18_2_num,是为转换数据集a16_2中变量字符格式设立的中间数据库*/
      set a18_2(rename=(id=id_num));     /*重命名变量id*/
      id=input(id_num,4.);     /*将变量id_num转换为数值型变量id,长度为4*/
      drop id_num;     /*弃除变量id_num*/
    run;

             数据集a18_1界面图:



               数据集a18_2界面图:



               数据集a18_3界面图



               中间数据集a18_2_num界面图





    SQL语言纵向查询——串接数据集的差与交

      *串接数据集 差接——except;
      proc sql;
        title "差接数据集";
        create table except as     *建立差接数据集except*/
        select a.id,a.name from a18_1 as a     *从数据集a18_1选择变量id name,设置数据集a18_1别名为a*/
        except     *在a18_1基础上差接a18_2_num*/
        select b.id,b.name from a18_2_num as b     *从数据集a18_2_num选择变量id name,设置数据集a18_2_num别名为b*/
        except     *在a18_1与a18_2_num差接基础上,继续差接a18_3*/
        select c.id,c.name from a18_3 as c;     *从数据集a18_3选择变量id name,设置数据集a18_3别名为c*/
      quit;






      *串接数据集 交接——intersect;
      proc sql;
        title "交接数据集";
        create table intersect as
        select a.id,a.name from a18_1 as a
        intersect     *在a18_1基础上交接a18_2_num*/
        select b.id,b.name from a18_2_num as b
        intersect     *在a18_1与a18_2_num交接基础上,继续交接a18_3*/
        select c.id,c.name from a18_3 as c;
      quit;


      差接数据集except  交接数据集intercept

      打印输出:




      SQL语言纵向查询——串接数据集的

        *串接数据集 并接——union;
        proc sql;
          title "并接数据集——height,排序并删除行重复值,仅保留公共列";
          create table union_ht as     *建立并接数据集union_ht*/
          select * from a18_1     /*选择数据集a18_1所有变量*/
          union corr     /*基于变量名并接数据集a18_1 a18_2_num,排序去重*/
          select * from a18_2_num(rename=(ht=height));     /*选择数据集a18_2_num所有变量并重命名变量ht为height*/
        quit;




        proc sql;
          title "并接数据集——height,直接串接,保留行重复值,仅保留公共列";
          create table union_ht_all as
          select * from a18_1
          union corr all     /*基于变量名并接数据集a18_1 a18_2_num,不排序不去重*/
          select * from a18_2_num(rename=(ht=height));
        quit;




        proc sql;
          title "并接数据集——weight,排序并删除行重复值,仅保留公共列";
          create table union_wt as
          select * from a18_1
          union corr
          select * from a18_3(rename=(wt=weight));
        quit;




        proc sql;
          title "并接数据集——weight,直接串接,保留行重复值,仅保留公共列";
          create table union_wt_all as
          select * from a18_1
          union corr all
          select * from a18_3(rename=(wt=weight));
        quit;


        并接数据集union_ht  union_ht_all输出:



        并接数据集union_wt  union_wt_all输出:


        SQL语言纵向查询——串接数据集的外并

          *串接数据集 外并接——outer union;
          proc sql;
            title "并接数据集——直接串接,保留所有行/列";
            create table outer_union as     /*建立外并接数据集outer_union*/
            select * from a18_1     /*选择数据集a18_1所有变量*/
            outer union corr     /*在a18_1基础上外并接a18_2_num*/
            select * from a18_2_num(rename=(ht=height))     /*选择数据集a18_2_num所有变量并重命名变量ht为height*/
            outer union corr     /*在a18_1与a18_2_num外并接基础上,继续外并接a18_3*/
            select * from a18_3(rename=(wt=weight));     /*选择数据集a18_3所有变量并重命名变量wt为weight*/
          quit;


                 外并数据集outer_union输出:







          03

          小结

          • SQL纵向查询(串接)类型—四种,EXCEPT(差)INTERSECT(交)UNION(并)外并(OUTER UNION)。前三种各数据集结构应一致,外并则在结构不一致时保留所有行/列,类似SET语句。


          • SQL纵向查询(串接)关键字ALL/CORR,实战中可见,无ALL会先排序去重再串接,有则是直接串接;无CORR凭SELECT后变量顺序串接,有则合并同名变量。注意,ALL不能与OUTER UNION同时使用

          • SQL纵向查询(串接)特点—SQL纵向查询最突出特色是不需要排序,二是匹配变量不需要同名,再就是可以在列方向上运用函数。当然,匹配变量类型仍然需要相同。




           往期推荐 ·


          SAS基础系列之三:新概念t 检验

          SAS基础系列之二:定性资料的统计描述

          SAS基础系列之一:定量资料的统计描述SAS入门系列之十五:单数据集的加工  字符函数(Ⅱ)

          SAS入门系列之十七:多数据集的加工  并接数据集

          SAS入门系列之十六:多数据集的加工  串接数据集

          SAS入门系列之十五:单数据集的加工  字符函数(Ⅱ)

          SAS入门系列之十四:单数据集的加工  字符函数(Ⅰ)

          SAS入门系列之十三:单数据集的加工  数值函数

          SAS入门系列之十二:单数据集的加工  数值与字符变量的转换函数

          SAS入门系列之十一:单数据集的加工  观测的选择与分组

          SAS入门系列之十:单数据集的加工  变量的选择与修饰

          SAS入门系列之九:ODS进阶

          SAS入门系列之八:ODS初步

          SAS入门系列之七:导出SAS数据集

          SAS入门系列之六:视窗模式读入外部数据

          SAS入门系列之五:实战模式读入外部数据

          SAS入门系列之四:深度读入外部数据

          SAS入门系列之三:读入外部数据

          SAS入门系列之二:逻辑库涵义  创建逻辑库

          SAS入门系列之一:界面  结构  建数据集

          华中卫生统计

          原创时间|每月首周、三周  

          长按二维码关注我们

          文章转载自华中卫生统计,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

          评论