SAS中文论坛

 找回密码
 立即注册

扫一扫,访问微社区

查看: 3241|回复: 12
打印 上一主题 下一主题

急问如何在sas中进行变量的批量重命名?

[复制链接]

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
楼主
 楼主| 发表于 2005-10-25 11:27:02 | 只看该作者

急问如何在sas中进行变量的批量重命名?

假设有一组变量a b c,想在这些变量的前面都加上一个相同的字符串,如变成d_a,d_b,d_c,应该如何编程啊?
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
沙发
 楼主| 发表于 2005-11-11 00:18:32 | 只看该作者

Re:

data a;input a b c@@;cards;
1 2 3 ……
;run;
data b;set a(rename=(a=d_a b=d_b c=d_c));run;
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
板凳
 楼主| 发表于 2005-11-17 09:09:29 | 只看该作者

better solution

data one;
input a b c d e f g h i j;
cards;
1 2 3 4 5 6 7 8 9 10
;
run;

ods listing close;
ods output position = list;
proc contents data = one varnum;
run;
ods listing;

proc sql noprint;
select put(max(num), 2.) into :num from list;
select variable into :var1-:var&num from list;
select "rename_"||variable into :new1-:new&num from list;
quit;

%macro rename;

%do i = 1 %to &num.;
&&var&i = &&new&i.
%end;

%mend rename;

proc datasets lib = work;
modify one;
rename %rename;
run;
quit;
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
地板
 楼主| 发表于 2005-11-23 20:55:34 | 只看该作者

aother solution!

data one;
label a='d_a' b='d_b' c='d_c';
input a b c @@;
cards;
1 2 3
3 2 4
4 7 9
;
proc print label;
run;
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
5#
 楼主| 发表于 2005-11-23 21:46:08 | 只看该作者

to homestay

do you understand the question?
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
6#
 楼主| 发表于 2005-11-24 10:27:24 | 只看该作者

to winslow

[code:e3044]
data one;
input a b c d e f g h i j;
cards;
1 2 3 4 5 6 7 8 9 10
;
run;

ods output position = list(keep=variable);
proc contents data = one;
run;

filename test "C:\test.sas";
data _null_;
file test;
set list;
put 'd_' variable;
run;[/code:e3044]
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
7#
 楼主| 发表于 2005-11-24 14:58:04 | 只看该作者

I think wislow's is more powful.

I think wislow's is more powful.
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
8#
 楼主| 发表于 2005-12-7 10:55:23 | 只看该作者

使用PROC SQL

[code:92b5e]
假设你要重新命名字段的数据表为WORK.TEST,需要添加的前缀为"d_",代码为:
PROC SQL NOPRINT;
      SELECT TRIM(NAME)||"=d_"||TRIM(NAME)  INTO :STR_RENAME SEPARATED BY ' '
            FROM SASHELP.VCOLUMN
            WHERE LIBNAME="WORK" AND MEMNAME="TEST";
QUIT;
DATA WORK.TEST;
      SET WORK.TEST;
      RENAME &STR_RENAME;
RUN;
[/code:92b5e]
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
9#
 楼主| 发表于 2006-8-28 12:29:21 | 只看该作者

Re

各位的想法都是很好的,其中winslow的程序在sas9.0中如果不做任何改动的话,改名成功,但如果换一个数据集的话就不行了,collon的程序则只能改变变量名,而不能和原先的数据集联系起来,请各位费心做进一步的指导,谢谢!
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
10#
 楼主| 发表于 2006-8-28 21:57:17 | 只看该作者

to wmqy2004

楼上的是赵本山?
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-2-5 05:05 , Processed in 0.069861 second(s), 19 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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