SAS 9.4播放IFN功能结果


取之
2025-02-12 04:31:20 (1天前)


我最近搬到了SAS 9.4,发现了IFN和IFC功能的奇怪错误。请参阅下面的代码说明IFN功能:

数据a;
输入b 8。;
datalines;
0.1
150
110
9.1
1
0

;
跑;

proc sql; …

2 条回复
  1. 0# 喜欢一个人丶 | 2019-08-31 10-32



    对于意外评估结果的讨论是针对Windows 10.0.17763 Build 17763上的SAS 9.4 TS1M4中运行的代码。




    1. 3 proc options;
      4 run;

    2. SAS (r) Proprietary Software Release 9.4  TS1M4
    3. </code>


    SQL没有缺失值(

    .



    .

    )与Step Step和其他Procs相同的概念。 SQL有NULL并且SAS将缺少的值强制转换为NULL,因此存在模糊边缘并且您在那里发现了问题!



    无法正确评估表达式似乎是9.4 SQL实现处理字面缺失的方式(

    .

    )在这种特定情况下的价值观。失败不在

    IFN

    ,而是评估传递给

    IFN




    仅检查逻辑表达式,问题似乎与之无关

    IN

    。类似的意外评估结果发生时

    IN

    被分成一系列

    OR

    秒。具体的因果关系似乎是遗失的文字(

    .

    )出现在表达式中 - 这反过来成为9.4 SQL实现内部(解析等)



    当超过两个子表达式并且其中一个使用缺失时,肯定似乎是一个错误(

    .

    )。适当的补救措施,以及更适合远程或传递处理的措施,将避免使用丢失的文字(

    .

    )在您的SQL中使用ANSI null测试运算符

    IS NULL



    IS NOT NULL




    1. data have;
      b = 9.1;
      run;

    2. proc sql;
      create table want as
      select
      b
      , b in (.,0) | b > 100 as part1 / correct result /
      , b in (.,0) | b < 1 as part2 / correct result /
      , b > 100 | b < 1 as part3 / correct result /
      , b in (.,0) | b > 100 | b < 1 as parts_null_first / INCORRECT result /
      , b > 100 | b < 1 | b in (.,0) as parts_null_last / INCORRECT result /
      , b=. | b=0 | b > 100 | b < 1 as parts_no_in_null_first / INCORRECT result /
      , b=0 | b > 100 | b < 1 | b= . as parts_no_in_null_last / correct - weird? /

    3. , b is null | b=0 | b > 100 | b < 1 as parts_is_null / correct result /

    4. , calculated part1 | calculated part2 | calculated part3 as calc_parts_in_1_expr / correct result /

    5. from have
      ;
      quit;

    6. </code>


    我没有测试当有问题的表达式在a中时是否出现相同的问题

    WHERE

    caluse。作为DATA步骤中的赋值,表达式不是问题:




    1. data want2;
      set have;
      parts_null_first = b in (.,0) | b > 100 | b < 1 ; / correct result /
      parts_null_last = b > 100 | b < 1 | b in (.,0); / correct result /
      run;

    2. </code>


    如果表达式评估’错误’出现在where表达式中,那么where评估引擎更可能是根本原因 - 我相信相同的引擎用于Proc / Data WHERE语句,Dataset WHERE =选项和SQL评估。



    可能有一个SAS Note或Hotfix的情况,但我没有去看。



    关于测试缺失值的另一个讨论可以在SAS_Tipster中找到

    “SAS提示:使用IS MISSING和IS NULL与数字或字符变量”

    在communities.sas.com上。重要的一点是在空值的标准测试中使用运算符。




    IS MISSING和IS NULL运算符与WHERE语句一起使用,可以处理字符或数字变量。它们也适用于NOT运算符:





    文档

    总结

    IS MISSING predicate

    如:




    测试SAS本机数据存储中的SAS缺失值。



登录 后才能参与评论