楼主: 无名浪客
3630 6

[原创博文] 将数据集中对应变量名的label加到数据集中 [推广有奖]

  • 0关注
  • 0粉丝

初中生

14%

还不是VIP/贵宾

-

威望
0
论坛币
10 个
通用积分
0
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
191 点
帖子
7
精华
0
在线时间
17 小时
注册时间
2010-1-20
最后登录
2019-3-4

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
我现在有约60个数据集,每个数据集有约6-20个不等的变量。

现在用transport转置每个数据集,并保留变量名列,导出到Excel,在Excel文件中填写上每个变量名对应的标签,再导回到SAS

即现在有60个原始数据集及每个数据集的变量名+对应标签的一个数据集

想用label 语句在data步中将对应的原始数据集加上标签(由对应标签数据集读取),请高手不吝赐教(仅指导加标签的方法即可,谢谢)。
二维码

扫码加我 拉你入群

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

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

关键词:label Abel 数据集 Lab Transport transport Excel 标签

回帖推荐

soporaeternus 发表于3楼  查看完整内容

一个思路,希望对你有帮助......

本帖被以下文库推荐

沙发
无名浪客 在职认证  发表于 2011-2-28 15:46:46 |只看作者 |坛友微信交流群
  1. %macro get_label;
  2. %let label=label;
  3. %let name=name;
  4. data a;
  5.                 set xls.label;
  6.            n=_n_;
  7.            rename _label_=label _name_=name;
  8. run;
  9. data _null_;
  10.        set a nobs=t;
  11.        call symput('count',t);
  12.        stop;
  13. run;

  14. data bb;
  15.        set a;       
  16.                 do i=1 to &count.;
  17.                                 if n=i then do;
  18.                                                 call symput('label'||strip(i),label);
  19.                                                 call symput('name'||strip(i),name);
  20.                                 end;
  21.                 end;
  22. run;

  23. data s1101_p1;
  24.                 set s1101_p1;
  25.                 label
  26. %do i=1 %to &count.;
  27.                                 &&&name.&i.="&&&label.&i."

  28. %end;
  29. ;
  30. run;
  31. %mend;
  32. %get_label;
复制代码
首先call symput 似乎没作用,并没有生成相应个数的宏变量,其次就是最后label语句报错,还希望高手能解答一下

使用道具

藤椅
soporaeternus 发表于 2011-2-28 15:58:37 |只看作者 |坛友微信交流群
  1. data a;
  2.         array xx x1-x12;
  3.         if _n_=0;
  4. run;

  5. data lbl_a;
  6.         do i=1 to 12 by 1;
  7.                 vname=compress("x"||i);
  8.                 label=compress("测试"||i);
  9.                 output;
  10.         end;
  11.         drop i;
  12. run;

  13. proc sql noprint;
  14.         select compress(vname||"='"||label||"'")
  15.         into:str separated by " "
  16.         from lbl_a;
  17. quit;
  18. %put &str;

  19. proc datasets lib=work;
  20.         modify a;
  21.         label &str;
  22. run;quit;
复制代码
一个思路,希望对你有帮助......
已有 1 人评分经验 论坛币 收起 理由
bakoll + 3 + 3 精彩帖子

总评分: 经验 + 3  论坛币 + 3   查看全部评分

Let them be hard, but never unjust

使用道具

板凳
无名浪客 在职认证  发表于 2011-2-28 16:23:43 |只看作者 |坛友微信交流群
非常感谢您提供的思路,后来我尝试的结果是宏变量赋值已经没有问题了,无论是把变量名和标签分别赋值,或按您提供的方法将‘变量名=标签’赋值到一个宏变量中,作为语句去解析。但是在加标签的过程中,因为不止一个变量需要加标签,宏变量如str 就要改成&&&str&i.,但这时候在循环中解析就会出现问题,让我感到很费解,现在应该只是解析过程有语法错误了,但尝试了2至4个解析符号的写法,都还有问题,还请高手指教。 3# soporaeternus

使用道具

报纸
无名浪客 在职认证  发表于 2011-2-28 16:30:48 |只看作者 |坛友微信交流群
3# soporaeternus

抱歉,开始的理解和测试有点问题,用您提供的方法已经完美的解决这个问题了,只是不太明白在循环里解析&&&name&i.为什么会有问题,不知道您能否指点。

使用道具

地板
soporaeternus 发表于 2011-2-28 17:57:50 |只看作者 |坛友微信交流群
  1. %let name=wrong;
  2. %let name1=right;
  3. %let i=1;
  4. %let wrong1=!!!;


  5. %put &&name&i;
  6. %put &&&name&i;
复制代码
希望对你有帮助
&&=&,从左至右两两解析......
已有 1 人评分论坛币 学术水平 热心指数 收起 理由
论坛数据分析 + 200 + 2 + 2 观点有启发

总评分: 论坛币 + 200  学术水平 + 2  热心指数 + 2   查看全部评分

Let them be hard, but never unjust

使用道具

7
无名浪客 在职认证  发表于 2011-3-1 16:00:47 |只看作者 |坛友微信交流群
非常感谢您的耐心解答和非常好的示例程序

使用道具

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

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

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

GMT+8, 2024-4-25 23:04