【发布时间】:2019-03-11 22:45:09
【问题描述】:
我最近迁移到 SAS 9.4,发现 IFN 和 IFC 函数存在一个奇怪的错误。请参阅下面的代码说明 IFN 功能:
data a;
input b 8.;
datalines;
0.1
150
110
9.1
1
0
;
run;
proc sql;
create table test as
select b, (IFN(b = . | b > 100 | b < 1 ,1,0)) as f_no_overlap length = 8,
(IFN(b in (.,0) | b > 100 | b < 1 ,1,0)) as m_overlap length = 8,
(IFN(b in (.,0) | b < 1 ,1,0)) as u_no_100,
(IFN(b in (0,110) | b < 1 | b > 100 ,1,0)) as b_no_null,
(IFN(b = 0 | b < 1 | b > 100 | b= . ,1,0)) as h_last_miss,
(IFN(b = . | b = 0 | b < 1 | b > 100,1,0)) as k_first_null,
(IFN(b = 0 | b = . | b < 1 | b > 100,1,0)) as y_second_null,
(IFN(b = 0 | b < 1 | b = . | b > 100,1,0)) as l_third_null,
(IFN(b < 1 | b = 0 | b = . | b > 100,1,0)) as o_first_one from a;
quit;
为什么它在 9.4 的相同条件下表现得如此奇怪,主要是它似乎是 NULL in condition 似乎导致了问题。 有没有人遇到过同样的问题?我们有解决方案吗?
【问题讨论】:
-
如果“NULL”是指“缺失”,请尝试检查缺失值的设置(可能不是“.”)。尝试运行
proc options option = missing; run;并检查日志中显示的值。 -
由于该代码中没有什么特别需要 SQL 尝试将其重写为数据步骤并在两个版本的 SAS 中运行。另外,您为什么要使用 IFN() 来生成布尔答案?您可以将
ifn(condition,1,0)替换为condition,SAS 仍会生成 1 表示真,0 表示假.. -
您运行的是哪个版本的 SAS?我无法重现
sysvlong= 9.04.01M5P091317的错误。 -
@Tom - 我在 SAS (r) Proprietary Software Release 9.4 TS1M4 上。既然您提到您没有看到这些错误结果,您能告诉我您使用的是什么版本吗?
-
我已经发过了。 9.4M5.
标签: sas