全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SAS专版
3865 13
2015-01-21

%let       lenx=40;

%let       string=notfunc  (abc);

%let       string2=%qsysfunc(substrn(&string,1,&lenx));

程序错误。

关于如何解决这个问题,我个人认为,很可能无解。

错误的原因:’notfunc (abc)’ 很可能被当成方程解析。比如,如果 %let         string=notfunc*  (abc); 错误不再出现。因为此时的&string很明显不是方程定义的形式。

如果利用substr(),这个错误并不存在。在某种情况下,substrn(x,1,k)==substr(x,1,min(k,length(x))when k >0. 也就是说,substrn()很可能自身对函数的输入做出估计,然后进行运算。还是substrn()设计的缺陷。但是令人费解的是%let     string=2 (abc); 仍然导致错误。


请教过我SAS补习班的老师,也没有给出很好的答案。也认为无有好的办法。

大家的看法如何?如何解决这个问题呢?真的是没有解决方法吗?


京剧


二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

全部回复
2015-1-21 12:51:27
SAS 9.1.3没有显示错误:

1    %let       lenx=40;
2    %let       string=notfunc  (abc);
3    %let       string2=%qsysfunc(substrn(&string,1,&lenx));
4    %put &String2;
notfunc  (abc)
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2015-1-21 13:00:53
pobel 发表于 2015-1-21 12:51
SAS 9.1.3没有显示错误:

1    %let       lenx=40;
    SAS/QC 12.3 (maintenance)

NOTE: Additional host information:

X64_7PRO WIN 6.1.7601 Service Pack 1 Workstation

NOTE: SAS initialization used:
      real time           9.40 seconds
      cpu time            1.13 seconds


1    %let       lenx=40;
2    %let       string=notfunc  (abc);
3    %let       string2=%qsysfunc(substrn(&string,1,&lenx));
ERROR: Required operator not found in expression: notfunc  (abc)
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2015-1-21 13:52:46
jingju11 发表于 2015-1-21 13:00
SAS/QC 12.3 (maintenance)

NOTE: Additional host information:
用9.2就有错误了,不过我感觉SAS没有试图把“notfunc  (abc)”当成一个“function”, 而是一个”expression“

152     %let       lenx=40;
153     %let       string=%str(%)nofunc);
154     %let       string2=%qsysfunc(substrn(&string,1,&lenx));
ERROR: Required operator not found in expression: )nofunc
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2015-1-21 13:57:35
不太清楚问题出在什么地方,好像SAS是需要一个运算符:

164    %let       lenx=40;
165    %let       string=notfunc  (ab+c);
166    %let       string2=%qsysfunc(substrn(&string,1,&lenx));
167    %put String2: &string2;
String2: notfunc  (ab+c)
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2015-1-21 14:06:44
pobel 发表于 2015-1-21 13:52
用9.2就有错误了,不过我感觉SAS没有试图把“notfunc  (abc)”当成一个“function”, 而是一个”express ...
Not sure what exactly epression means.

%let string=1+a;
%let string2=%qsysfunc(substrn(&string,1,&lenx));
%put &string2;

SAS does not complain, even 1+a is an awakard expression.
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

点击查看更多内容…
相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群