【问题标题】:Proc compare - comparing variables in two datasets that have different sizes and different variable placementProc compare - 比较两个数据集中具有不同大小和不同变量位置的变量
【发布时间】:2014-09-17 08:53:47
【问题描述】:

所以,我对 proc 比较有一个重大问题。我有两个包含两列的数据集。一列列出表名,另一列列出与第一列中的表名相对应的变量名称。我想根据第一列的值比较其中一个的值。我在某种程度上使它起作用,但问题是这些数据集由于其中一个数据集的附加值而具有不同的大小。这意味着在数据集的中间添加了一些新变量(新变量已添加到表中)。不幸的是,proc compare 水平比较来自两个数据集的值并相互检查它们的值,所以在我的例子中它看起来像这样:

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; 

【问题讨论】:

  • 我尝试了半个小时来理解你的问题,但没有成功。如果重写呢?

标签: compare sas proc 4gl


【解决方案1】:

未经测试,但这应该可以帮助您。

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 了解更多信息。

【讨论】:

    【解决方案2】:

    听起来您可以在两个数据集中创建一个新变量 VAR3chars=substr(var,1,3),然后将该变量添加到您的 ID 语句中。我认为这应该有效,除非有重复的值。

    因此,如果一个数据集具有 var="cost" 而另一个具有 var="cost_total",它们将在 id 上匹配,因此它们将被比较并发现不同。

    如果一个数据集有 var="box_nr" 而另一个数据集没有任何以 "box" 开头的值,则它们不会在 id 上匹配,因此比较会发现在一个数据集中存在该 id 的记录,但不是其他。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-12-29
      • 1970-01-01
      • 1970-01-01
      • 2014-01-30
      • 2022-01-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多