楼主: Rock2000
10104 12

批量修改变量名 [推广有奖]

  • 1关注
  • 24粉丝

已卖:6892份资源

学术权威

23%

还不是VIP/贵宾

-

威望
1
论坛币
104790 个
通用积分
51.9656
学术水平
55 点
热心指数
74 点
信用等级
48 点
经验
23510 点
帖子
520
精华
0
在线时间
10924 小时
注册时间
2004-5-27
最后登录
2025-11-12

楼主
Rock2000 发表于 2012-10-15 17:57:23 |AI写论文
10论坛币
有一数据库,变量名没有规律,现想把所有变量(除ID)后面加“_1”,就是由d a b c d e f g h变成id a_1 b_1 c_1 d_1 e_1 f_1 g_1 h_1,程序怎样实现?

data a;
input id a b c d e f g h@@;
datalines;
1 2 3 4 5 6 7 8 9 0
1 3 5 5 6 8 0 5 2 3
;
run;

关键词:Lines Input Data line put 数据库 程序

回帖推荐

Imasasor 发表于2楼  查看完整内容

本帖被以下文库推荐

沙发
Imasasor 发表于 2012-10-15 17:57:24
  1. data a;
  2. input id a b c d e f g h ;
  3. datalines;
  4. 1 2 3 4 5 6 7 8 9 0
  5. 1 3 5 5 6 8 0 5 2 3
  6. ;
  7. run;

  8. proc sql;
  9. create table b as select * from dictionary.columns
  10. where libname="WORK" and memname="A";
  11. quit;  /*提取数据集所有变量生成b*/

  12. proc sql;
  13. select count(*) into:n from b;
  14. quit; /*计算变量个数,赋值给宏变量n*/

  15. proc sql;
  16. select name into: var1-:var%left(&n) from b;
  17. quit; /*将全部变量赋给n个宏变量*/

  18. %macro rename;
  19. data a;
  20. set a;
  21. %do i=1 %to &n;
  22. rename &&var&i=&&var&i.._1;
  23. %end;
  24. run;
  25. %mend; /*宏循环*/
  26. %rename
复制代码
已有 2 人评分经验 论坛币 学术水平 收起 理由
bakoll + 3 + 3 精彩帖子
数据分析师3K + 20 + 5 热心帮助其他会员

总评分: 经验 + 3  论坛币 + 23  学术水平 + 5   查看全部评分

欢迎加入亚太地区第一R&Python数据挖掘群: 251548215;

藤椅
Rock2000 发表于 2012-10-15 23:06:03
谢谢,楼上可以解决。

板凳
webgu 发表于 2012-10-16 08:01:59
已有 1 人评分学术水平 热心指数 信用等级 收起 理由
Rock2000 + 5 + 5 + 5 补偿

总评分: 学术水平 + 5  热心指数 + 5  信用等级 + 5   查看全部评分

SAS资源
1. SAS 微信:StatsThinking
2. SAS QQ群:348941365

报纸
Rock2000 发表于 2012-10-16 10:57:09
我对宏比较难理解,就这例子,下面程序怎样修改实现?

************************;
***macro definition;
************************;
%macro renamevar(dslib,dsname,prefix,suffix,fromnum,tonum) ;
ods   listing close;
ods trace on;
ods output variables=varlist  ;
proc contents data=&dslib..&dsname;
run;
ods trace off;
ods listing;

proc sql;
  select  cats(variable,"=","&prefix._",variable,"_&suffix")
            into :renamelist  separated by " "
from  varlist
where num between &fromnum and &tonum;
quit;

*********************************************************************;
*** thanks for  Malcolm's suggestion; proc datasets is more efficient.
***********************************************************************;
proc datasets lib=&dslib ;
  modify  &dsname;
  rename &renamelist;
run;
%mend renamevar;

******************;
*** do it;
*****************;

%renamevar(sashelp,class,pre,suf,3,5);

地板
shirly_zhang 发表于 2012-10-16 14:39:18

************************;
***macro definition;
************************;
%macro renamevar(dslib,dsname,prefix,suffix,fromnum,tonum) ;
ods   listing close;
ods trace on;
ods output variables=varlist  ;
proc contents data=&dslib..&dsname;
run;
ods trace off;
ods listing;

proc sql;
   select  cats(variable,"=","&prefix.",variable,"&suffix")
             into :renamelist  separated by " "
from  varlist
where num between &fromnum and &tonum;
quit;

proc datasets lib=&dslib ;
   modify  &dsname;
   rename &renamelist;
run;
quit;
%mend renamevar;

******************;
*** do it;
*****************;
***%rename(库名,dataset,前缀,后缀,startvar,endvar)
%renamevar(work,a,,_1,2,8);
已有 1 人评分学术水平 热心指数 信用等级 收起 理由
Rock2000 + 1 + 1 + 1 补偿

总评分: 学术水平 + 1  热心指数 + 1  信用等级 + 1   查看全部评分

7
Rock2000 发表于 2012-10-16 18:40:55
谢谢以上2位,更灵活。

8
webgu 发表于 2012-10-17 13:18:21
Rock2000 发表于 2012-10-16 18:40
谢谢以上2位,更灵活。
客气啦,共同学习。
SAS资源
1. SAS 微信:StatsThinking
2. SAS QQ群:348941365

9
zhentao 发表于 2012-10-19 09:32:07
跟着学习。

10
数据分析师3K 发表于 2012-10-19 11:40:06
Imasasor 发表于 2012-10-15 17:57
深入浅出 简单有效

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

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2025-12-29 09:51