SAS中文论坛

 找回密码
 立即注册

扫一扫,访问微社区

查看: 1193|回复: 4
打印 上一主题 下一主题

How to rename all variables

[复制链接]

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
楼主
 楼主| 发表于 2007-1-14 16:58:30 | 只看该作者

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
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
沙发
 楼主| 发表于 2007-1-15 12:15:14 | 只看该作者

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;

%rename_vars(ds=work.test, prefix=temp);[/code:0d76b]
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
板凳
 楼主| 发表于 2007-1-23 10:59:23 | 只看该作者

sql

[code:aeeca]PROC CONTENTs data=test MEMTYPE=DATA OUT=test2(KEEP=NAME)  NOPRINT;
run;

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]
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
地板
 楼主| 发表于 2007-1-24 19:02:38 | 只看该作者

继续问

peachcat
在这个帖子里面说可以用array的方式:

<!-- m --><a class="postlink" href="http://sasor.feoh.net/modules.php?name=Forums&amp;file=viewtopic&amp;t=1912&amp;highlight=%C5%FA%C1%BF&amp;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_&amp;vaname&#46;;
end;
run;[/code:767ef]


运行后的提示是:

[code:767ef]ERROR 241-185&#58; The array all is not allowed in a DROP/KEEP/RENAME context&#46;[/code:767ef]


请看看怎么解决这个问题!!
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
5#
 楼主| 发表于 2007-1-25 21:46:38 | 只看该作者

回复

二楼版主的代码感觉就很简单了呀,并且实现了“软编码”,代码运行起来独立于数据集的。
下面给出sasor上的数组解决办法,有 a b c d ...这样依赖于具体某个数据集的变量名的代码。如果来了另一个数据集需要重命名,那就不得不修改代码才可以了。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|手机版|Archiver|SAS中文论坛  

GMT+8, 2025-6-11 11:05 , Processed in 0.068418 second(s), 19 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表