标题: How to rename all variables [打印本页] 作者: shiyiming 时间: 2007-1-14 16:58 标题: How to rename all variables I have one dataset and i wanna rename all the variables with a same prefix like S, how to do that? thanks作者: shiyiming 时间: 2007-1-15 12:15 标题: to barboxie 好问题!有没有人有更简单的好方法?因为这个需求我在实际工作中的确碰到很多次了。
[code:0d76b]%macro rename_vars(ds, prefix);
%global rename_stmt;
%let rename_stmt=;
%let dsid=%sysfunc(open(&ds, i));
%let n=%sysfunc(attrn(&dsid, nvars));
%do i=1 %to &n;
%let varname=%sysfunc(varname(&dsid, &i));
%let rename_stmt=%str(&rename_stmt &varname.=&prefix.&varname);
%end;
%let rc=%sysfunc(close(&dsid));
data &ds;
set &ds(rename=(&rename_stmt));
run;
%mend rename_vars;
PROC SQL noprint;
SELECT trim(NAME)||"="|| "S_"||trim(NAME) into: var separated by " " from test2;
quit;
DATA test;
set test;
RENAME &var;
run;[/code:aeeca]作者: shiyiming 时间: 2007-1-24 19:02 标题: 继续问 peachcat
在这个帖子里面说可以用array的方式:
<!-- m --><a class="postlink" href="http://sasor.feoh.net/modules.php?name=Forums&file=viewtopic&t=1912&highlight=%C5%FA%C1%BF&sid=6e1732c6565b0995a33388348a8bc757">http://sasor.feoh.net/modules.php?name= ... 348a8bc757</a><!-- m -->
但是我试了一下,没有成功。
如果可以,那么这种方式似乎更简单:
[code:767ef]data new1;
set userresult;
array all _numeric_;
do over all;
%let vaname=all;
rename all=xxxxxx_&vaname.;
end;
run;[/code:767ef]
运行后的提示是:
[code:767ef]ERROR 241-185: The array all is not allowed in a DROP/KEEP/RENAME context.[/code:767ef]
请看看怎么解决这个问题!!作者: shiyiming 时间: 2007-1-25 21:46 标题: 回复 二楼版主的代码感觉就很简单了呀,并且实现了“软编码”,代码运行起来独立于数据集的。
下面给出sasor上的数组解决办法,有 a b c d ...这样依赖于具体某个数据集的变量名的代码。如果来了另一个数据集需要重命名,那就不得不修改代码才可以了。