美文网首页
SAS编程:SQL中的条件语句——Case表达式

SAS编程:SQL中的条件语句——Case表达式

作者: 野藤_ | 来源:发表于2021-05-23 23:26 被阅读0次

在日常的SAS编程工作中,使用最多的条件判句是Data步中的if then语句,今天介绍一下SQL中的条件语句Case表达式。实话实说,这是我第一次在工作中使用SQL中的条件语句。从刚接触SAS开始,Data步中if then就是我条件判断的首选,因为它语法简单,容易理解。

那为什么我这次选择了使用SQL中的Case表达式呢?编程中,我们应该都有这样的体会,SQL对于数据集的拼接处理比较高效简洁;但对于新建变量、变量处理方面,Data步处理就比较简洁。最近,我用SQL语句处理好数据集的复杂拼接后,需要根据一个判断条件的真假去生成以一个新变量。按照习惯,我会再写一个Data步实现这个操作。但是,当时觉得仅仅为这个变量多写一个Data步,程序显得“臃肿”。于是,我去查看SQL的说明文档,直接在SQL中用Case表达式进行处理了。

语法

Case表达式的作用是,选择满足指定条件的结果值。不多说,直接看语法:

Case语法

表达式必须的参数是判断条件(when-condition)结果表达式(result-expression),可选参数是Case表达式操作对象(case-operand)

先介绍操作对象(case-operand)参数,它是一个有效的SQL表达式,会解析为表的一列,其值会与所有的判断条件(when-conditions)进行比较。判断条件(when-condition) 参数分两种情况,当指定操作对象(case-operand)时,when-condition是一个缩短的SQL表达式(作为判断操作符 = 的右边值),它假定case-operand为其操作数之一(作为判断操作符 = 的左边值),并解析为true或false;当不指定操作对象(case-operand)时,when-condition是解析为true或false的SQL表达式。结果表达式(result-expression)参数,是解析为一个值的SQL表达式。

代码示例

单看参数的解释说明,不太容易理解,我来用代码演示讲解。代码的实现目标是,在SASHELP.Class数据集中,根据SEX的值,新建一个变量SEX_,映射关系是'F'->'Female', 'M'->'Male'。

在置空可选参数的情况下,示例代码如下:

proc sql noprint;
  create table class as
    select *, case 
      when sex="F" then "Female"
      when sex="M" then "Male"
      else "Other"
     end as sex_
    from sashelp.class;
quit;

输出结果如下:


Output 1

在有可选参数的情况下,示例代码如下:

proc sql noprint;
  create table class as
    select *, case  sex
      when "F" then "Female"
      when "M" then "Male"
      else "Other"
     end as sex_
    from sashelp.class;
quit;

输出结果与置空参数情况下相同,结合这两段代码,就容易理解Case表达式的语法了。

最后,提一个小点。在Data步中,如果没有指定新建变量的长度,默认是以第一行记录值的长度作为变量的长度,如果该记录值的长度不是该变量的最长值,那么后续记录值会发生截断。不过,在SQL的条件语句中,不会出现这种情况。SQL中新建变量的长度,默认是变量中最长值的长度。

以下是Data步的示例代码:

data class_a;
  set sashelp.class;
  if sex = "M" then sex_="Male";
  else if sex = "F" then sex_="Female";
  else sex_="Other";
run;

新建变量发生截断

Output 2

以下是SQL的示例代码:

proc sql noprint;
  create table class_b as
    select *, case  sex
      when "M" then "Male"
      when "F" then "Female"
      else "Other"
     end as sex_
    from sashelp.class;
quit;

SQL中新建变量没有发生截断

Output 3

以上。

若有疑问,欢迎评论区交流!

相关文章

  • SAS编程:SQL中的条件语句——Case表达式

    在日常的SAS编程工作中,使用最多的条件判句是Data步中的if then语句,今天介绍一下SQL中的条件语句Ca...

  • 2018-11-13sql的查询判断

    我们在sql中的 case when 里面可以叠加相同的语句, case when 条件 then case wh...

  • C语言学习 - switch条件语句

    switch条件语句的语法形式 switch条件语句的执行流程 计算表达式的值,并将其与case后常量表达式的值逐...

  • SQL学习笔记 - CASE WHEN THEN

    本文首发于知乎:JessieY SQL中的 CASE 类似编程语言里的 if-then-else 语句,用做逻辑判...

  • ★05.语句

    条件语句 if语句 switch语句 与 C/C++ 的区别,case后面可以跟随任何表达式。 匹配操作用的是==...

  • 2018-09-12

    JS中switch语句 swithch(表达式){ case 结果1: 语句1; ...

  • oracle中的控制语句

    oracle中的控制语句 一、条件语句 条件语句包含if else、case when 1.01、if else ...

  • select case when if 的一些用法【转载】

    概述:sql语句中的case语句与高级语言中的switch语句,是标准sql的语法,适用于一个条件判断有多种值的情...

  • case语句

    概述:sql语句中的case语句与高级语言中的switch语句,是标准sql的语法,适用于一个条件判断有多种值的情...

  • 【32】SQL Case When用法

    简介 case when sql中计算条件列表,并返回多个可能的结果表达式之一。CASE 表达式有两种格式:1、C...

网友评论

      本文标题:SAS编程:SQL中的条件语句——Case表达式

      本文链接:https://www.haomeiwen.com/subject/urqtsltx.html