SAS中文论坛

 找回密码
 立即注册

扫一扫,访问微社区

查看: 647|回复: 7
打印 上一主题 下一主题

紧急求助::宏变量赋值不成功,请高手给改正下,谢谢

[复制链接]

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
楼主
 楼主| 发表于 2010-12-12 08:32:20 | 只看该作者

紧急求助::宏变量赋值不成功,请高手给改正下,谢谢

%macro nlp (start=,end=,step=,v1=,v2=,v3=,umean=,out=);
[color=#FF0000:2lxjhynl]%let w1=&v1.;
%let w2=&v2.;;
%let w3=&v3.;
%let u=&umean.;[/color:2lxjhynl]
%let i=&start.;  
%do   %while(&i.<=&end.);
  proc nlp out=_sheet;
     max y;
     PARMS b;
     bounds 0<=b<=1;
     Y1= exp(w1);
     Y2= exp(w2);
     Y3= exp(w3);
         sigma=&i.;
         P1=1-probnorm((w1-u)/sigma);            /*change the w1 into the N(0,1)distribution*/
     P2=1-probnorm((w2-u)/sigma);            /*here, we use the sigma vale,that is, 1-PDF*/
     P3=1-probnorm((w3-u)/sigma);
     y=P1*log(b*Y1+(1-b))+P2*log(b*Y2+(1-b))+P3*log(b*Y3+(1-b)); /*the objective is to achive the max y*/
  run;

data temp1;
  set _sheet;
  sigma=&i.;  
  keep sigma b y y1 y2 y3 p1 p2 p3;
run;

%if &i. = &start. %then %do;/*initialize the date*/
   data &out;
     set temp1;
   run;
%end;
%else %do;
   data &out;
     set &out temp1; /*append more date to result*/
   run;
%end;

%let i=%sysfunc(sum(&i.,&step.));
%end;
%mend nlp;

%nlp (start=0.05,end=20, step=0.5,v1=0.2,v2=0.5,v3=1,umean=0,out=result)


我在运行的时候,总是报错:
[b:2lxjhynl]ERROR: The variable w1 was referenced but not given a value.
ERROR: The variable w2 was referenced but not given a value.
ERROR: The variable w3 was referenced but not given a value.
ERROR: The variable u was referenced but not given a value.
WARNING: Your program statements contain 4 symbols used but not given a value.[/b:2lxjhynl]NOTE: Initial value of parameter b is set randomly to 0.1148952079.
[b:2lxjhynl][color=#0000FF:2lxjhynl]ERROR: There are references to missing variables when the program code is executed for _OBS_= 1[/color:2lxjhynl][/b:2lxjhynl]请大家给诊断下,为啥 i=&start. 就能成功, 而这4个就不成呢,迷惑中。
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
沙发
 楼主| 发表于 2010-12-12 10:51:05 | 只看该作者

Re: 宏变量赋值不成功,是啥原因?

把所有w和u前面加一个&
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
板凳
 楼主| 发表于 2010-12-13 05:49:14 | 只看该作者

Re: 宏变量赋值不成功,是啥原因?

我加了,还是报错呀, 请高手赶快给指正下,怎么改能运行成功?, 谢谢了


%macro nlp (start=,end=,step=,v1=,v2=,v3=,umean=,out=);
[color=#FF0000:1f049c8d][b:1f049c8d]%let &w1=&v1.;
%let &w2=&v2.;;
%let &w3=&v3.;
%let &u=&umean.;[/b:1f049c8d][/color:1f049c8d]

%let i=&start.;
%do   %while(&i.<=&end.);
  proc nlp out=_sheet;
     max y;
     PARMS b;
     bounds 0<=b<=1;
     Y1= exp(w1);
     Y2= exp(w2);
     Y3= exp(w3);
         sigma=&i.;
         P1=1-probnorm((w1-u)/sigma);            /*change the w1 into the N(0,1)distribution*/
     P2=1-probnorm((w2-u)/sigma);            /*here, we use the sigma vale,that is, 1-PDF*/
     P3=1-probnorm((w3-u)/sigma);
     y=P1*log(b*Y1+(1-b))+P2*log(b*Y2+(1-b))+P3*log(b*Y3+(1-b)); /*the objective is to achive the max y*/
  run;

data temp1;
  set _sheet;
  sigma=&i.;  
  keep sigma b y y1 y2 y3 p1 p2 p3;
run;

%if &i. = &start. %then %do;/*initialize the date*/
   data &out;
     set temp1;
   run;
%end;
%else %do;
   data &out;
     set &out temp1; /*append more date to result*/
   run;
%end;

%let i=%sysfunc(sum(&i.,&step.));
%end;
%mend nlp;

%nlp (start=0.05,end=20, step=0.5,v1=0.2,v2=0.5,v3=1,umean=0,out=result)

[color=#FF0000:1f049c8d]ERROR: 期望 %LET 后跟有变量名。
ERROR: 宏变量名全部为空格或缺失。
ERROR: 宏 NLP 将终止执行。[/color:1f049c8d]
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
地板
 楼主| 发表于 2010-12-13 06:21:25 | 只看该作者

Re: 宏变量赋值不成功,是啥原因?

[code:1ziw8giv]
%macro nlp (start=,end=,step=,v1=,v2=,v3=,umean=,out=);
%let w1=&v1.;
%let w2=&v2;
%let w3=&v3;
%let u=&umean;

%let i=&start.;
%do   %while(&i.<=&end.);
  proc nlp out=_sheet;
     max y;
     PARMS b;
     bounds 0<=b<=1;
     Y1= exp(&w1);
     Y2= exp(&w2);
     Y3= exp(&w3);
         sigma=&i.;
         P1=1-probnorm((&w1-&u)/sigma);            /*change the w1 into the N(0,1)distribution*/
     P2=1-probnorm((&w2-&u)/sigma);            /*here, we use the sigma vale,that is, 1-PDF*/
     P3=1-probnorm((&w3-&u)/sigma);
     y=P1*log(b*Y1+(1-b))+P2*log(b*Y2+(1-b))+P3*log(b*Y3+(1-b)); /*the objective is to achive the max y*/
  run;

data temp1;
  set _sheet;
  sigma=&i.;  
  keep sigma b y y1 y2 y3 p1 p2 p3;
run;

%if &i. = &start. %then %do;/*initialize the date*/
   data &out;
     set temp1;
   run;
%end;
%else %do;
   data &out;
     set &out temp1; /*append more date to result*/
   run;
%end;

%let i=%sysfunc(sum(&i.,&step.));
%end;
%mend nlp;

%nlp (start=0.05,end=20, step=0.5,v1=0.2,v2=0.5,v3=1,umean=0,out=result)
[/code:1ziw8giv]
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
5#
 楼主| 发表于 2010-12-13 21:10:35 | 只看该作者

Re: 紧急求助::宏变量赋值不成功,请高手给改正下,谢谢

<!-- s:D --><img src="{SMILIES_PATH}/icon_biggrin.gif" alt=":D" title="Very Happy" /><!-- s:D -->
非常感谢,

再敢请一下,原理是啥呀?
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
6#
 楼主| 发表于 2010-12-14 06:59:30 | 只看该作者

Re: 紧急求助::宏变量赋值不成功,请高手给改正下,谢谢

to edle
语法~~
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
7#
 楼主| 发表于 2010-12-16 00:18:00 | 只看该作者

Re: 紧急求助::宏变量赋值不成功,请高手给改正下,谢谢

%if &amp;i. = &amp;start. %then %do;/*initialize the date*/
请问上楼的,宏变量引用为什么后面还有加点(.如&amp;i.=&amp;start.),谢谢!
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
8#
 楼主| 发表于 2010-12-17 21:45:36 | 只看该作者

Re: 紧急求助::宏变量赋值不成功,请高手给改正下,谢谢

to andrawliu
可以不加~加点只是明确表示该宏变量名的结束~也就是从&amp;到.的中间为一个宏变量名。
请参考帮助文件宏部分。上边写得很全面~~
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-6-13 19:56 , Processed in 0.089895 second(s), 20 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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