【问题标题】:Append of Tables with the Same Variables but Differing Attributes附加具有相同变量但不同属性的表
【发布时间】:2019-01-24 12:08:12
【问题描述】:

我的问题是关于应该具有相同名称/格式/类型/长度变量的两个不同表的附加。

我正在尝试在我的 SAS 程序中创建一个步骤,如果同名变量的格式/类型/长度不同,我不允许执行我的程序。 例如,当在一个表中我有一个类型为字符串“dd-mm-yyyy”的日期时,在另一个表中我有一个“yyyy-mm-dd”或“dd-mm-yyyy hh:mm:ss”。追加后,我们基于这些输入表的日常执行没有按预期工作。由于格式不同,有时值会出现缺失或乱序。

我尝试使用 PROC COMPARE 语句,它允许我检查哪些变量具有不同的属性(类型、长度、格式、InFormat 和标签)。

proc compare base = SAS-data-set
             compare = SAS-data-set;
run;

但是,我只获得了有关哪些变量具有不同属性的信息(具有不同属性的公共变量的列表),无法对其做任何事情。

另一方面,我想知道是否有机会获得包含此信息的结构化输出表,以便将其用作控制语句。 创建一个自动任务来完成它会节省我很多时间。

示例截图:

【问题讨论】:

  • 如果可能,请显示您的示例输入数据集和示例输出数据集。有人可以帮助你。请不要以代码形式显示数据,因为有人无法试用您的代码。如何显示您的数据的一个示例是在许多 stackoverflow SAS 问题中,这是一个这样的链接。 stackoverflow.com/questions/54334541/…
  • "我试过 Proc COMPARE...",显示你试过的代码。如果您使用的是企业指南,请描述您采取的行动。
  • 您将日期和日期时间变量全部混合到一个字符列中。这很好,因为您没有破坏原始数据。我将创建一个新变量,所有日期时间,并映射显示的日期。如果您以文本形式发布示例数据,有人可以提供帮助。
  • @Richard 这就是你的意思吗? (我编辑了帖子)

标签: sas enterprise-guide


【解决方案1】:

您可以使用Proc CONTENTS 获取有关数据集变量的信息。对两个数据集都这样做,然后您可以使用Proc COMPARE 创建一个数据集,通知您变量属性的差异。

data cars1;
  set sashelp.cars (obs=10);
  date = today ();
  format date date9.;
  cars1_only = 1;
  x = 1.458; label x = "x-factor";
run;

data cars2;
  length type $50;
  set sashelp.cars (obs=10);
  format date yymmdd10.;
  cars2_only = 1;
  X = 1.548; label x = "X factor to apply";
run;

proc contents noprint data=cars1 out=cars1_contents;
proc contents noprint data=cars2 out=cars2_contents;
run;

data cars1_contents;
  set cars1_contents;
  upName = upcase(Name);
run;
data cars2_contents;
  set cars2_contents;
  upName = upcase(Name);
run;

proc sort data=cars1_contents; by upName;
proc sort data=cars2_contents; by upName;
run;



proc compare noprint 
  base=cars1_contents 
  compare=cars2_contents 
  outall 
  out=cars_contents_compare (where=(_TYPE_ ne 'PERCENT'))
;

  by upName;
run;

还有一个ODS表可以直接捕获而无需运行Proc CONTENTS,但是捕获不是'data-rific'

ods output CompareVariables=work.cars_vars;

proc compare base=cars1 compare=cars2;
run;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-28
    • 1970-01-01
    • 2013-07-31
    • 2016-01-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多