SAS中文论坛

标题: 求助:在循环中改变random seed [打印本页]

作者: shiyiming    时间: 2009-7-9 10:53
标题: 求助:在循环中改变random seed
大家好!

我的问题是这样的:假设我需要将一个程序循环多次,例如:
do i=1 to 1000;
...
之后的程序中用到proc surveyselect 需要设定一个random seed (例如seed=123)。我想让每个i的random seed不同,例如第一次循环(i=1)时用seed=123,第二次循环(i=2)时用seed= 123+1,依次类推...)
但是好像seed=只能是正整数不能是一个变量(例如i+1)这样的。
不知道大家有没有什么办法解决这个问题。

非常感谢!

sliu
作者: shiyiming    时间: 2009-7-9 12:09
标题: Re: 求助:在循环中改变random seed
要想以后都不重复,就用SEED=0(我不确定随机函数是不是都可以用零为不重复种子)。要想以后能重复,就用宏变量SEED1---SEED100
作者: shiyiming    时间: 2009-7-9 20:23
标题: Re: 求助:在循环中改变random seed
以后肯定是想要重复的。
用宏变量好像不行
%let Seed1 = 123;
之后用seed=&Seed1会报错。
作者: shiyiming    时间: 2009-7-9 21:14
标题: Re: 求助:在循环中改变random seed
to sliu51

我不信。。。。。。。。。。。。
作者: shiyiming    时间: 2009-7-10 08:43
标题: Re: 求助:在循环中改变random seed
麻烦你来看看我这段代码吧:

data T01_data;
infile cards;
input group id x y z;
cards;
1 11 3 8 9
1 12 4 10 16
2 21 1 5 6
2 22 2 7 7
2 23 5 6 12
3 31 8 6 7
3 32 9 4 3
4 41 2 8 11
4 42 3 4 5
4 43 5 3 4
4 44 6 7 10
5 51 4 3 2
5 52 3 4 9
;
run;
%Macro Boot2Level;
%let Nseed = 123;
%do i=1 %to 5;

proc sql;
create table T02_groups as
select group, count(*) as count
from T01_data
group by 1;
quit;

proc print data=T02_groups;
run;

proc surveyselect data=T02_groups
out=T03_sample(rename=(count=_NSIZE_) drop=numberHits)
sampsize=5 method=urs seed = &Nseed outhits;
run;

proc print data=T03_sample;
run;

data T04_newGroup;
set T03_sample;
newGroup+1;
run;

proc print data=T04_newgroup;
run;

proc sql;
create table T05_data as
select A.*, B.newGroup
from T01_data A, T04_newGroup B
where A.group=B.group
order by group, newGroup;
quit;

proc surveyselect data=T05_data
sampsize=T04_newGroup method=urs outhits
out=T06_sample_sample seed = &Nseed;
strata group newGroup;
run;

proc sort data=T06_sample_sample;
by Newgroup ID;

Proc print data=T06_sample_sample;
run;

%let Nseed=&Nseed+1;
%end;
%Mend;

%Boot2Level;

就是把一个resample的程序循环了5遍,为了能够重复因此想自己设定seed,总是报错...

麻烦大家给提点建议,谢谢!
作者: shiyiming    时间: 2009-7-10 09:26
标题: Re: 求助:在循环中改变random seed
你看看log提示啥,应该会明白为啥总是报错....
/****
SYMBOLGEN:  宏变量 NSEED 解析为 123+1+1+1+1
NOTE: 由宏变量“NSEED”生成行。
1     123+1+1+1+1
****/
作者: shiyiming    时间: 2009-7-10 09:40
标题: Re: 求助:在循环中改变random seed
不好意思,不太会用sas,看到这个提示也不知道怎么改,呵呵。
您有具体建议吗?
作者: shiyiming    时间: 2009-7-10 09:47
标题: Re: 求助:在循环中改变random seed
NSEED=123+1+1+1+1=127 的数字结果 而非123+1+1+1+1字符
seed = %eval(&Nseed) or %sysevalf(&Nseed)
把帮助翻来看看 体会体会就会明白
作者: shiyiming    时间: 2009-7-10 10:22
标题: Re: 求助:在循环中改变random seed
原来是这样,多谢多谢!
慢慢学习中...




欢迎光临 SAS中文论坛 (https://mysas.net/forum/) Powered by Discuz! X3.2