SAS中文论坛

 找回密码
 立即注册

扫一扫,访问微社区

查看: 744|回复: 6
打印 上一主题 下一主题

如何给全体数据集改名

[复制链接]

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
楼主
 楼主| 发表于 2009-11-23 16:57:27 | 只看该作者

如何给全体数据集改名

有个文件夹下的十几个数据集名 格式都是PPSY_%的形式,可是下划线后面接的位数不同 有的是PPSY_CC21 有的是PPSY_CC33345 现在我想把所有数据集的名字前面的PPSY_都去掉 请问如何操作?谢谢!
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
沙发
 楼主| 发表于 2009-11-23 17:18:37 | 只看该作者

Re: 如何给全体数据集改名

这个可以用total comander的multi-rename tool,这是一个文件夹管理软件,很好用,呵呵。不知道怎么用sas改。
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
板凳
 楼主| 发表于 2009-11-24 09:15:45 | 只看该作者

Re: 如何给全体数据集改名

下面的程序只是随手写的,请自己调试。
[code:3jbw77yw]
%macro a;
options nofmterr;
libname mylib '<文件夹>';

proc contents data=mylib._ALL_ out=a noprint;
run;
proc sql;
create table tabnam as
select distinct memname from a;
quit;
data tabnam;
set tabnam;
if substr(memname,1,5)='PPSY_' then do;
memname_new=substr(memname,6,length(strip(memname))-5);
output;
end;
run;
data _NULL_;
set tabnam end=final;
call symput('old'||trim(left(put(_N_,best.))),memname);
call symput('new'||trim(left(put(_N_,best.))),memname_new);
if final then call symput('tabno',trim(left(put(_N_,best.))));
run;
%do i=1 %to &tabno;
data &&new&i;
set &&old&i;
run;
%end;
%mend a;
%a
[/code:3jbw77yw]
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
地板
 楼主| 发表于 2009-11-24 10:56:00 | 只看该作者

Re: 如何给全体数据集改名

死猪头
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
5#
 楼主| 发表于 2009-11-24 11:17:10 | 只看该作者

Re: 如何给全体数据集改名

恩,没想到,呵呵。
我写了个例子,
proc datasets library=mylib nolist;
        change Ppsy_t1=t1 Ppsy_t2=t2 / memtype=data;
run;
quit;

不过如果想批量修改的话还是要用到宏语句呢。
proc datasets library=mylib nolist;
        change %do i=1 %to %tabno; &&old&i=&&new&i %end;/ memtype=data;
run;
quit;
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
6#
 楼主| 发表于 2009-12-1 21:57:19 | 只看该作者

Re: 如何给全体数据集改名

data abc;
   input x1 x2 x3;
   datalines;
0.91 0.54 0.47
0.61 0.01 0.20
0.74 0.87 0.53
0.24 0.32 0.82
0.72 0.34 0.95
0.96 0.23 0.76
0.54 0.25 0.20
0.61 0.25 0.27
0.89 0.86 0.85
0.03 0.99 0.99
0.23 0.96 0.17
;
run;
proc transpose data=abc out=ex name=name;
run;
data ex;
   set ex;
   name=catt(name,'_sdf');
   run;
proc transpose out=abc(drop=_name_);
   id name;
   run;


去掉的话用scan就ok了。
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
7#
 楼主| 发表于 2009-12-1 21:59:27 | 只看该作者

Re: 如何给全体数据集改名

用sql也可以改。
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-2-6 06:25 , Processed in 0.156289 second(s), 21 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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