我的问题是关于应该具有相同名称/格式/类型/长度变量的两个不同表的追加。
我试图在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;
但是,我只得到有关变量具有不同属性的信息(列出具有不同属性的常见变量),无法对此做任何事情。
另一方面,我想知道是否有机会使用此信息构建结构化的输出表,以便将其用作控制语句。 创建一个自动任务可以节省很多时间。
一个示例的屏幕截图:
答案 0 :(得分:0)
您可以使用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
,但是捕获不是“数据密集型”
ods output CompareVariables=work.cars_vars;
proc compare base=cars1 compare=cars2;
run;