SAS中文论坛

 找回密码
 立即注册

扫一扫,访问微社区

12
返回列表 发新帖
楼主: shiyiming
打印 上一主题 下一主题

快速替换?

[复制链接]

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
11#
 楼主| 发表于 2011-3-16 10:41:00 | 只看该作者

Re: 快速替换?

ro sxlion
数组倒是不大,一百多万而已。
只不过,现在遇到的主要问题是宏变量解析的问题:log(5)+exp(cc(1))
cc(1)是数组元素
上式要在一个data步中赋值给一个宏变量mm,然后变量赋值dd=&mm.;就可以直接代入cc(1)得结果。
可是sas一个data步内的,对于exp,log这样的会报错,而其他的,大多得明确标示run,这个跟设计的宏的工作流程有关。
然后sasl有提出来用fcmp里的run_macro的,很慢,本来我想,这个东西虽然慢,但是可以data步中嵌套data步,可以做宏变量赋值,然后在原始data步中直接变量赋值不就行了,可是试了下,好像不行。。。SAS本身没有data步中字符串转化成公式计算的函数,上面的式子如果是变量赋值,一开始字符串,之后也还是字符串~
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
12#
 楼主| 发表于 2011-3-20 23:40:44 | 只看该作者

Re: 快速替换?

大胖猫看了super k兄这里的帖子,还有SAS-L的帖子,好像是要实现这个目地把。
[quote:wu43uwqk]%eval和%SysEvalF在解析的时候有问题。
如果有这样的函数就好了
data _null_;
a="52";
b="+23*log(4)";
c=TheFunction(a,b);
put c=;
run;
/*log:
c=83.884770306
*/ [/quote:wu43uwqk]

我怀疑其他语言,scripting或者complied,也不能也实现这个function, 机器应该无法知道你要想输入的是字符还是数字。大胖猫觉得首先要做的是用regular expression 把数字和表达式分离,这可能是几步的过程。
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
13#
 楼主| 发表于 2011-3-21 00:01:33 | 只看该作者

Re: 快速替换?

但是其实
%let c=exp(5)+log(7);
d=&c.;
就直接解析了。
关键问题在于
1.上述类型表达式如果是引用的变量c=exp(5)+log(7),然后再赋值给宏变量,则一个data步内不可解析;
2.没有把字符串进行返回计算结果的函数。
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-6-12 21:28 , Processed in 0.067864 second(s), 19 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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