SAS中文论坛

 找回密码
 立即注册

扫一扫,访问微社区

查看: 3637|回复: 4
打印 上一主题 下一主题

文本转公式?

[复制链接]

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
楼主
 楼主| 发表于 2013-2-20 03:24:09 | 只看该作者

文本转公式?

data _null_;
a="5+2";/*It's Char*/
b=  /*how to let b=5+2,i.e.the resolved a*/;
put b;
run;

必须在一个data 步完成
谢谢~
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
沙发
 楼主| 发表于 2013-2-21 20:46:55 | 只看该作者

Re: 文本转公式?

Syntax没说清楚。再说SAS也没有什么简单办法。如果布什非要一步完成,不如在前面加个等号,导到Excel在导回来好啦。
RESOLVE(cats('%sysevalf(', a, ')')) would work for arithmetics with only constants.
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
板凳
 楼主| 发表于 2013-2-23 22:31:30 | 只看该作者

Re: 文本转公式?

要求:
1、必须一个data步内完成;
2、计算完后,b的值得能返回到上面的原data步。
3、计算效率越高越好,最好相当于SAS内部函数调用或者%let宏函数赋值。

我进一步明确一下内容:
data _null_;
m=5;n=2.1;r=5.312;
a="m+sum(n,r)";/*a是个字符型变量*/
b=  /*让b=5+sum(2.1,5.312),就是a的算式/结果,而不是字符*/;
put b;
run;

除了a="m+sum(n,r)";还可能是a="m+sum(n,exp(r))";a="log(m+sum(n,r))";等

召唤大胖猫~在那之后,我都问过俩sas技术董事了~
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
地板
 楼主| 发表于 2013-2-28 10:08:58 | 只看该作者

Re: 文本转公式?

SAS 不支持文本里带函数的表达式,除非你的自己用c/c++ 或者 java等写个程序来解析执行,让SAS调用。
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
5#
 楼主| 发表于 2013-4-12 20:51:03 | 只看该作者

Re: 文本转公式?

这样行不行?其实还是用了两次data步。。。
data one;
  m=5;n=2.1;r=5.312;
  a="m+sum(n,r)";
  call execute("data _null_; set one; b="||strip(a)||";put b= ;run;");
run;
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-5-2 18:16 , Processed in 0.123725 second(s), 22 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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