请有人解释一下我用ifc函数观察到的一种奇怪的行为:
我进行了以下3项测试:
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函数都在计算这两个表达式。
发布于 2019-09-11 13:09:19
IFC/N计算所有参数中的所有表达式。SUBSTRN函数应该修复消息并给出所需的结果。
发布于 2019-09-10 07:40:41
SAS不使用惰性评估。
在应用ifc之前,SAS计算其所有参数,
所以如果你
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之前。
但如果你屈服
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结果为空字符串。https://stackoverflow.com/questions/57860382
复制相似问题