楼主: kuhasu
19456 100

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

51
cz851218 发表于 2013-2-22 12:44:54
data a;
        a="3+sum(1,5)";
        call symput("a",compress(a,'"'));
    b=&a;
        put a= b=;
run;

52
hamsik11 发表于 2013-2-22 13:41:29
whiz 发表于 2013-2-22 12:09
Try the following code:

data _null_;
b=call symget(%unquote(&t));

call语句还可以这么用?不行吧?

53
ziyenano 发表于 2013-2-22 14:14:22
这个严格来讲 算不算呢?
data ex;
a="exp(1+sum(1,2))";
b=.;
proc iml;
edit ex;
read point 1 var {a};
call symputx('ra',a);
b=&ra;
replace;
quit;
run;

54
pobel 在职认证  发表于 2013-2-22 17:09:49
ziyenano 发表于 2013-2-22 14:14
这个严格来讲 算不算呢?
data ex;
a="exp(1+sum(1,2))";
在proc iml执行之前 'data ex‘步已经执行完毕了。

proc iml 所执行的是对已存在数据集的操作。data ex那一步b的值是missing的。

换句话说,最后那个“run;”不是data ex;的边界,'PROC' 才是。
和谐拯救危机

55
ziyenano 发表于 2013-2-22 17:16:14
pobel 发表于 2013-2-22 17:09
在proc iml执行之前 'data ex‘步已经执行完毕了。

proc iml 所执行的是对已存在数据集的操作。data  ...
我也是这么觉得的~

56
夜、、灵 发表于 2013-2-22 18:55:19
不懂,以后得多学学

57
kuhasu 发表于 2013-2-22 19:08:16
whiz 发表于 2013-2-22 12:09
Try the following code:

data _null_;
Try the following code:

data _null_;
a="5+sum(2.1,5.312)";/*a是个字符型变量*/
call symput('t',a);
b=call symget(%unquote(&t));
put b;
run;


call不可接变量赋值
symput的宏赋值sas默认data步后run后才进行编译,因此后面的&t解析就是问题

58
kuhasu 发表于 2013-2-22 19:11:39
ziyenano 发表于 2013-2-22 14:14
这个严格来讲 算不算呢?
data ex;
a="exp(1+sum(1,2))";
这个严格来讲 算不算呢?
data ex;
a="exp(1+sum(1,2))";
b=.;
proc iml;
edit ex;
read point 1 var {a};
call symputx('ra',a);
b=&ra;
replace;
quit;
run;
----------
SAS编码规范一般要求语句后,不管data步还是proc步,要加个run;来告诉sas完事儿了,可以编译了。
但是如果你不写run;对于不用进行声明退出的,是没什么区别的,因此你只是把run省略了。

59
ziyenano 发表于 2013-2-22 19:32:13
kuhasu 发表于 2013-2-22 19:11
这个严格来讲 算不算呢?
data ex;
a="exp(1+sum(1,2))";
嗯,其实是用iml编辑了ex,算不上在一个data步了

60
长剑走天涯 发表于 2013-2-22 23:14:33
zhangzachary 发表于 2013-2-20 17:16
没有达到kuhasu大神的要求,仅仅作为抛砖引玉。
学习下

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

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