所以,我对proc比较有一个重大问题。我有两个列的两个数据集。一列列出表名,另一列列出与第一列中的表名对应的变量名。我想根据第一列的值比较其中一个的值。我有点使它工作,但事实是这些数据集由于其中一个的附加值而具有不同的大小。这意味着在数据集的中间添加了一些新变量(将新变量添加到表中)。不幸的是,proc比较水平地比较来自两个数据集的值并且相互检查它们的值,所以在我的情况下它看起来像这样:
ds 1 | ds 2
cost | box_nr
other | cost_total
正如您所看到的,新值box_nr
已添加到第二个数据集中,该数据集显示在我希望它将变量cost
与(cost_total
)进行比较的值之上。所以我想知道是否可以比较具有至少最小相似性的值(检查字符序列的差异) - 例如3个字母(cos),或者是否可以将box_nr
之类的值放在结束表明它们没有出现在某个数据集中。
我的代码:
PROC Compare base=USERSPDS.MIzew compare=USERSPDS.MIwew
out=USERSPDS.result outbase outcomp outdif noprint;
id 'TABLE HD'n;
where ;
run;
proc print data=USERSPDS.result noobs;
by 'TABLE HD'n;
id 'TTABLE HD'n;
title 'COMPARISON:';
run;
答案 0 :(得分:0)
未经测试,但这应该可以帮到你。
proc sql;
create table compare as
select
coalesce(a.cola, b.cola) as cola,
a.colb as acolb,
b.colb as bcolb
from dataa as a
full outer join datab as b
on
a.cola = b.cola and
compged(a.colb, b.colb) <= 100;
quit;
请查看compged documentation以获取更多信息。
答案 1 :(得分:0)
听起来你可以在两个数据集中创建一个新变量VAR3chars = substr(var,1,3),然后将该变量添加到你的ID语句中。我认为除非有重复的值,否则应该有效。
因此,如果一个数据集的var =&#34; cost&#34;另一个有var =&#34; cost_total&#34;,它们会匹配id,所以它们会被比较,发现它们是不同的。
如果一个数据集有var =&#34; box_nr&#34;而另一个没有以&#34; box&#34;开头的任何值,它们在id上不匹配,因此compare会发现在一个数据集中存在该id但在另一个数据集中不存在。