比较 - 比较具有不同大小和不同变量位置的两个数据集中的变量

时间:2014-09-17 08:53:47

标签: compare sas proc 4gl

所以,我对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; 

2 个答案:

答案 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但在另一个数据集中不存在。

相关问题