楼主: hyb971006
3215 8

[问答] 如何批量修改变量名为它的label名 [推广有奖]

  • 0关注
  • 0粉丝

本科生

92%

还不是VIP/贵宾

-

威望
0
论坛币
9 个
通用积分
1.3500
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
267 点
帖子
17
精华
0
在线时间
231 小时
注册时间
2017-11-6
最后登录
2024-9-23

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
比如一个数据集 data a导入后 变量名为 _c1_,_c2_ ,..., _c40_
比如_c1_的label是id 如何将它的label “id” 替代_c1_
...以此类推
批量处理

二维码

扫码加我 拉你入群

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

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

关键词:label Abel Lab 批量处理 Data

回帖推荐

孤单的我们 发表于8楼  查看完整内容

抛砖引玉吧
沙发
jg.sas 发表于 2020-7-3 11:49:58 |只看作者 |坛友微信交流群
attrib  _all_  label='' ;

使用道具

藤椅
hyb971006 发表于 2020-7-3 13:35:37 |只看作者 |坛友微信交流群
jg.sas 发表于 2020-7-3 11:49
attrib  _all_  label='' ;
这样只能把所有变量的label删除诶
比如第一个变量是_c1_
我想要的效果等价于rename _c1_=vlabel(_c1_) 当然这个语句运行不了

使用道具

板凳
hyb971006 发表于 2020-7-3 14:10:58 |只看作者 |坛友微信交流群
%macro mdf(libname=,memname=);

proc sql noprint;
   select nvar
   into :nvar
   from dictionary.tables
   where libname = "&libname" and memname = "&memname";
quit;
%do s=1 %to &nvar;
data _null_;
set &memname;
call symput("varlabel",vlabel(_c&s._));
run;
data &memname;
        set &memname;
        rename _c&s._=&varlabel;
run;
%end;
%mend;


想了个办法暂时解决了下

使用道具

hyb971006 发表于 2020-7-3 14:10
%macro mdf(libname=,memname=);

proc sql noprint;
思路是对的,但是应该优化一下,你这多少个变量循环set多少次dataset,要是数据量大,估计。。。。循环做到rename后面,或者直接用call execute来做。
已有 1 人评分经验 收起 理由
eijuhz + 20 精彩帖子

总评分: 经验 + 20   查看全部评分

使用道具

地板
hyb971006 发表于 2020-7-7 09:43:25 |只看作者 |坛友微信交流群
孤单的我们 发表于 2020-7-6 12:03
思路是对的,但是应该优化一下,你这多少个变量循环set多少次dataset,要是数据量大,估计。。。。循环做 ...
对。。我也感觉每次data步读 效率太低了

使用道具

7
hyb971006 发表于 2020-7-7 11:17:01 |只看作者 |坛友微信交流群
%macro mdf(libname=,memname=);
proc sql noprint;
   select nvar
   into :nvar
   from dictionary.tables
   where libname ="&libname" and memname ="&memname";
quit;
%put &nvar;
data _null_;
set &memname;
%do s=1 %to &nvar;
call symput("varlabel&s",vlabel(_c&s._));
%end;
run;
data &memname;
        set &memname;
%do s=1 %to &nvar;
        rename _c&s._=&&varlabel&s;
%end;
run;
%mend;

把循环加进data步中 小改了下宏 效率快了点

因为是初学sas,call execute还没弄清楚是怎么写

使用道具

8
孤单的我们 发表于 2020-7-8 17:55:01 |只看作者 |坛友微信交流群
  1. %macro mdf(libname=,memname=);
  2. proc sql noprint;
  3.         create table _temp as
  4.         select distinct name,label from dictionary.columns where libname=upcase("&libname.") and memname=upcase("&memname.");
  5. quit;

  6. data _null_;
  7.         set _temp end=last;
  8.         if _n_=1 then do;
  9.                 call execute("data &memname.; set &libname..&memname.; rename " );
  10.         end;
  11.         call execute(strip(name)||"="||strip(label)||" ");
  12.         if last then call execute('; run;');
  13. run;

  14. proc delete data=_temp;
  15. run;
  16. %mend;
复制代码

抛砖引玉吧

使用道具

9
jg.sas 发表于 2020-7-13 09:30:25 |只看作者 |坛友微信交流群
  1. proc contents data=sashelp.cars out=aa noprint;
  2. run;

  3. proc sql noprint;
  4.         select strip(name)||"="||strip(label) into:renamevar separated by " " from aa ;
  5. run;
  6. %put &renamevar;
复制代码

我也来抛个砖

使用道具

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

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

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

GMT+8, 2024-11-1 08:10