【发布时间】:2019-08-26 21:04:02
【问题描述】:
我有需要处理的变量块。我将变量块名称列表放入宏变量中。然后我创建了一个宏变量列表,我想将变量列表传递到其中。我正在尝试使用此代码遍历列表,但唯一保留了一个名为 nextlist 的宏变量,用于最后一个变量块。如何获取 SQL 代码以将值列表放入我从 &blockvarlist 宏列表输入的宏中?
我在 SAS 9.4 中运行它
PROC SQL ; SELECT DISTINCT FINAL_NAME INTO :&next SEPARATED BY " " FROM
metadata4b
where varblockname = "&next2" and type = "Num" and
(index(final_name,"_NA") = 0 and index(final_name,"_1NA")
= 0 and index(final_name,"_2NA") = 0 ); QUIT;
%put &blocklist;
/*result of put: Q11 Q11_10N Q11_11N Q11_12N Q38_list*/
%put &blockvarlist;
/*result of put: Q11_10N_list Q11_11N_list Q11_12N_list Q38_list*/
%macro createarray;
%global i nextblock;
%do i = 1 %to %sysfunc(countw(&BLOCKLIST));
%let nextblock = %scan(&BLOCKLIST, &i, %str( ));
%let nextlist = %scan(&BLOCKVARLIST, &i, %str( ));
PROC SQL; SELECT DISTINCT FINAL_NAME INTO :nextlist SEPARATED BY
" " FROM metadata4b
where varblockname = "&nextblock" and type = "Num" and
(index(final_name,"_NA") = 0 and index(final_name,"_1NA")
= 0 and index(final_name,"_2NA") = 0 ); QUIT;
%end;
%mend;
%createarray;
我想生成一系列可以稍后引用的宏变量。例如 Q38_list 将包含该问题块中的变量列表:Q38_CIR Q38_FRM Q38_OTR Q38_SCR
【问题讨论】:
-
你熟悉变量快捷键吗?您可以使用 Q38: 来引用所有以 Q38 开头的变量。
-
为什么块列表(&BLOCKLIST)有5个条目,而宏变量名列表(&BLOCKVARLIST)只有4个条目?
-
你为什么要把变量名列表放到宏变量中?看起来您已经拥有数据集中的变量名称列表。为什么不将数据集用于您打算使用宏变量的任何目的。那么每个“块”的变量数将不受宏变量最大长度的限制。