楼主: capatal
6367 11

[问答] sas怎么批量重命名啊 [推广有奖]

  • 1关注
  • 0粉丝

大专生

66%

还不是VIP/贵宾

-

威望
0
论坛币
0 个
通用积分
0
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
376 点
帖子
5
精华
0
在线时间
111 小时
注册时间
2005-7-8
最后登录
2020-1-15

30论坛币
我有一百列数据,变量名没有规则(从wind导入的,股票代码不是连续的),想把变量名统一改成a1 a2 ... a100,这要如何做到啊

关键词:批量重命名 股票代码 wind IND Win
沙发
wulawula_8523 发表于 2017-8-7 12:15:12 |只看作者 |坛友微信交流群
手头没SAS,空想了一个办法供一试。大概思路是,用array建一百个新变量,命名为a1-a100,将旧变量的值赋给新变量,然后删掉旧变量。因为可以用array和--一次选取多个名字之间没有联系,但是位置连在一起的变量,所以整个程序并不会太长。如果有错误信息显示a1-a100不存在,可在Data 和 set 步骤之间先用length a1-a100 100.(用旧变量的长度,100是我瞎编的); 提前建立新变量。

data outcome;
set yourdata;
array old{100} oldvar1--oldvar100;
array new{100} a1-a100;
do i = 1 to 100;
  new[i]=old[i];
end;
delete oldvar1--oldvar100;
drop i;
run;
已有 1 人评分经验 论坛币 学术水平 热心指数 信用等级 收起 理由
admin_kefu + 20 + 20 + 1 + 1 + 1 热心帮助其他会员

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

使用道具

藤椅
capatal 发表于 2017-8-7 13:53:05 |只看作者 |坛友微信交流群
wulawula_8523 发表于 2017-8-7 12:15
手头没SAS,空想了一个办法供一试。大概思路是,用array建一百个新变量,命名为a1-a100,将旧变量的值赋给新 ...
旧变量没有规则的,不是连续的什么col1-col100,是_00591_SZ这样的,这个方法行不通

使用道具

板凳
capatal 发表于 2017-8-7 13:54:25 |只看作者 |坛友微信交流群
我自己试了一下可以通过transpose来实现,两次transpose后会自动生成COL1-COL100,这样就可以操作了

使用道具

报纸
我在数下 发表于 2017-8-7 21:04:42 |只看作者 |坛友微信交流群
用宏变量吧,做的可能画的时间少

使用道具

我专门研究过这问题 上代码

  1. data a1;
  2. ger=1;
  3. ber=2;
  4. vx=3;
  5. r4x=5;
  6. ngx=123;
  7. agx=1;
  8. aefx=1;
  9. t5x=1;
  10. run;
  11. proc sql noprint;   
  12.         select strip(name)||'=a'||strip(put(monotonic(),3.))
  13.         into :rename_list separated by ' '
  14.         from dictionary.columns
  15.         where libname="WORK" and memname="A1";
  16. quit;
  17. proc datasets library=work nolist;  
  18.         modify a1;
  19.         rename &rename_list;
  20. quit;
复制代码
已有 2 人评分学术水平 热心指数 信用等级 收起 理由
18353151352 + 1 + 1 + 1 精彩帖子
wulawula_8523 + 1 + 1 + 1 我很赞同

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

使用道具

7
7s7hyd 在职认证  发表于 2017-8-8 10:54:37 |只看作者 |坛友微信交流群
大片阳光因你 发表于 2017-8-8 06:51
我专门研究过这问题 上代码
学习啦  多谢分享

使用道具

8
wulawula_8523 发表于 2017-8-9 11:03:06 |只看作者 |坛友微信交流群
capatal 发表于 2017-8-7 13:53
旧变量没有规则的,不是连续的什么col1-col100,是_00591_SZ这样的,这个方法行不通
选变量的时间,用双横线“--"是不需要变量名之间规的,这个方法是选取位置位于双横线前面的变量,以及双横线后面的变量之间的所有变量。举个例子,如果五个变量是 var1 ha2 re baccc var5,用var1--var5就可以选取这五个变量。

使用道具

wulawula_8523 发表于 2017-8-9 11:03
选变量的时间,用双横线“--"是不需要变量名之间规的,这个方法是选取位置位于双横线前面的变量,以及双横 ...
但是SAS会报错:无法在数据集找到变量名为 oldvar1...的列

使用道具

10
wulawula_8523 发表于 2017-8-9 23:52:18 来自手机 |只看作者 |坛友微信交流群
每一天都是晴。 发表于 2017-8-9 18:48
但是SAS会报错:无法在数据集找到变量名为 oldvar1...的列
出现这个错误一般是变量名打错了,我代码里的oldvar1指代的是数据集里,希望被替换掉的旧的变量名中的第一个,而不是指要用oldvar1这个名字。不过没看到具体的数据集和代码我也没办法纠错了。另外我一开始那个代码打错了一点,do loop里面应该是new[i]=old[i],不知道有没有关系。
还有前面回复里那个设宏变量的方法应该也试试,摸透了那个会非常有用。

使用道具

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

本版微信群
加好友,备注cda
拉您进交流群

京ICP备16021002-2号 京B2-20170662号 京公网安备 11010802022788号 论坛法律顾问:王进律师 知识产权保护声明   免责及隐私声明

GMT+8, 2024-4-20 05:26