我在 SAS 中有一些数据集,我正在尝试将其整理成一个更大的数据集,稍后我将对其进行过滤。他们都被称为类似的东西table_201802。我的问题是缺少几个月份(即存在table201802和table201804以及 up,但不存在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;
Run Code Online (Sandbox Code Playgroud)
我希望代码忽略丢失的表,只查找确实存在的表,然后将它们附加到新output_testing表中。
如果表名前缀不同,并且您确信表之间的数据结构是一致的(变量名称、类型和长度相同),则可以使用表名前缀列表( )来堆叠:表
对于特定的已知范围的表名称,您还可以使用编号范围列表 ( -) 选项卡
data have190101 have190102 have190103;
x =1;
run;
data want_version1_stack; /* any table name that starts with have */
set have:;
run;
data want_version1b_stack; /* 2019 and 2020 */
set have19: have20:;
run;
options nodsnferr;
data want_version2_stack; /* any table names in the iterated numeric range */
set have190101-have191231;
run;
options dsnferr;
Run Code Online (Sandbox Code Playgroud)
来自帮助
将数据集列表与 SET 结合使用
您可以将数据集列表与 SET 语句结合使用。数据集列表提供了一种引用现有数据集组的快速方法。这些数据集列表必须是名称前缀列表或编号范围列表。名称前缀列表是指以指定字符串开头的所有数据集。例如,设置 SALES1:; 告诉 SAS 读取以“SALES1”开头的所有数据集,例如 SALES1、SALES10、SALES11 和 SALES12。>
编号范围列表 要求您拥有一系列具有相同名称的数据集,但最后一个或多个字符除外,它们是连续的数字。在编号范围列表中,您可以以任何数字开始并以任何数字结束。例如,这些列表引用相同的数据集:
- 销售1 销售2 销售3 销售4
- 销售1-销售4