楼主: wingzero321
4652 10

怎么将sas宏变量转化成数据集?急!! [推广有奖]

  • 0关注
  • 0粉丝

硕士生

54%

还不是VIP/贵宾

-

威望
0
论坛币
223 个
通用积分
0
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
196 点
帖子
57
精华
0
在线时间
259 小时
注册时间
2010-6-7
最后登录
2021-3-5

楼主
wingzero321 发表于 2011-12-22 14:50:15 |AI写论文
50论坛币
假设有一个宏变量a,怎么将a的值写到一个数据集中?
例如:
%let a='a1' 'a2' 'a3' 'a4' 'a5' 'a6' 'a7' 'a8' 'a9' 'a10' 'a11' 'a12' 'a13' 'a14' 'a15' 'a16';

希望转换成一个数据集a,一个变量为a,值为这16个值.
观测数可能超过2000个!
求解决方案?
关键词:SAS宏 数据集 解决方案 let 解决方案

本帖被以下文库推荐

沙发
shenliang_111 发表于 2011-12-22 14:50:16
  1. 看行不行!

  2. %macro ss();
  3. %let a='a1' 'a2' 'a3' 'a4' 'a5' 'a6' 'a7' 'a8' 'a9' 'a10' 'a11' 'a12' 'a13' 'a14' 'a15' 'a16';
  4. %if %sysfunc(exist(a)) %then %do;
  5. proc delete data=a;
  6. run;
  7. %end;
  8. %let i=1;
  9. %do %while(%scan(&a,&i) ne );
  10.   data s;
  11.   a=%scan(&a,&i);
  12.   output;
  13.   run;
  14. %if &i=1 %then %do;data a;length a $20;set s;run;%end;
  15.     %else %do;
  16.    proc append base=a data=s force;run;
  17.    %end;
  18.   %let i=%eval(&i.+1);
  19. %end;
  20. %mend;
  21. options nomlogic nomprint;
  22. %ss
复制代码

藤椅
wingzero321 发表于 2011-12-22 21:32:37
shenliang_111 发表于 2011-12-22 15:31
可以实现,但是当迭代次数多了,效率上有些慢,能不能在一个data step 中完成录入!

板凳
wingzero321 发表于 2011-12-22 21:47:05
shenliang_111 发表于 2011-12-22 15:31
谢谢提醒,我在您的代码上加工了一下,问题解决了!
  1. %macro ss();
  2. %let a='a1' 'a2' 'a3' 'a4' 'a5' 'a6' 'a7' 'a8' 'a9' 'a10' 'a11' 'a12' 'a13' 'a14' 'a15' 'a16';
  3. %if %sysfunc(exist(a)) %then %do;
  4. proc delete data=a;
  5. run;
  6. %end;
  7. %let count=%sysfunc(countw(&a));
  8. %put &count;
  9. data a;
  10.         length a$10.;
  11.         %do i=1 %to &count;
  12.         a=%scan(&a,&i);
  13.         output;
  14.         %end;
  15. run;
  16. %mend;
  17. options nomlogic nomprint;
  18. %ss;
复制代码


报纸
hopewell 发表于 2011-12-22 22:58:35
  1. %let a='a1' 'a2' 'a3' 'a4' 'a5' 'a6' 'a7' 'a8' 'a9' 'a10' 'a11' 'a12' 'a13' 'a14' 'a15' 'a16';
  2. data a(drop=i);
  3.     length a $10;
  4.     i=1;
  5.     a=scan("&a",i,"' ");
  6.     do while(not missing(a));
  7.         output;
  8.         i+1;
  9.         a=scan("&a",i,"' ");
  10.     end;
  11. run;
复制代码
已有 1 人评分学术水平 热心指数 信用等级 收起 理由
webgu + 1 + 1 + 1 精彩帖子

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

观钓颇逾垂钓趣 种花何问看花谁

地板
nectar 发表于 2011-12-23 09:47:31
懂得感恩最重要。别人给你解决了问题,应该及时给人加悬赏币。这样才有可持续性。

7
liudeng2005 发表于 2011-12-23 11:17:26
快给赏金,该被鄙视的家伙,intellectual property 应该受到保护。一言既出驷马难追方是男人。
我就是我@!

8
wingzero321 发表于 2011-12-23 15:20:24
hopewell 发表于 2011-12-22 22:58
请问能不能用input语句录入,提高效率,谢谢!

9
soporaeternus 发表于 2011-12-23 15:25:20
wingzero321 发表于 2011-12-23 15:20
请问能不能用input语句录入,提高效率,谢谢!
为什么input就会效率高?
Let them be hard, but never unjust

10
wingzero321 发表于 2011-12-23 16:09:14
soporaeternus 发表于 2011-12-23 15:25
为什么input就会效率高?
不知道,写出来比较一下效率,只能想到这两种方式,请问如用input 语句怎么写?怎么在input cards之后将宏变量的值录入!?

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

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2026-1-5 16:15