SAS中文论坛

 找回密码
 立即注册

扫一扫,访问微社区

查看: 1839|回复: 12
打印 上一主题 下一主题

求助编程中的问题

[复制链接]

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
楼主
 楼主| 发表于 2009-6-5 19:42:16 | 只看该作者

求助编程中的问题

%macro deltacal;
%do delta=.1 %to 4.0 %by .05;
%put delta mean:δ
%end;
%mend deltacal;
%deltacal;

为什么delta 不是整数是不能显示出来,怎么用eval 改进
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
沙发
 楼主| 发表于 2009-6-5 20:49:26 | 只看该作者

Re: 求助编程中的问题

%macro deltacal;
%do delta_=10 %to 400 %by 5;
       %let delta=%sysevalf(&delta_/100);
      %put delta mean:δ
%end;
%mend deltacal;

%deltacal
;

*i think you knew the reason why your program did not work well;
*as far as I know, %do only works on integer (%eval());
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
板凳
 楼主| 发表于 2009-6-5 21:11:00 | 只看该作者

Re: 求助编程中的问题

好的,谢谢,我的确知道是什么问题,也知道用eval就是不知道怎么用,
再次感谢
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
地板
 楼主| 发表于 2009-6-5 21:33:31 | 只看该作者

Re: 求助编程中的问题

能不能帮我看看为什么刚才的问题单独算是没有问题的,为什么我的加到我自己的程序中,就会有问题呢

%let delta=.10;
%macro cusum(k=.05,ucl=4.1089,w=50,outfile=asdsum,t=50);
data asdsum;
j=.;
c=.;
x=.;
run;
%do i=1 %to &t;
Data asd;
j=0;
c=0;
do while (c<&ucl);
j+1;
if(j>=&w) then x=rannor(0)+δ
else x=rannor(0);
c+x-&k;
c=max(c,0.00);
end;
run;
proc append base=asdsum data=asd;
run;
%end;
data asdmean(keep=mean sum delta);
set asdsum end=endobs;
if (j>=50) then do;
sum+1;
rl+j-50;
end;
if endobs;
mean=rl/sum;
delta=δ
run;
%mend cusum;
%cusum;

%macro deltacal;
data deltasum;
sum=.;
mean=.;
delta=.;
run;
%do delta=10 %to 400 %by 5;
%let delta=%sysevalf(&delta_/100);
%cusum;
proc append base=deltasum data=asdmean;
run;
%end;
%mend deltacal;
%deltacal;
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
5#
 楼主| 发表于 2009-6-5 22:10:41 | 只看该作者

Re: 求助编程中的问题

%macro deltacal;
data deltasum;
sum=.;
mean=.;
delta=.;
run;
%do delta=10 %to 400 %by 5[color=#FF4000:y24p7aub];*delta=10 should be delta_=10;[/color:y24p7aub]
%let delta=%sysevalf(&delta_/100);
%cusum;
proc append base=deltasum data=asdmean;
run;
%end;
%mend deltacal;
%deltacal;
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
6#
 楼主| 发表于 2009-6-5 23:20:33 | 只看该作者

Re: 求助编程中的问题

我想问一下为什么我都用delta不可以呢,好像没有要求有下划线呀
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
7#
 楼主| 发表于 2009-6-5 23:49:44 | 只看该作者

Re: 求助编程中的问题

There,
It is nothing to do with the naming convention. but look at the program

%do [color=#FF0000:e5ams0zd]delta[/color:e5ams0zd] =10 %to 400 %by 5;
%let delta=%sysevalf( [color=#FF0000:e5ams0zd]&delta_[/color:e5ams0zd] /100);
%cusum;
proc append base=deltasum data=asdmean;
run;
%end;
%mend deltacal;

first you define macro variable 'delta' ,then you evaluate delta_; that is not consistent. I think, in case of any ambiguity, you could progarm like that

%local i;
%do i=10 %to 400 %by 5;
%let delta=%sysevalf(&i/100);
...
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
8#
 楼主| 发表于 2009-6-6 07:03:01 | 只看该作者

Re: 求助编程中的问题

还是不怎么明白,我还有一个问题要问,就像我在做上面的大循环的时候,一直会出现一个窗口,window is full and must be cleared, please select
这个问题怎么解决呢
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
9#
 楼主| 发表于 2009-6-6 08:54:27 | 只看该作者

Re: 求助编程中的问题

这么大的循环,看得我头发晕,错一点在所难免。要换了我,估计行行都错!
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
10#
 楼主| 发表于 2009-6-6 09:12:24 | 只看该作者

Re: 求助编程中的问题

我的程序现在没有什么问题了,但是唯一的问题就是它在运行的时候运行一段时间就会出来一个对话框说明window is full please clear, 我直接关闭就可以了,不过我想问问有没有什么方法可以使得这些窗口不出现
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-2-5 15:56 , Processed in 0.079840 second(s), 20 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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