我在SAS中有一些数据集,我试图将它们整理为一个较大的数据集,稍后将对其进行过滤。它们都被称为table_201802
之类的东西。我的问题是缺少几个月(也就是说,存在table201802
和table201804
及以上,但没有table201803
。
我对SAS还是很陌生,但是到目前为止,我已经尝试创建一个名为output testing
的新数据集,并运行一个遍历名称的宏循环(它们来自201802
到201903
,它们是月度数据,因此从812到900的数据将不存在。
data output_testing;
set
%do i=802 %to 812;
LIBRARY.table_201&i
%end;
;
run;
%mend append;
我希望代码忽略丢失的表,只查找确实存在的表,然后将它们附加到新的output_testing
表中。
答案 0 :(得分:4)
如果表名前缀不同,并且您确信表之间的数据结构是一致的(变量名,类型和长度相同),则可以使用表名前缀列表({{1} })
对于特定的已知表名称范围,您还可以使用编号范围列表(:
)标签
-
来自helps
通过SET使用数据集列表
您可以将数据集列表与SET一起使用 声明。数据集列表提供了一种参考现有数据的快速方法 组数据集。这些数据集列表必须是名称前缀 列表或编号范围列表。名称前缀列表涉及所有数据 以指定字符串开头的设置。例如,设置 销售1:告诉SAS读取以“ SALES1”开头的所有数据集,例如 分别为SALES1,SALES10,SALES11和SALES12。 >
编号范围列表 要求您拥有一系列具有相同名称的数据集,但 最后一个或多个字符,它们是连续的数字。 在编号范围列表中,您可以以任何数字开头并以 任何数字。例如,这些列表引用相同的数据集:
- sales1 sales2 sales3 sales4
- sales1-sales4
答案 1 :(得分:3)
一些带有proc append的宏代码可以解决该问题。
%let n = 10;
%macro get_list_table;
%do i = 1 %to &n;
%let dsn = data&n;
%if %sysfunc(exist(&dsn)) %then %do;
proc append data = &dsn base = appended_data force;
run;
%end;
%end;
%mend;
答案 2 :(得分:2)
您可以使用模板:
data output_testing;
set LIBRARY.table_201:
;
run;
但是在这种情况下,您将设置所有以“ table_201”开头的表。 例如:
LIBRARY.table_201tablesss LIBRARY.table_201ed56