【发布时间】:2021-07-31 17:24:54
【问题描述】:
在我们回答我的问题之前,请注意我故意没有在这篇文章中包含示例数据,因为我的问题出现在我的完整数据集及其子集上。我有两个数据集,其中包含以下格式的客户端数据。
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 个标志:
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 个客户端),那么代码就会卡住,因为流程开始时没有错误但根本就没有完成。我尝试为我的两个输入数据集设置索引,但没有成功。 IFN 功能是否有任何特殊性,可以使其行为如此?
【问题讨论】:
-
IFN() 在这段代码中什么都不做,SAS 已经将布尔表达式评估为 1 (true) 或 0 (false)。您的问题与子查询有关。这两个子查询试图找到什么?为什么是子查询而不是普通的连接?
-
使用这个函数的目的是为了让代码更简洁。我曾经通过连接进行此计算,这需要两个 PROC SQL 语句。如果我可以只使用一个代码块,为什么要使用两个代码块,而不会损失太多的可读性?
-
我不明白你要计算什么。请用文字解释您要标记什么?
-
您的表格中有多少行?对于不需要
ifn的标志,只需使用已经为 false~0 true~1 的逻辑评估。您似乎正在检查存在条件,而不是编码in
标签: sas enterprise-guide