【发布时间】:2019-03-17 06:28:27
【问题描述】:
由于宏变量值的长度不能超过 (65534) 的最大长度,因此我无法为所有观察结果创建单个宏变量。我想创建一个宏来遍历我的数据集以生成几个 numeric 列表,我可以将这些列表传递给 proc sql 中的 where 语句。
而不是这个:
*proc sql noprint;
select ID into :ParaList separated by ','
from work.ID_LIST(**firstobs=1 obs=5000**);
quit;*
*proc sql noprint;
select ID into :ParaList2 separated by ','
from work.ID_LIST(**firstobs=5001 obs=10000**);
quit;*
*proc sql noprint;
select ID into :ParaList3 separated by ','
from work.ID_LIST(**firstobs=10001 obs=15000**);
quit;*
*proc sql noprint;
select ID into :ParaList4 separated by ','
from work.ID_LIST(**firstobs=15001 obs=20000**);
quit;*
我想要类似的东西:
*proc sql noprint;
select ID into :List1-Last4 separated by ','
from work.ID_LIST(**firstobs=1 obs=&LASTOBS** BY 5000);
quit;*
我想创建一个宏来循环遍历每 5000 次左右的观察,直到最后一次观察我可以传递到 where 语句中,例如 where id in (&ParaList,&ParaList2,&ParaList3,&ParaList4)。我知道有其他选择,例如
id in (select id from work.table)
但在这种情况下,它不起作用。我正在通过 SAS 查询 Hadoop,除了传递宏变量列表之外没有任何成功。
【问题讨论】:
-
对于稍微不同的方法,请查看此答案中的
%ds2list宏:stackoverflow.com/questions/49899251/…。它将列表作为输出流式传输,因此它不会受到宏变量的相同限制。 -
关于
id in (select id from work.table),您可以使用SASTRACE选项来记录SAS/Access 库引擎正在执行的较低级别的活动吗?
标签: loops sas sas-macro proc-sql