【发布时间】:2018-02-25 00:18:19
【问题描述】:
这里是 SAS 的新手。我正在尝试使用列表中的新值来重命名数据集中的变量。由于我有多个文件需要重命名超过 100 个变量,因此我创建了以下宏,并尝试使用新名称传递列表。但是,我不确定如何传递变量列表并在宏中正确循环。现在我在 %do 循环中收到错误消息:“错误:%DO I 循环的 %TO 值无效。”
任何指导将不胜感激。
新变量列表来自另一个宏,它保存在 &newvars 中。 文件中的变量个数与列表中的变量数相同,替换顺序也相同。
%macro rename(lib,dsn,newname);
proc sql noprint;
select nvar into :num_vars from dictionary.tables
where libname="&LIB" and memname="&DSN";
select distinct(nliteral(name)) into:vars
from dictionary.columns
where libname="&LIB" and memname="&DSN";
quit;
run;
proc datasets library = &LIB;
modify &DSN;
rename
%do i = 1 %to &num_vars.;
&&vars&i == &&newname&i.
%end;
;
quit;
run;
%mend rename;
%rename(pga3,selRound,&newvars);
提前谢谢你。
【问题讨论】:
-
大家好,我又回到了同样的问题。现在,我有了包含特殊字符的变量列表。对于以下语句,变量 vars 的列表具有时髦的字符。我尝试使用 qscan() 但效果不佳。有任何想法吗?这就是我现在拥有的:
-
%macro rename(LIB,DSN,newname); proc sql noprint; select nliteral(name) into:vars1 - from dictionary.columns where libname=%upcase("&LIB") and memname=%upcase("&DSN") order by VARNUM; %let num_vars=&sqlobs;跑; proc 数据集库 = &LIB;修改 &DSN;将 %do i = 1 % 重命名为 &num_vars.; %qscan(&vars,&i) = %scan(&newname,&i,%str()); %结尾;跑;辞职; %修改重命名;