【发布时间】:2012-04-10 15:11:59
【问题描述】:
如何在 SQL 中使用宏? (对于每一件事,都被选中)
我的意思是这样的:
&VarTable 是一个表,其中有两个变量:(例如)Lib 和 Table
&VarTable 中的每个观察都是表的名称:Lib.Table
我要为每张桌子做事:
1) 存在吗?
2) 排序
最后一个条件:
每个表(如果存在)都有一个变量&VarField。
%macro mSortedTable(vLib,vTab,vVar);
%if %sysfunc(exist(&vLib..&vTab)) %then %do;
proc sort data = &vLib..&vTab;
by &vVar;
run;
&vLib..&vTab
%end;
%else %do; "" %end;
%mend mSortedTable;
proc sql noprint;
select %mSortedTable(vLib=Lib,vTab=Table,vVar=&VarField)
into: AccumVar separated by " "
from &VarTable;
quit;
如何使用 sql 和宏来做到这一点?
【问题讨论】:
-
避开第一个问题:当然,这段代码不起作用
-
那么对于一个包含对库和数据集名称的观察的数据集,您想对每个数据集执行操作吗?并且要将每个变量名放入宏中?
-
是的。我的同伴说我可以做到这一点,使用猫和宏生成:proc sql noprint;
select cats('%mSortedTable(',Lib,',',Table,',',&VarField,')') into: AccumVar separated by " "但这个变体不能在数据步中使用,所以我决定用两个宏使用相同的结构,首先排序,另一个将命名Lib.Table