首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SAS IFN函数卡住

SAS IFN函数卡住
EN

Stack Overflow用户
提问于 2021-05-10 17:44:49
回答 1查看 44关注 0票数 0

在我们开始我的问题之前,请注意,我故意没有在这篇文章中包含示例数据,因为我的问题发生在我的整个数据集及其子集上。我有两个数据集,其中包含以下格式的客户端数据。

代码语言:javascript
复制
Have_1
+------------+------------+------+
|     dt     |   dt_next  |  id  |
+------------+------------+------+
| 30.09.2010 | 31.10.2010 | 0001 |
+------------+------------+------+
| 31.10.2010 | 30.11.2010 | 0001 |
+------------+------------+------+
| 30.11.2010 | 31.12.2010 | 0001 |
+------------+------------+------+
| 31.12.2010 | 31.01.2011 | 0001 |
+------------+------------+------+

Have_2
+------+-------+------------+------------+
| id   | event | start_date | end_date   |
+------+-------+------------+------------+
| 0001 | 1     | 31.10.2010 | 30.11.2010 |
+------+-------+------------+------------+
| 0001 | 2     | 31.10.2010 | 31.12.2010 |
+------+-------+------------+------------+

我尝试使用IFN函数通过以下逻辑将1-0个标志放入我的数据集中:

代码语言:javascript
复制
    Proc SQL;
    Create table want as
    Select a.*
          ,ifn(a.id in (select id from have_2 where a.dt <= end_date and start_date <= a.dt_next), 1, 0) as flg_1
          ,ifn(a.id in (select id from have_2 where a.dt <= end_date and start_date <= a.dt), 1, 0) as flg_2
    From have_1 as a;
    Quit;

如果我只使用一个客户端,代码工作得很好,但是,如果我使用完整的数据集(甚至是其中的一小部分,例如只有10个客户端),那么代码就会被卡住,因为该过程开始时没有错误,但根本不会结束。我尝试为我的两个输入数据集设置索引,但没有成功。是否有任何特殊的干扰素功能,可以使它这样做?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-05-11 00:51:02

那么,如果任何事件的日期落在这些时间段内,为什么不直接加入并取所有事件的最大值呢?这应该消除了对HAVE1中的每个观察值执行两个子查询的需要。

代码语言:javascript
复制
proc sql;
  create table want2 as
  select a.id
       , a.dt
       , a.dt_next
       , max(a.dt <= b.end_date and b.start_date <= a.dt_next) as flg1
       , max(a.dt <= b.end_date and b.start_date <= a.dt) as flg2
  from have1 a 
  left join have2 b
  on a.id = b.id
  group by 1,2,3
  ;
quit;

注意:问题出于子查询,而不是IFN()函数调用。这里也不需要使用IFN()函数。SAS计算布尔表达式的值为1或0。因此,表达式a=b返回的结果与IFN(a=b,1,0)返回的结果相同。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67468213

复制
相关文章

相似问题

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