楼主: harlon1976
2814 4

[原创博文] 请教这个程序的问题 [推广有奖]

  • 2关注
  • 27粉丝

版主

院士

54%

还不是VIP/贵宾

-

威望
1
论坛币
33781 个
通用积分
135.1232
学术水平
25 点
热心指数
39 点
信用等级
17 点
经验
59249 点
帖子
1928
精华
0
在线时间
4352 小时
注册时间
2005-8-27
最后登录
2025-12-9

楼主
harlon1976 发表于 2010-6-4 09:26:15 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
%macro mll(n,a0,a1,a2,a3,a4,a5,sigs);
data yca0 ;
x1=0;x2=0;x3=0;x4=0;x5=0;
do i=1 to &n;
u=&sigs*normal(0);
jqy=&a0+&a1*x1**(1/3)+&a2*x2**(1/3)+&a3*x3**(1/3)+
&a4*x4**(1/3)+&a5*x5**(1/3);
y=jqy+u;
output;
x5=x4;
x4=x3;
x3=x2;
x2=x1;
x1=y;end;
keep x1-x5  y jqy;
run;
%mend mll(n,a0,a1,a2,a3,a4,a5,sigs);
%mll(200,0.8,0.1,0.4,0.2,0.7,0.8,1);
proc print;run;
该程序只要当y为负值时,后面的观测都是缺省值,同时log窗口显示:
Invalid argument(s) to the exponential operator "**" at line 1 column 89.
x1=. x2=. x3=. x4=. x5=. i=201 u=-0.107342764 jqy=. y=. _ERROR_=1 _N_=1
但又不是红字表示。如果y是正的,就不会有问题,按道理说,即使y是负的,到下一个观测x1为负也能开3次方根的,但为什么就不能运行,请高手赐教
二维码

扫码加我 拉你入群

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

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

关键词:Exponential operator argument invalid Perato normal 程序

回帖推荐

soporaeternus 发表于4楼  查看完整内容

对于1/3次方可以这样解决 多问一句对于形如 (负数)**(小数)的表达式有什么办法,貌似SAS对于负数的小数次方一律报 NOTE:指数运算符**的参数无效。 我的想法 1 对于(任何实数)**(表达式),由于SAS从右至左执行,表达式计算结果为一个小数 2 (任何实数)**(分数)的表达式可以通过判别分数的分母的奇偶性来判别根式的有效性,负数的偶次根在实数内没有意义。但是SAS的**函数或许不具备对一个数进行"最简分式"计算的能力,故而 ...

本帖被以下文库推荐

沙发
pobel 在职认证  发表于 2010-6-4 10:10:35
%macro mll(n,a0,a1,a2,a3,a4,a5,sigs);

data yca0 ;
    x1=0;x2=0;x3=0;x4=0;x5=0;
       
    do i=1 to &n;
                u=&sigs*normal(0);

                jqy=&a0+&a1*sign(x1)*abs(x1)**(1/3)+&a2*sign(x2)*abs(x2)**(1/3)
               +&a3*sign(x3)*abs(x3)**(1/3)+&a4*sign(x4)*abs(x4)**(1/3)
               +&a5*sign(x5)*abs(x5)**(1/3);
                y=jqy+u;
                output;
                x5=x4;
                x4=x3;
                x3=x2;
                x2=x1;
                x1=y;
    end;
        keep x1-x5  y jqy;
run;
%mend mll;

options mprint;
%mll(200,0.8,0.1,0.4,0.2,0.7,0.8,1);

藤椅
pobel 在职认证  发表于 2010-6-4 10:13:26
如果把符号和绝对值分开就不会报错,可能是**的原因。

板凳
soporaeternus 发表于 2010-6-4 10:52:23
对于1/3次方可以这样解决

多问一句对于形如
(负数)**(小数)的表达式有什么办法,貌似SAS对于负数的小数次方一律报
NOTE:指数运算符**的参数无效。

我的想法
1 对于(任何实数)**(表达式),由于SAS从右至左执行,表达式计算结果为一个小数
2 (任何实数)**(分数)的表达式可以通过判别分数的分母的奇偶性来判别根式的有效性,负数的偶次根在实数内没有意义。但是SAS的**函数或许不具备对一个数进行"最简分式"计算的能力,故而无法判断根式的有效性,所以为了避免错误,对于所有负数的小数次方,全部报如上NOTE,并且不予以计算。纯属猜测。
3 通过代码补足这个功能......当然大多数指数为分数显式的时候,2楼的办法足矣
已有 1 人评分经验 论坛币 收起 理由
bakoll + 3 + 3 精彩帖子

总评分: 经验 + 3  论坛币 + 3   查看全部评分

Let them be hard, but never unjust

报纸
harlon1976 发表于 2010-6-4 12:39:15
感谢二楼的高手,三楼给出了问题的解释,想不到SAS还是有些问题不能用常规思路来解决。再次对两位的帮助表示感谢。

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

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