遍历名称时是否可以跳过丢失的数据集?

时间:2019-07-08 09:15:46

标签: dataframe sas sas-macro

我在SAS中有一些数据集,我试图将它们整理为一个较大的数据集,稍后将对其进行过滤。它们都被称为table_201802之类的东西。我的问题是缺少几个月(也就是说,存在table201802table201804及以上,但没有table201803

我对SAS还是很陌生,但是到目前为止,我已经尝试创建一个名为output testing的新数据集,并运行一个遍历名称的宏循环(它们来自201802201903,它们是月度数据,因此从812到900的数据将不存在。

data output_testing;
set
%do i=802 %to 812;
    LIBRARY.table_201&i
%end;
;
run;
%mend append;

我希望代码忽略丢失的表,只查找确实存在的表,然后将它们附加到新的output_testing表中。

3 个答案:

答案 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

相关问题