SAS中文论坛

 找回密码
 立即注册

扫一扫,访问微社区

查看: 1241|回复: 13
打印 上一主题 下一主题

请教问题,data步数学表达式字符解析?

[复制链接]

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
楼主
 楼主| 发表于 2011-3-3 20:21:29 | 只看该作者

请教问题,data步数学表达式字符解析?

data _null_;
d="5+2";
a=[i:2jl8w8c9]evalfunction[/i:2jl8w8c9](d);/*a=7*/
run;

[i:2jl8w8c9]evalfunction[/i:2jl8w8c9]有这样的函数么?

另外以前有个在data步用的%do循环,我忘了怎么用了。。。
记得是
data a;
set (%do i=1 %to 500;.....);
什么的,然后就直接可以set500个数据集了,
我是想直接连接数组元素
谢谢
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
沙发
 楼主| 发表于 2011-3-3 21:13:27 | 只看该作者

Re: 请教问题,data步数学表达式字符解析?

问题1:

好像没有,貌似这个问题2008年在sasor上谈论得火热,见:http://www.feoh.net/sasor/viewtopic.php?f=1&t=3819。


问题2好像问题1里面有解,如果我读懂你的意思的话。
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
板凳
 楼主| 发表于 2011-3-3 22:50:22 | 只看该作者

Re: 请教问题,data步数学表达式字符解析?

强悍的记忆力~我都忘了~

本来是用的先搞到宏再搞回去的方法,比直接data步慢几十倍。
老贴的看了,比较慢都。


那个do的以前这里看过,sugi也有,可是忘了,就是为了
a[1]="5";
a[2]="+";
a[3]="2";
dd=compress(a[1]||a[2]||a[3]," ");

a[1]||a[2]||a[3]这里省事儿。
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
地板
 楼主| 发表于 2011-3-4 01:24:37 | 只看该作者

Re: 请教问题,data步数学表达式字符解析?

笔记
CAT
实际时间          2.70 秒
      CPU 时间          2.73 秒

CATS
       实际时间          2.84 秒
      CPU 时间          2.82 秒

TRIM
         实际时间          2.82 秒
      CPU 时间          2.82 秒

TRIMN
          实际时间          2.95 秒
      CPU 时间          2.95 秒

STRIP
          实际时间          2.96 秒
      CPU 时间          2.98 秒

COMPRESS+' '
          实际时间          3.17 秒
      CPU 时间          3.17 秒

||
          实际时间          2.81 秒
      CPU 时间          2.81 秒

%SYSEVALF=%EVAL
      实际时间          2.67 秒
      CPU 时间          2.67 秒
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
5#
 楼主| 发表于 2011-3-4 02:22:59 | 只看该作者

Re: 请教问题,data步数学表达式字符解析?

to superkuhasu
depends on how complex your opertors are, the solution could be complex or simple
is there any formula looks like "5*exp(1.7-2) / log(45)"?

I can only think of parsing the string at this moment
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
6#
 楼主| 发表于 2011-3-4 11:52:43 | 只看该作者

Re: 请教问题,data步数学表达式字符解析?

to oloolo
toby dunn on SAS-L mentioned using RESOLVE function, which can handle standard math operators
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
7#
 楼主| 发表于 2011-3-4 16:24:21 | 只看该作者

Re: 请教问题,data步数学表达式字符解析?

%eval和%SysEvalF快,但是复杂的表达情况好像不行吧~
resolve是可以处理,但是%eval需要3秒多的它用一分十几秒。
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
8#
 楼主| 发表于 2011-3-5 17:30:07 | 只看该作者

Re: 请教问题,data步数学表达式字符解析?

%eval和%SysEvalF在解析的时候有问题。
如果有这样的函数就好了
data _null_;
a="52";
b="+23*log(4)";
c=TheFunction(a,b);
put c=;
run;
/*log:
c=83.884770306
*/
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
9#
 楼主| 发表于 2011-3-5 17:46:22 | 只看该作者

Re: 请教问题,data步数学表达式字符解析?

折腾了半天,还是得用原来的方法~~~
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
10#
 楼主| 发表于 2011-3-5 18:36:17 | 只看该作者

Re: 请教问题,data步数学表达式字符解析?

[quote="qkaiwei":3po4zwy3]这个方法要改我公式,我不是特别喜欢. 仅做参考.
data tmp;
input formula:$20. a b c d;
call symput('formula',formula);
call symput('a',a);
call symput('b',b);
call symput('c',c);
call symput('d',d);
call execute('%let result=%sysevalf(&formula)');
result =symget('result');
put result;
cards;
&a*&b 1 2 3 4
&b*&c 1 2 3 4
;
run;[/quote:3po4zwy3]


表达式处理的话,会是一个灰常灰常麻烦的事情~~
回复 支持 反对

使用道具 举报

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

本版积分规则

QQ|小黑屋|手机版|Archiver|SAS中文论坛  

GMT+8, 2025-6-11 11:36 , Processed in 0.077835 second(s), 20 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表