gpt4 book ai didi

macros - 用于调用数据集并将其连接起来的宏

转载 作者:行者123 更新时间:2023-12-02 07:06:51 25 4
gpt4 key购买 nike

我知道如何从我的文件夹中调用不同的表。这是通过函数:%let x1 = libname.foldername 完成的。我的问题是如何使用一个简单的宏在 1000 个表上执行此操作

SAS

%Let Table1=project.table_201710; 
%Let Table2=project.table_201711;
%Let Table3=project.table_201712;
%Let Table4=project.table_201801;
%Let Table5=project.table_201802;
%Let Table6=project.table_201803;
%Let Table7=project.table_201804;
%Let Table8=project.table_201805;
%Let Table9=project.table_201806;
%Let Table10=project.table_201807;
%Let Table11=project.table_201808;
%Let Table12=project.table_201809;

%Macro ConcatTable;
Data project.TABLE_FINALE;
Set
%Do i=1 %To 12;
&&Table&i.
%End;
;
Run;
%Mend ConcatTable;
%ConcatTable

最佳答案

我会避免将数据从数据集中移动到宏变量中。

首先要尝试的是根本不使用宏编码。尝试仅使用数据集列表。如果您可以找到所需数据集的一个或多个常见前缀。

data project.TABLE_FINALE; 
set project.TABLE_20: ;
run;

如果您确实想将列表放入宏变量中,那么如果您只是将列表放入单个宏变量中,那么概念上会更清晰,编码也会更容易。

proc sql noprint;
select dsname into :dslist separated by ' '
from mylist;
quit;

data project.TABLE_FINALE;
set &dslist;
run;

但是,如果您确实有 1,000 个数据集,那么可能太多,无法放入单个宏变量中(限制 65K 字符)。

您还可以仅从数据生成代码,而不是使用宏来生成代码。这样就不需要将任何数据移动到宏变量中。例如,您可以使用 CALL EXECUTE()

data _null_;
set mylist end=eof;
if _n_=1 then call execute('data project.TABLE_FINALE; set');
call execute(' '||trim(dsname));
if eof then call execute(';run;');
run;

关于macros - 用于调用数据集并将其连接起来的宏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56221445/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com