【发布时间】:2015-03-06 19:10:30
【问题描述】:
我是 SAS 新手。我需要进行 x- 次迭代来填充我的名为 MYRS 的数据集。
每次迭代都需要 JOIN TABLE1 与 (TABLE2+ MYRS) MINUS 已经在 MYRS 表中的记录。
然后,我需要用其他匹配更新MYRS 表。目标是跟踪一系列电子邮件。
MYRS 本质上是TABLE1 的副本,并包含匹配的记录。有点棘手。 (简化模式)。 Table1 可以有 DUPS。
例如
TABLE1:
ID | EMAIL1 | EMAIL2 | EMAIL3 | EMAIL4|
1 | A | s | d | F
2 | g | F | j | L
3 | z | x | L | v
4 | z | x | L | v
2 | g | F | j | L
TABLE2:
EMAIL
A
MYRS (starts as empty dataset)
EMAIL1 | EMAIL2 | EMAIL3 | EMAIL4
逻辑:TABLE1 的电子邮件与TABLE2 中的电子邮件匹配。因此,需要显示此记录。其他记录与 TABLE2 中的任何内容都不匹配。但是因为Record1和Record2共享the same ALTERNATIVE emailF,所以Record2也需要显示。但是因为Record2 和Record3 共享相同的备用电子邮件L,所以Record3 也需要显示。所以第四个......
proc sql;
SELECT TABLE1.id,
TABLE1.email1,
TABLE1.email2,
TABLE1.email3,
TABLE1.email4
FROM TABLE1
INNER JOIN (
SELECT EMAIL
FROM TABLE2
UNION
SELECT EMAIL1 AS EMAIL
FROM MYRS
UNION
SELECT EMAIL2 AS EMAIL
FROM MYRS
UNION
SELECT EMAIL3 AS EMAIL
FROM MYRS
UNION
SELECT EMAIL4 AS EMAIL
FROM MYRS
)
ON EMAIL=EMAIL1 OR EMAIL=EMAIL2 OR EMAIL=EMAIL3 OR EMAIL=EMAIL4
WHERE TABLE1.id NOT IN (
SELECT DISTINCT ID
FROM MYRS
)
quit;
如何创建以下逻辑:
- 将其包装成某种函数
- sql执行前,统计MYDS中的记录数并保存
- 执行 SQL 并更新 MYDS
- 统计MYDS中的记录数
- 如果 MYDS 计数未更改,则停止执行
- 否则,转到 #3
我对 SAS 非常陌生(准确地说是 3 天),我正在尝试将所有内容放在一起。 (如果我要在 Java 中这样做,我会使用上面的逻辑)
【问题讨论】:
-
您可能会编写一个宏来按照您上面设置的方式执行此操作,但我的一部分人说如果您重组数据,您可能会有更好的选择。你能发布一个有效的例子吗,我很难想象这个问题。
-
根据您的数据大小,哈希表可能是解决此类问题的理想选择。