首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ifc函数的行为

ifc函数的行为
EN

Stack Overflow用户
提问于 2019-09-09 19:49:15
回答 2查看 217关注 0票数 1

请有人解释一下我用ifc函数观察到的一种奇怪的行为:

我进行了以下3项测试:

代码语言:javascript
复制
data test1;
  var = "    "; /* 4 spaces */
  length outvar $5;
  if not missing(var) then outvar = substr(var, 1,5);
  else call missing(outvar);
  put outvar=;
run;

data test2;
  var = "    "; /* 4 spaces */
  length outvar $5;
  outvar = ifc(not missing(var), substr(var, 1, 5), "");
  put outvar=;
run;

data test3;
  var = "     "; /* 5 spaces */
  length outvar $5;
  outvar = ifc(not missing(var), substr(var, 1, 5), "");
  put outvar=;
run;

test1和test3运行得很好。但是,对于test2,我会收到以下警告/注释:Invalid third argument to function SUBSTR

虽然我理解这一点的含义,但尚不清楚为什么要从一开始就触发它,因为它不应该在ifc函数中计算该表达式。无论逻辑测试的结果如何,ifc函数都在计算这两个表达式。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-09-11 13:09:19

IFC/N计算所有参数中的所有表达式。SUBSTRN函数应该修复消息并给出所需的结果。

票数 2
EN

Stack Overflow用户

发布于 2019-09-10 07:40:41

SAS不使用惰性评估。

在应用ifc之前,SAS计算其所有参数,

所以如果你

代码语言:javascript
复制
data test2;
  var = "    "; /* 4 spaces */
  length outvar $7;
  outvar = ifc(not missing(var), substr(var, 1, 5), "");
  put outvar=;
run;

SAS将评估

  • not missing(var),这会导致错误。
  • substr(var, 1, 5),wich给出了一个错误
  • "",wich结果为空字符串。

因此,错误发生在执行ifc之前。

但如果你屈服

代码语言:javascript
复制
data test1;
  var = "    "; /* 4 spaces */
  length outvar $5;
  if not missing(var) then outvar = substr(var, 1,5);
  else call missing(outvar);
  put outvar=;
run;

SAS将评估not missing(var),这将导致错误。接下来它会

  • 不回避substr(var, 1, 5)
  • ,但是只计算"",wich结果为空字符串。
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57860382

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档