楼主: webgu
6725 12

[原创博文] 你还在为批量重命名变量发愁吗? [推广有奖]

贵宾

学科带头人

95%

还不是VIP/贵宾

-

TA的文库  其他...

Python与统计

SAS与统计

威望
2
论坛币
102554 个
通用积分
3.6187
学术水平
475 点
热心指数
493 点
信用等级
434 点
经验
62369 点
帖子
1555
精华
4
在线时间
2201 小时
注册时间
2009-5-4
最后登录
2024-4-23

初级学术勋章 初级热心勋章 初级信用勋章 中级学术勋章 中级热心勋章 中级信用勋章

楼主
webgu 发表于 2012-5-17 21:29:38 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
数据集里变量太多,没有规律,如何重命名着实让人烦。

分享一个简单的例子。如何批量给某些变量加些前缀或后缀

以sashelp.class 数据集为例。

http://blog.sina.com.cn/s/blog_41889b90010153bh.html



  1. ************************;
  2. ***macro definition;
  3. ************************;
  4. %macro renamevar(dslib,dsname,prefix,suffix,fromnum,tonum) ;
  5. ods   listing close;
  6. ods trace on;
  7. ods output variables=varlist  ;
  8. proc contents data=&dslib..&dsname;
  9. run;
  10. ods trace off;
  11. ods listing;

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

  18. *********************************************************************;
  19. *** thanks for  Malcolm's suggestion; proc datasets is more efficient.
  20. ***********************************************************************;
  21. proc datasets lib=&dslib ;
  22.   modify  &dsname;
  23.   rename &renamelist;
  24. run;
  25. %mend renamevar;

  26. ******************;
  27. *** do it;
  28. *****************;

  29. %renamevar(sashelp,class,pre,suf,3,5);
复制代码
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

关键词:批量重命名 definition suggestion EFFICIENT Variables definition contents close 命名 如何

已有 2 人评分经验 学术水平 热心指数 信用等级 收起 理由
statistics_qin + 1 + 1 + 1 精彩帖子
lance0108 + 20 精彩帖子

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

本帖被以下文库推荐

沙发
sasandr 发表于 2012-5-17 21:50:20
good to know, thanks!

藤椅
hssnow 发表于 2012-5-18 01:57:45
nice!顶起!
My Blog: http:/hssnow.name/
宁静致远

板凳
webgu 发表于 2012-5-18 08:55:01
hssnow 发表于 2012-5-18 01:57
nice!顶起!
最近忙着答辩?
SAS资源
1. SAS 微信:StatsThinking
2. SAS QQ群:348941365

报纸
可~乐 发表于 2012-5-18 10:06:33
嗯,学习了。。。提供另外一种方法参考一下~~~
  1. %macro rename(table,prefix,suffix);

  2. proc sql noprint;
  3.       select count(name),name into :_count,:_varlist separated by "|"
  4.       from sashelp.vcolumn
  5.           where libname="%upcase(%scan(&table,1,.))" and memname="%upcase(%scan(&table,2,.))";
  6.   quit;

  7.   %put &_count. &_varlist.;

  8.   %local blank result1 result2;
  9.   %local str1 str2 str3 i;
  10.   %let blank=|  |;
  11.   %let result1=;
  12.   %let result2=;
  13.   %do i=1 %to &_count;
  14.       %let str1=%scan(&_varlist,&i);
  15.       %let str2=&prefix._&str1._&suffix.;
  16.       %let str3= &str1=&str2;
  17.       %let result1=&blank&str3␣
  18.       %let result2=&result2&result1;
  19. %end;
  20. %global rename_sentence;
  21. %let rename_sentence=%sysfunc(compress(&result2,"|"));
  22. %let rename_sentence=%sysfunc(compress(&rename_sentence,"|"));
  23. %put &rename_sentence;

  24. data class;
  25.       set &table.;
  26.       rename &rename_sentence;
  27. run;
  28. %mend;

  29. %rename(sashelp.class,pre,suf);
复制代码

地板
webgu 发表于 2012-5-18 10:47:47
可~乐 发表于 2012-5-18 10:06
嗯,学习了。。。提供另外一种方法参考一下~~~
不错。思路差不多。
SAS资源
1. SAS 微信:StatsThinking
2. SAS QQ群:348941365

7
tj0412ymy 发表于 2012-5-18 12:03:58
不错,留个脚印~
对SAS和统计方面感兴趣的朋友,请加SAS学习和认证讨论群:169157207。欢迎在群上讨论!

8
hssnow 发表于 2012-5-19 00:21:03
webgu 发表于 2012-5-18 08:55
最近忙着答辩?
忙着写毕业论文啊,各种写不动。。。
My Blog: http:/hssnow.name/
宁静致远

9
mccinfo 发表于 2012-5-21 17:33:06
dataset是 很高效啊

10
hs4601 发表于 2013-12-15 17:15:33

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

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