【发布时间】:2018-04-13 02:19:42
【问题描述】:
我想将 sas 数据集与查找表连接,但用于连接的列/键是查找表中的值
数据集:table4
ID lev1 lev2 lev3 lev4 lev5
1 12548 14589 85652 45896 45889
2 12548 14589 85652 45896 45890
3 12548 14547 85685 45845 45825
4 66588 24647 55255 30895 15764
查表:
context table_name column operator value
extract table1 col1 equals xyd
asset table2 var1 equals 11111
asset table2 var2 equals 25858
prod table3 x1 equals 87999
unprod table4 lev2 equals 14589
unprod table4 lev2 equals 14589
unprod table4 lev3 equals 55255
现在我想将 table4 与查找表连接,但只能使用字段 lev2 和 lev3(它是动态的,因此将来可能会更改,所以不想在其中进行硬编码)。
我尝试过下面的代码,但不想硬编码,因为字段是动态的(将来有人可能还会添加 lev4)。
proc sql ;
create table want as
select ID
from table4 as a
inner join lookup as b
on a.lev2 = input(value,12.) or a.lev3=input(value,12.)
where Context="unprod";
quit;
提前致谢。
【问题讨论】:
-
您能否转置第一个表,以便只有一列用于连接?这样就可以完全避免这个问题?
-
感谢您的回复。不幸的是,每个级别都有 1000 个值,并且大约有 20 个级别。上面的表格只是解释我想要实现的目标的示例。
-
这使得转置数据的情况更强大,不是吗。这样,无论有多少列或多少级别,解决方案都将是完全动态的......
-
发布您期望的输出,并将您的数据作为数据步骤发布,我将模拟解决方案。如果您不知道如何包含数据步骤说明,请参见此处:communities.sas.com/t5/SAS-Communities-Library/…
-
那不是查找表。这是一套规则。你想对规则做什么?