楼主: kuhasu
19458 100

[问答] SAS水平测试,动脑子一起看看吧,高手入   [推广有奖]

21
bobguy 发表于 2013-2-21 07:46:21
You can wrap it up into a string with macro functions embedded and use resolve to solve it in the same step.


data tmp;
a="5+sum(2.1,5.312)";
astr=catt('%sysevalf(', scan(a,1,'+'),'+%sysfunc(',scan(a,2,'+'),'))');
call symputx('avalue',astr);
b=input(resolve('&avalue'),best.);
put a b;
run;

proc print;run;

proc contents data=tmp;run;
已有 3 人评分学术水平 热心指数 信用等级 收起 理由
zhangzachary + 1 + 1 + 1 原来resolve可以在同一data步直接解析前面c.
a6566792 + 1 + 1 + 1 这个效率相对比较高
webgu + 5 + 5 + 5 精彩帖子

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

22
webgu 发表于 2013-2-21 08:25:07
kuhasu 发表于 2013-2-20 21:39
试试看
我的方法跟Imsasor差不多。
刚看了下,bobguy好像已经解决了。
SAS资源
1. SAS 微信:StatsThinking
2. SAS QQ群:348941365

23
Imasasor 发表于 2013-2-21 09:42:11
bobguy 发表于 2013-2-21 07:46
You can wrap it up into a string with macro functions embedded and use resolve to solve it in the sa ...
你的方法跟我第一种方法类似,都是想能过宏运算计算得到宏变量的值,可是这不是楼主想要的,因为如果有多个sum,如果有其它运算符号,程序还得重写,楼主想要的还是在data步直接计算出值。
欢迎加入亚太地区第一R&Python数据挖掘群: 251548215;

24
soporaeternus 发表于 2013-2-21 10:11:33
Imasasor 发表于 2013-2-20 20:25
data a;
a="5+sum(2.1,5.312)";
call symput("num",_n_);
这个b在原data步之外
Let them be hard, but never unjust

25
soporaeternus 发表于 2013-2-21 10:35:01
  1. data a;
  2.         b="5+sum(2.1,5.312)";output;
  3.         b="3*2/1.17";output;
  4. run;

  5. %macro a;
  6.         data _null_;
  7.         %let dsid = %sysfunc(open(a));
  8.         %let n=%sysfunc(attrn(&dsid,nobs));
  9.         %put &n;
  10.         %do i=1 %to &n;
  11.         %let rc=%%sysfunc(fetchobs(&dsid,&i));
  12.         %let variable=%sysfunc(getvarc(&dsid,1));
  13.         a="&variable";
  14.         b= &variable;output;        put a b;
  15.         %end;
  16.         %let rc=%sysfunc(close(&dsid));
  17.         run;
  18. %mend a;
  19. %a;
复制代码
已有 4 人评分经验 论坛币 学术水平 热心指数 信用等级 收起 理由
Imasasor + 60 + 100 + 3 + 3 + 3 精彩帖子
webgu + 1 + 1 + 1 大神回来了。
a6566792 + 1 + 1 + 1 大神,
zhangzachary + 1 + 1 + 1 精彩帖子

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

Let them be hard, but never unjust

26
a6566792 在职认证  发表于 2013-2-21 11:01:47
soporaeternus 发表于 2013-2-21 10:35
可是这样还是进行了两次数据步a,_null_.

27
soporaeternus 发表于 2013-2-21 11:22:50
a6566792 发表于 2013-2-21 11:01
可是这样还是进行了两次数据步a,_null_.
我的理解是K神的意思是那串b是已经存在的一组函数,然后在一个data步里计算出这些函数的返回值。所以我认为这个data步应该可以有一个输入就是我的a。计算关键在于怎么把字符串变在解析时变成表达式。所以我就把它们代码化了......
Let them be hard, but never unjust

28
cfhorse 发表于 2013-2-21 12:07:01
看不懂,隔行如隔山

29
wujun0329 发表于 2013-2-21 13:09:40
牛啊

30
xhuang1988 在职认证  发表于 2013-2-21 13:10:02
表示没看懂题目的意思~~~
21行

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

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